August 22, 2012

Alıntı (Salih Dinçer):

>

Bir takım geometrik şekilleri, ekrana yansıtmadan hafızada nasıl yapabileceğimizi biliyor musun?

Zaten hatırladığım kadarıyla bu işlemlerin hepsi ekran kartına basılana kadar grafik kartının belleğinde gerçekleşiyor. 'SDL_Flip()' ise bu bilgileri ekrana basıyor.

'SDL_DisplayFormat()' ise örneğin bir resmi ekrana basmak istediğimizde işe yarıyor. Bu işleme 'blit' [i]bit-block *age] transfer * deniliyor. Bu durumda 'SDL_DisplayFormat()' bizim resmimizi SDL'in anlayacağı biçime çeviriyor ve performans artışı sağlanıyor.

'SDL_MUSTLOCK()' 'ın nerede kullanıldığından emin değilim. Ama buradaki cevaba göre sanırım tek bir pikseli değil de aynı anda birden fazla piksel üzerinde değişiklik yapmak gerektiği durumlarda kullanılıyormuş.

http://stackoverflow.com/questions/6852055/how-can-i-modify-pixels-using-sdl

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 22, 2012

Alıntı (erdem):

>

Alıntı (Salih Dinçer):

>

Bir takım geometrik şekilleri, ekrana yansıtmadan hafızada nasıl yapabileceğimizi biliyor musun?

Zaten hatırladığım kadarıyla bu işlemlerin hepsi ekran kartına basılana kadar grafik kartının belleğinde gerçekleşiyor. 'SDL_Flip()' ise bu bilgileri ekrana basıyor.

Evet, dediğin gibi 'SDL_Flip()' işlevini görene kadar tık yok. Mutlaka GPU üzerinde bir şeyler yapıyor ki döngü çok hızlı işliyor; bunu da HW/SW ayrımında görüyoruz ki (-bknz. SDL_SetVideoMode (http://www.libsdl.org/docs/html/sdlsetvideomode.html)) herhalde ben çok karmaşık bir uygulama yapmadığım için her ikisinin farkını görebilmiş değilim...:)

Ancak ortada tek bir (SDL_Surface*)ekran varsa ve içi boş değilse işler karışıyor! Yapmak istediğim, 'SDL_BlitSurface()' işlevini kullanarak oluşturduğum şekli, kenarlardan ufaltıp kesiyorum. Yani çevresindeki boşlukları alma işlemini icra ediyorum. Böylece sanki BMP imiş gibi 'SDL_FreeSurface()' yapana kadar istediğim gibi kullanabiliyorum. Ama bunu, sağ elimle sol kulağım ensemden tutmak gibi yapmış olabilirim!

'SDL_DisplayFormat()' işlevini de genelde BMP dosyalarını düzeltmekte kullandıklarını gördüm:

 bmp = SDL_LoadBMP("Plane.bmp");
 SDL_Surface* resim = SDL_DisplayFormat(bmp);
 SDL_FreeSurface(bmp);

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 22, 2012

Yine tamsayı bölme işleminin gazabına uğramışsın. :D 1000 / 120'nin sonucu 8.333... değildir. ;)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 23, 2012

Alıntı (Salih Dinçer):

>

Bir takım geometrik şekilleri, ekrana yansıtmadan hafızada nasıl yapabileceğimizi biliyor musun? Aslında bir şeyi denedim ama içime sinmedi. Yani çalışıyor fakat doğru mu yapıyorum emin değilim:

> SDL_Surface* boşDöndür() {
>   return SDL_SetVideoMode(GENİŞLİK, YÜKSEKLİK, 0, SDL_DOUBLEBUF);
> }
> ```

>
Bunun hala ne kadar yanlış olduğunu bilmiyorum ama başka sorunlar ile karşılaşınca alternatif aramaya başladım. Meğer 'SDL_CreateRGBSurface()' adında bir işlev varmış. Tabi hemen, vakit kaybetmeden SDL ilintisine ekledim.
'(Not: Yakında sdl.d için üçüncü bir güncelleme geliyor, duyurusunu yaptığımda lütfen siz de güncelleyin...)'

Sonuçta bu işlev diğerine göre daha doğru görünüyor. Tamam, diğeri de bir yüzey (SDL_Surface*) gönderiyor ama aynı anda kurma yapması hiç içime sinmemişti. İşte bu aşağıdaki gerçekten boş ve şeffaf bir yüzey döndürüyor:

SDL_Surface* boşDöndür() {
SDL_Surface* bmp = SDL_CreateRGBSurface(SDL_SRCCOLORKEY, GENİŞLİK, YÜKSEKLİK,
0, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);
SDL_SetColorKey(bmp, SDL_SRCCOLORKEY, 0); // Şeffaflaştır...
return bmp;
}



-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
1 2 3
Next ›   Last »