Agora
Media
Libraria Byblos



AgoraNews  





PC Magazine Ro  




NET Report   




Ginfo   




agora ON line   





PC Concrete   





Liste de discuții   




Cartea de oaspeți   




Mesaje   





Agora   








Clic aici
PC Report - ultimul numar aparut


Tendințe - PC Magazine Romania, Decembrie 2003

O nouă revoluție

în interfețele pentru programarea aplicațiilor (API-urile) grafice

Rodica Baciu

În ultimele două decenii interesul pentru grafica cu calculatorul a crescut progresiv. În mod evident a crescut și dorința dezvoltatorilor de aplicații grafice de a scrie aplicații capabile să ruleze pe o varietate de platforme având capacități grafice diferite. Un standard grafic ușurează această sarcină prin eliminarea necesității de a scrie un driver grafic distinct pentru fiecare platformă pe care rulează aplicația. În prezent există câteva standarde grafice pentru aplicațiile grafice interactive 3D, și anume OpenGL, PHIGS, PEX, IrisGL, Direct3D, RenderMan, etc. Printre aceste standarde OpenGL s-a bucurat în ultimul deceniu de o largă acceptare în lumea programatorilor.

Interfața grafică OpenGL

Efortul de definire a standardului grafic OpenGL (Open Graphics Library) a început în anii 1990 și specificarea primei versiuni OpenGL s-a realizat în 1992. O implementare OpenGL poate fi în mod eficient găzduită la aproape orice nivel al hardware-ului grafic, de la memoria video de bază la cele mai sofisticate subsisteme grafice.

Specificația OpenGL este realizată de un consorțiu independent, OpenGL Architecture Review Board (ARB), printre ai cărui membrii se află Silicon Graphics și Microsoft. Adăugările la specificații (prin extensii) sunt bine controlate de consorțiu și actualizările propuse sunt anunțate din timp pentru ca dezvoltatorii să adopte modificările. Este asigurată compatibilitatea cu dezvoltările anterioare ale bibliotecii. În prezent s-a ajuns la versiunea 1.4.

Figura 1 arată schema fluxului de procesare OpenGL. Comenzile intră spre OpenGL prin stânga. Comenzile nu sunt altceva decât apeluri de funcții și proceduri OpenGL. Multe dintre comenzi pot fi acumulate în liste de display pentru o procesare ulterioară. În cazul în care se lucrează cu procesare imediată comenzile sunt transmise prin fluxul de procesare OpenGL.

Primul stadiu de procesare asigură o modalitate eficientă pentru aproximarea curbelor și a suprafețelor curbe prin evaluarea funcțiilor polinomiale ale valorilor de la intrare și modelarea acestora prin primitive geometrice OpenGL(puncte, segmente de dreaptă și poligoane). Acest stadiu este parcurs doar de acele comenzi utilizate pentru reprezentarea curbelor și a suprafețelor parametrice. Următorul nivel operează asupra primitivelor geometrice descrise prin coordonatele vârfurilor. În acest stadiu vârfurile sunt transformate, se aplică iluminarea și primitivele sunt decupate față de volumul de vizualizare pentru a fi pregătite pentru nivelul următor - rasterizarea. Rasterizarea produce o serie de adrese și de valori pentru memoria video utilizând descrierea 2D pentru punct, segment de dreaptă, sau poligon. Fiecare fragment (culoarea, coordonatele de textură și adâncimea z pentru un pixel) alimentează nivelul următor care asigură operații asupra fragmentelor individuale înainte ca ele să modifice memoria video. Aceste operații includ actualizări condiționale în memoria video pe baza noilor valori sau a valorilor de adâncime memorate anterior, amestecarea culorilor fragmentelor cu culorile memorate, precum și mascarea și celelalte operații logice asupra valorilor fragmentelor.

Procesarea pixelilor și a imaginilor trece peste secțiunea de procesare a vârfurilor din flux pentru a transmite un bloc de fragmente în mod direct spre blocul de rasterizare și blocul operațiilor asupra fragmentelor individuale, determinând eventual ca un bloc de pixeli să fie scris direct în memoria video. Valorile pot fi deasemenea citite din memoria video sau copiate dintr-o porțiune a memoriei video în alta.

De la momentul apariției primei specificații OpenGL s-au realizat progrese mari în arhitectura hardware-ului grafic. Acesta se schimbă de la modelul unei mașini de stare fixe (pentru care lucra la început OpenGL) la cel al unei mașini de stare programabile.

Dorința de a demasca capacitățile extinse ale hardware-ului a condus la un vast număr de extensii care s-au scris pentru OpenGL, dar consecința neplăcută a acestui fapt este reducerea sau chiar eliminarea portabilității aplicațiilor - unul din factorii cheie motivanți pentru OpenGL.

O cale naturală de a reduce această complexitate și proliferarea extensiilor este de a permite ca anumite nivele din fluxul de procesare OpenGL să fie înlocuite de nivele programabile de către utilizator. Aceasta s-a realizat la câteva extensii recente dar programarea este făcută în limbaj de asamblare, care este expresia directă a hardware-ului actual fără o privire în perspectivă. Aceasta nu este însă o soluție viabilă, deoarece în mare parte, programatorii au renunțat la limbajul de asamblare în favoarea limbajelor de nivel înalt, pentru a câștiga productivitate, portabilitate și ușurință în utilizare.

Hardware-ul grafic programabil

Până nu de mult sfera hardware-ului grafic programabil a aparținut, în principal, cercetătorilor și dezvoltatorilor driver-elor grafice. Programabilitatea de bază a hardware-ului nu a fost demascată, așa că dezvoltatorii de aplicații au fost forțați în utilizarea unei funcționalități fixe asigurată de API-urile grafice tradiționale.

