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.