Son yazýmda 3Dfx ve onun Mesa donanýmýný hýzlandýrma
sýðasýnýn ne kadar iyi olduðunu yazmýþtým. Mesa+3Dfx
kullanmanýn üstünlükleri ve yitirimleri (disadvantages)
üzerinde durmuþtum. Bu kez bu üstünlüklerin bazýlarýnýn
ayrýntýsýna girmek ve bir geliþtirmecinin bunlara nasýl
ulaþabileceðine deðinmek istiyorum.
Ana pencere içinde altpencere yaratmak için GLUT kitaplýðýnýn
nasýl kullanýlacaðýný açýklayan, Miguel'in
yazýsýndan baþlayalým. Altpencere kullandýðýnýz zaman ana
pencerenin içeriðinden baðýmsýz olarak yeni bir içerik yaratýlýr.
Ne yazýk ki Mesa için kullanýlan 3Dfx sürücüsü bir anda sadece tek
bir içeriði destekler. Eðer 3Dfx üzerinde altpencere kullanmaya
çalýþýrsanýz ana pencere içinde alt pencere görüntüleþtirmek yerine,
ana pencerenin üzerinde bir alt pencere görüntüleþtirilir. Bu durum
sýrayla ana pencerenin ve alt pencerenin çok hýzlý görüntüleþtirilmesi
etkisi yaratýr. Açýktýr ki bu, alt pencereden beklediðimiz etki deðildir.
Bu yüzden alt pencerelerde matris yýðýtlarýný kullanarak nasýl
bu sorundan uzaklaþýlacaðýný öðrenmek için Miguel'in ilerideki
açýklamalarýný beklemek zorundasýnýz.
Ýkinci olarak 3Dfx ile tam ekran kullanýrken mouse odaklamasýný
korumak sorununun nasýl aþýlacaðýný göstermek istiyorum. 3Dfx ile
tamekran görüntüleþtirmeyi kullanýrken, görüntüleþtirme 2 boyutlu
video adaptörünün çerçeve arabelleði yerine 3Dfx'in çerçeve arabelleðine
yapýlýr. Sonuçta pencere 2 boyutlu masaüstübilgisayarýnýz üzerindeki
programýnýz için yaratýlýr fakat program için görüntüleþtirmenin tümü
3Dfx'e tam ekran olarak yapýlýr. Tek kafalý sistem üzerinde, 3Dfx monitör
üzerinde yer alýr ve 2 boyutlu masaüstübilgisayar üzerinde pencere
göremeyebilirsiniz, ama iki kafalý bir sistemde, bir monitör 2 boyutlu
masaüstübilgisayar ve program için yaratýlan pencereyi gösterir ve diðer
monitör de programý tam ekran görebilirsiniz.
Pencereyi göremediðiniz için 2 boyutlu masaüstübilgisayar üzerinde
tek kafalý sistemlerde pencere odaklamasýný korumak genelde zordur.
2 boyutlu masaüstübilgisayar üzerindeki programýn penceresi odaklamasýný
kaybederse, bilgi giriþini almasý mümkün olmayabilir. Kullanýcý,
tasarlanan çýkýþ tuþuna bastýðý zaman, program giriþi kabul
edemezse ve kullanýcý, pencere üzerindeki çýkýþ düðmesinin yerini
göremezse, kullanýcý programý kapatamayabilir!
Bu sorunu gidermek amacýyla glutFullScreen() ve glViewport()
fonksiyonlarýný kullanabilirsiniz. glutFullScreen() fonksiyonu
program penceresini 2 boyutlu masaüstübilgisayarýn boyutlarýna
getirir ve böylece pencere 2 boyutlu masaüstü bilgisayar üzerinde
tam ekran durumuna gelir. Bir pencereyi, yaratýmýndan sonra
2 boyutlu masaüstübilgisayar üzerinde tam ekran durumuna getirmek
için yapabileceðiniz þey glutFullScreen()'i çaðýrmaktýr.
Pencere tam ekran durumunda olduðu zaman farenin pencere dýþýna
çýkmasý gibi bir durum yoktur, bu yüzden pencere odaklamasýný kaybedemez.
glViewport() fonksiyonu program için hangi büyüklükte viewport'un
kullanýlacaðýný belirtir. Viewport'u belirlediðiniz zaman görüntüleþtirmenin
tümü bu viewport içinde yapýlýr. Viewport'u pencerenin yeni boyutlarýna
uyarlamak için olaðan olarak, bir yenidenbiçimleme geriçaðýrma
fonksiyonu içinde glViewport()'u çaðýracaðýnýz, 3Dfx için glViewport()'u
3Dfx çözünürlüðünün boyutlarýyla çaðýrýnýz. Bu fonksiyonu; 640x480
çözünürlükte 3Dfx'i çalýþtýrýyorsanýz glViewport(0,0,640,480) þeklinde,
800x600 çözünürlükte çalýþtýrýyorsanýz glViewport(0,0,800,600) þeklinde
çaðýrabilirsiniz. Bu, pencere tam ekran olmasýna raðmen viewport'un
boyutlarýný 3Dfx kartýnýzýn çözünürlüðü olarak vermenizi saðlar.
Bu yazýya Miguel'in 3Dfx üzerinde çalýþmak için deðiþtirilmiþ
düzgün þekilli üçgeninin bir sürümünü dahil ettim (
../../common/March1998/example3.c, ../../common/March1998/Makefile). Altpencereleri
dýþladým, glutFullscreen() fonksiyonunu uygun yere ekledim (pencere
yaratýlmasý sonrasýna), ve glViewport()'u yenidenbiçimleme
geriçaðýrma fonksiyonunda, viewport'u 640x480'e (benim 3Dfx kartýmýn
çözünürlüðü) zorlamak için deðiþtirdim. 3 boyut olmaksýzýn programý
çalýþtýrýyorsanýz ( MESA_GLX_FX donaným deðiþkenlerini ayarlamaksýzýn)
program penceresinin masaüstübilgisayarýnýzýn boyutlarýnda açýlacaðýna
dikkat edin. Fakat görüntüleþtirme bu pencere içinde yalnýzca 640x480
alanýnda yapýlýr. Eðer programý 3Dfx ile çalýþtýrýyorsanýz iþlemlerin
3Dfx'in tam boyutlarýnda yapýldýðýný göreceksiniz ve program bu durumda
odaklamasýný kaybedecektir.
Dikkat edilecek diðer bir nokta da, programý 3Dfx olmadan
çalýþtýrdýðýnýzda, yalnýzca viewport'un güncellenmesi yerine tüm
ekranýn güncellenmesinden dolayý, programýn gerçekten çok yavaþ
çalýþacaðýdýr. Bu 2 boyutlu masaüstübilgisayar kullandýðýnýzda
oldukça büyük bir baþarým (performans) sorunudur fakat 3Dfx'de
tam ekran kullanýldýðýnda oldukça iyidir. Bu nedenle, 3Dfx'in
kullanýlýp kullanýlmadýðýný algýlayabilmek için programlarýnýzý
( MESA_GLX_FX çevre deðiþkenini algýlayýp okuyarak)
yazmak isteyebilirsiniz. 3Dfx'in algýlanmasý durumunda
glutFullScreen()'le glViewport()'u zorlama düzenini kullanmak
3Dfx'in algýlanmamasý durumundaysa kullanmamak seçenekleri de
programda içerilir.
|