Motivele pentru care companiile producătoare de hardware nu au demascat fundamentul programabil al produselor lor sunt:

  • educarea și sprijinirea beneficiarilor pentru a utiliza nivelul de jos al interfețelor specifice dispozitivului este un proces costisitor,
  • aceste interfețe de obicei se modifică radical cu fiecare nouă generație de hardware grafic,
  • dezvoltatorii de aplicații care utilizează o asemenea interfață specifică dispozitivului, pentru o porțiune a hardware-ului grafic, sunt confruntați cu problema descurajantă a actualizării software-ului lor pentru fiecare nouă generație de hardware.
  • dificultatea susținerii aplicației pentru hardware-uri de la diverși furnizori.

Toate însă evoluează și în acest moment dezvoltatorii de aplicații sunt cei care, mai mult ca niciodată, trag cortina, și cer diferite caracteristici noi în hardware pentru a crea efecte de ecran tot mai spectaculoase. Ca rezultat, noile proiecte de hardware grafic sunt mai programabile decât au fost vreodată.

În acest moment, pentru dezvoltatorii de hardware a devenit mai ușor să susțină noile caracteristici cerute de dezvoltatorii de aplicații prin demascarea programabilității fundamentale a hardware-ului. Programabilitatea hardware-ului grafic aduce multe facilități în aplicațiile grafice: reprezentarea mai realistă a materialelor, redarea fenomenelor naturale, îmbunătățește texturarea, antialiasing mai bun, etc.

OpenGL Shading Language (sau GLslang)

Pentru a ține pasul cu inovările la nivelul hardware-ului, fără însă a forța programatorii să lucreze în limbaj de asamblare, soluția oferită de firmele din domeniul grafic este un limbaj de nivel înalt pentru OpenGL, independent de hardware, ușor de utilizat, suficient de puternic pentru a trece testul timpului și care va reduce drastic nevoia de extensii.

Așa cum am arătat, tendința recentă în hardware-ul grafic este de a înlocui funcționalitatea fixă cu programabilitatea în porțiuni ale fluxului de procesare care au devenit extrem de complexe - procesarea vârfurilor și procesarea fragmentelor. GLslang a fost proiectat pentru a permite programatorilor de aplicații să exprime procesarea care apare în aceste puncte programabile ale fluxului OpenGL.

Dar de ce "shading language"?

Unitățile scrise în acest limbaj și care sunt compilabile în mod independent sunt denumite shader-e. Un program este un set de shader-e care sunt compilate și linkeditate împreună. Există unele dispute că shading (umbrire) are conotații de stabilire a nivelului intensității așa că nu se potrivește cu operațiile pentru vârfuri. RenderMan însă nu face aceste distincții și nici DX8. S-a ales așadar varianta de a continua cu utilizarea de shader ca termen general pentru un program care operează asupra unei părți a fluxului grafic.

GLslang este bazat pe ANSI C și are caracteristici similare cu RenderMan. Multe din caracteristicile C au fost păstrate cu excepția cazurilor în care acestea intră în conflict cu performanța sau ușurința în implementare a GLslang. C a fost extins cu tipuri de date matriceale și vectoriale pentru a-l face mai concis pentru operațiile tipice cerute de grafica 3D. GLslang include suport pentru bucle, apeluri de subrutine, și expresii condiționale. Au fost deasemenea împrumutate unele mecanisme din C++, cum ar fi supraîncărcarea funcțiilor, și abilitatea de a declara variabile acolo unde este nevoie prima dată de ele și nu obligatoriu la începutul blocului.

Idea acestui limbaj a fost lansată de firma 3Dlabs la conferința SIGGRAPH 2001. Firma 3Dlabs a realizat specificarea limbajului, compilatorul și articole pe marginea limbajului. Specificarea limbajului GLslang a fost aprobată în 11 iunie 2003 ca extensie oficială ARB. ARB intenționează să încorporeze GLslang în specificația de bază cât mai curând posibil - creând versiunea OpenGL 2.0. Firma 3Dlabs susține acest efort și preconizează chiar ca aceasta să aibă loc până la finele anului 2003.

Continuând tradiția de compatibilitate "backwards", pe care au avut-o toate cele patru versiuni OpenGL, OpenGL 2.0 va fi un superset al lui OpenGL 1.4, astfel că aplicațiile mai vechi vor rula pe acceleratoarele hardware cu drivere OpenGL 2.0 fără modificări.

Firma 3Dlabs este prima producătoare de drivere GLslang. Astfel Wildcat VP OpenGL are driver-e care adaugă suport preliminar pentru GLslang.

În figura 2 este evidențiată relația dintre codul limbajului, compilator, driver și hardware-ul grafic. Driver-ele OpenGL 2.0 existente pe plăcile grafice vor conține compilatorul necesar transferării codului din limbaj de nivel înalt GLslang în limbaj mașină executabil de hardware-ul grafic programabil.

Concluzii

Este de așteptat ca producătorii de hardware să lanseze pe piață hardware grafic care să suporte OpenGL 2.0, este de așteptat ca ARB să includă cât mai curând specificațiile noului limbaj în nucleul de bază și este de așteptat ca dezvoltatorii de aplicații să lanseze primele aplicații grafice care au la bază OpenGL 2.0. Și nu în ultimul rând este de așteptat ca programatorii din România să țină pasul cu aceste noi provocări din lumea graficii.


PC Magazine Ro | CD ROM | Redactia | Abonamente | CautareArhive

Copyright © 1999-2002 Agora Media.

[email protected]

LG - LifeŽs Good

www.agora.ro

deltafri

www.agora.ro

www.agora.ro

www.agora.ro