Home Index Search Links About Us
[LinuxFocus Image]
[Navegation Bar]
  News   Archives   Companies   Tips  

Donaným Tarama:
Voodoo 3Dfx akýlda tutularak OpenGL ve GLUT Programlama

Yazar: Phil Ross

Çeviri: Esma Meral


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.


Daha Çok Bilgi Ýçin:
© 1998 Phillip Ross
Bu sanalyörenin bakýmý Miguel A Sepulveda tarafýndan yapýlmaktadýr.