Jay Link Yazar hakk�nda: Jay Link 20'li ya�larda ve Springfield, Illinois'de ya��yor. Linux'dan ba�ka da�c�l�k ve u�mak ilgisini �ekiyor. Kendisi hem �abucak ge�en bo� zamanlar�nda InterLink BBS'i (tasar�ms�z ve k�r amac� g�tmeyen Internet sa�lay�c�s�) y�netiyor hem de kira �demek i�in �ok �e�itli tuhaf i�lerde �al���yor. |
Sisteminiz i�in kullan�m� kolay grafik paketleri mi ar�yorsunuz? E�er �yleyse daha fazla kendinizi yormay�n. SVGAlib ile grafik uygulamalar� olu�turman�n kolay yollar�n� ��renebilir ve X Pencere Sistem'inin be�enmedi�iniz kesimlerini de�i�tirebilirsiniz. E�er C ile programlama konusunda az da olsa bilginiz varsa SVGAlib'i kullanabilirsiniz.
SVGAlib, Linux i�in d���k d�zeyde grafik kitapl���d�r ve de grafiklere destek sa�layamad��� bir durumda C programlama dili ile d�zeyi art�r�labilir.
Ama C ile yaz�lm�� �ok grafik program� bulunmaktad�r!
Evet, ama onlar�n t�m� d�� kitapl�k ba�l� durumdad�r. C kendisini size yaln�zca yaz� olarak verebilir. ��nk� burada t�m grafik fonksiyonlar� sisteme ba��ml�d�r ve ta��nabilir de�ildir. Ne yaz�k ki bir i�letim sistemi i�in kodlanm�� grafik yordamlar, yeniden yaz�lmad�k�a ba�ka i�letim sistemleri alt�nda �al��mayacakt�r. �rne�in ba�lang��ta DOS ya da Windows i�in yaz�lan grafikler Linux alt�nda kullan�lam�yor.
Linux alt�ndaki C'de grafik kodlamak i�in Linux'a �zg� d�� fonksiyonlar k�mesini kullanma zorunlulu�u vard�r. SVGAlib b�yle bir k�medir.
|
X Pencere Sistemi (XFree86) ger�ekten bir sunucudur .Bu sunucu X'e gereksinim duyan her uygulamadan �nce devreye girmi� olmal�d�r. Ayr�ca, X sunucusu sistemde i�ler yo�unla�t���nda devreye girecek ve sizin sanal konsoldan (Alt 1-6) kullan�m�n�za engel olacakt�r.
�te yandan SVGAlib b�yle bir haz�rl�k gerektirmez. SVGAlib'i, X Windows'ta yapt���n�z gibi "�al��t�rmazs�n�z". Basit olarak, SVGAlib, /lib ve /usr/lib i�indeki di�er kitapl�klar gibi, C programlar� taraf�ndan �a�r�lan bir ikilitaban (binary) C kitapl���d�r. SVGAlib uygun bi�imde y�klendi�i takdirde ortalama bir kullan�c�, SVGAlib'in varl���n� fark edememelidir. Sonu� olarak SVGAlib, sizin sanal konsollar�n�z� etkilemeyecek ve de �oklu uygulamalar�n�z� �al��t�rabilmenin �zg�rl���n� ya��yacaks�n�z. Bir konsolda normal yaz� bi�imindeki i�leminizi yaparken bir di�erinde grafikle ilgili i�lemlerinizi y�r�tebileceksiniz.
X Windows uygulamalar�, SVGAlib i�in olanlardan daha fazla say�dad�r. ��nk� X Window Sistem genel olarak UNIX ortamlar�n�n t�m|ne �zg�d�r (Bir�ok UNIX'de ko�turulabilir). Oysa, SVGAlib'i yaln�zca Linux kullanabilir. �stelik zay�f yaz�lan SVGAlib uygulamar� konsolunuzu kilitleyebilir ve bilgisayar�n�z� yeniden ba�latmak durumunda kalabilirsiniz. Sonu� olarak, SVGAlib grafikleri kullanmakta olan iki ekran aras�nda, birinden di�erine �abucak ge�ilmemelidir, aksi halde ekran bozunmas�yla kar��la��p yeniden ba�latmak zorunda kal�nabilir.
Bununla birlikte, SVGAlib'in bir g�venlik g�ze al�m� (security risk) oldu�u s�ylenir. SVGAlib uygulamalar� "setuid root" t�r�nde bir hakka sahip olmal�d�r, bu haktan �al��t�rman�n hemen ard�ndan vazge�ilir. �lgilenmek i�in bir gereksinim de yoktur.
�zetleyecek olursam, daha �nce s�z�n� etti�im sorunlara ra�men SVGAlib'in h�z� ve kullan�m kolayl��� bir �ok durumda SVGAlib'i �ekici yapmaktad�r. �zellikle ekran�n�zda �abucak ve kolayl�kla �ekiller �izmek istiyorsan�z.
#include <stdio.h> #include <vga.h> int main(void) { vga_init(); vga_setmode(5); vga_setcolor(4); vga_drawpixel(10,10); sleep(5); vga_setmode(0); exit(0); }
Burada ekran�n�zda yaln�zca k�rm�z� bir g�r�nt� birimi (pixel) boyanacak. 5 saniye sonra konsolunuz yaz� kipine (mode) ge�ecek ve programdan ��kacak.
vga_init() �eklindeki ilk ifademize dikkat edin. Bu root konumundan ��k�p SVGAlib kitapl���n� ba�lat�r. �kinci sat�r, vga_setmode(5), ekran� 320x200x256'ya kar��l�k gelen 5 kipine ayarlar. Ba�ka bir deyi�le bu kip ekran�n�z�n 320 g�r�nt�birimi (pixel) geni�li�inin, 200 g�r�nt�birimi uzunlu�unun ve 256 renk deste�inin s�zkonusu oldu�u duruma kar��l�k gelmektedir. Ayn� i�levi vga_setmode(G320x200x256) �eklinde yazarak da yapt�rabilirsiniz. Her iki deyim de kabul g�recektir. Bir sonraki buyru�umuz, vga_setcolor(4), o andaki rengi k�rm�z� yapmaya yarar. Burada 0'dan 255'e kadar renk se�imi yapabiliriz. Daha fazla renk varolan di�er buyruklarla sa�lanabilir fakat bu �rnek i�in basit renkleri al�yoruz. Sonu� olarak 10, 10 koordinatl� g�r�nt�birimimizi boyam�� oluyoruz. Bu, ekran�m�z�n sol taraf�ndan sa��na do�ru ve a�a��ya do�ru 11 bo�luk verdi�imiz anlam�na geliyor. Koordinat tak�m� 0'dan ba�lad���ndan, 10'a de�il 11'e kar��l�k geldi�ine dikkat edelim. 0, 0 koordinat� sol �st k��eye kar��l�k geliyor. vga_setmode(0), ekran� yaz� kipine geri d�nd�r�yor. vga_setmode(text) deyimi vga_setmode(0) deyimine e�de�erdir. Bunu program�n sonunda yapmak her zaman iyidir. Aksi takdirde, kullan�c�lar�n�z�n ya�amn� g�gle�tirirsiniz.
Bu kodlar� derlemek i�in al���lm�� gcc derleyicisini kullan�n. Bu arada -lvga buyru�uyla SVGAlib'e ba�lant� yapmak zorundas�n�z. Son olarak en iyi d�zeyde optimizasyon i�in -o3 kullanman�z� �neririm. Dolay�s�yla buyru�umuz ��yle olacakt�r:
gcc -O3 -o sample sample.c -lvga
Daha sonra, root hesab� olmayanlara kulland�rtabilmek amac�yla,
chmod u+syaz�lmal�d�r.
�al��t�rmak i�in, yaln�zca
sample <veya ne ad verdiyseniz>yaz�lmal�d�r
SVGAlib buyruklar�n�n tam bir k�mesi SVGAlib elyordam sayfalar�nda kaynakyaz�land�r�lm��t�r (documented). Burada bunlar� t�m�ne girmek yerine SVGAlib fonksiyonlar�n�n daha h�zl� bir k�mesini kullanan ikinci bir �rnek program yazaca��z:vgagl.
"man vgagl"yaz�n. vgagl'nin "SVGAlib �zerine kurulmu� paketemicibellek-d�zeyli (framebuffer-level) h�zl� bir grafik kitapl���" oldu�unu g�receksiniz. Temelde size, tek bir deyimle �ekil �izme yetene�i olanlar gibi ileri grafik fonksiyonlar� verecektir.
A�a��da vgagl kullanan bir program verilmektedir. O, baz� kurulum programlar�nca kullan�lan gittik�e kararan mavi ekran g�r�nt�lemelidir. Onunla ekran�n �st k�sm�ndaki a��k maviden ekran�n alt�na do�ru kararan mavi �eklinde bir g�r�nt� olu�turulmaktad�r. Burada ilk program�m�zdan farkl� olarak g�r�nmeyen bir "sanal" ekranda �izim yap�l�yor. B�t�n �izgiler �izildi�inde g�r�nen "fiziksel" ekrana resmin bitmi� halinin kopyas� d���r�l�yor. Bu y�ntem, ekrandaki kirp��malar� (screen flicker) yok edecek ve uygulaman�z�n daha profesyonelce g�r�nmesine neden olacakt�r. Sanal ekran�n, g�r�nt�n�n yerle�tirilece�i yere konulmadanm �nce birle�tirildi�i bir yer, arka sahne, olarak d���n�lmesi ger�ekten g�zel.
Derleme i�in;
gcc -O3 -o gradient gradient.c -lvgagl -lvgayazman�z� �neririm.
Burada -lvgal 'nin -lvga'dan �nce �a�r�ld���na dikkat edin. chmod u+s buyruk dizisini an�msad�n�z m�?
��te kodlar: Y�reye�ek
#include <stdio.h> #include <stdlib.h> #include <vga.h> #include <vgagl.h> GraphicsContext *physicalscreen; GraphicsContext *virtualscreen; int main(void) { int i, j, b, y, c; vga_init(); vga_setmode(5); gl_setcontextvga(5); gl_setcontextvgavirtual(5); physicalscreen = gl_allocatecontext(); gl_getcontext(physicalscreen); virtualscreen = gl_allocatecontext(); gl_getcontext(virtualscreen); y = 0; c = 0; gl_setpalettecolor(c, 0, 0, 0); c++; for (i = 0; i < 64; i++) { b = 63 - i; gl_setpalettecolor(c, 0, 0, b); for (j = 0; j < 3; j++) { gl_hline(0, y, 319, c); y++; } c++; } gl_copyscreen(physicalscreen); getchar(); gl_clearscreen(0); vga_setmode(0); exit(0); }
#include <vgagl.h> yazmaya gereksiniminiz oldu�una dikkat edin.
Kodlar�m�z� ba�latmaya a�a��daki grafik i�erik ayarlamalar�yla ba�l�yoruz:
GraphicsContext *physicalscreen GraphicsContext *virtualscreen
Daha sonra de�i�kenlerimizin belirtimini yap�yor ve vga_setmode() ile ekran kipimizi ayarl�yoruz. Daha �nce kulland���m�z gibi mod 5 (G320x200x256) kullan�yoruz.
G�r�nen "fiziksel" ekranla g�r�nmeyen "sanal" ekran�n her ikisini de ba�latmam�z gerekir. Daha sonra i�erikleri de�i�kenlerimize yerle�tirerek sakl�yoruz:
gl_setcontextvga(5) gl_setcontextvgavirtual(5) physicalscreen = gl_allocatecontext() gl_getcontext(physicalscreen) virtualscreen = gl_allocatecontext() gl_getcontext(virtualscreen)
Burada sanal ekranla �al���ca��m�z� duyuruyoruz:
gl_setcontext(virtualscreen).gl_setpalettecolor() bize mavinin 64 de�i�ik tonunu verir. Ton ba��na 3, toplam 192 �izgi �izece�iz. Kalan 8 �izgi siyah olacak b�ylelikle de g�r�nmeyecekler.
Bitirdi�imizde sanal ekran�m�zdan (o andaki ekran�m�z) fiziksel ekrana gl_copyscreen(physicalscreen) ile kopyalayaca��z.
Bu kez kullan�c� resmi ne kadar s�re i�in g�r�n�r k�laca��na karar verecek. getchar() kullan�c�n�n girece�i de�eri bekler. Klavyeden bir tu�a bas�ld���nda (hangisi oldu�u �nemli de�il) gl_clearscreen(0) ile ekran� temizler ve vga_setmode(0) ile yaz�ya d�neriz.
SVGAlib fonksiyonlar�n�n t�m�n� "man svgalib" ve "man vgagl" yazarak g�rebilirsiniz. Ondan sonra her bir fonksiyonun kendi elyordam sayfas�na ge�ebilirsiniz. Bu konuyu okuduktan sonra ger�ekten kolayl�kla yeni buyruklar� programlar�n�za ekleyebilirsiniz. Zaten, SVGAlib ile birlikte gelen bir�ok ��retici program var bulunmaktad�r.
Elinizdekinin yetersiz olmas� durumunda s�r�m� yenilemek i�in SVGAlib'in son s�r�m�n� sunsite.unc.edu sanaly�resinde pub/Linux/libs/graphics dizininde veya tsx-11.mit.edu sanaly�resinde pub/linux/sources/libs dizininde bulabilirsiniz. Bu yaz�y� yazd���mda varolan s�r�m� 1.3.0 idi.
Son olarak, Slackware da��t�m� iyi olmakla bilikte, SVGAlib'i yanl�� dizine y�kleme e�iliminde. Yeni SVGAlib da��t�m�n� Sunsite veya MIT'den �ekip y�kleyerek bu durumdan kurtulabilirsiniz.
Yaz�n�n dergiye gelen asl� �ngilizce'dir.
Bu g�rsel sanaly�renin bak�m�n� Miguel Angel Sepulveda
yapmaktad�r. © Jay Link 1998 LinuxFocus 1998 |