|  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. |