Cg

Cg (prescurtare de la C for Graphics [1] ) este un limbaj de programare de nivel înalt dezvoltat de Nvidia în strânsă colaborare cu Microsoft pentru programarea shader . Cg se bazează pe limbajul de programare C. Chiar dacă au aceeași sintaxă , unele funcții C au fost modificate și au fost adăugate noi tipuri de date pentru a face Cg mai potrivit pentru programarea GPU . Acest limbaj este specializat pentru programarea GPU și nu este folosit pentru GPGPU . Compilatorul Cg scoate programe de shader DirectX sau OpenGL . Din 2012, Cg este depreciat, fără suport suplimentar. [2]

Informații generale

Datorită progreselor tehnologice în grafica computerizată, unele domenii ale programării grafice 3D au devenit destul de complexe. Pentru a simplifica procesul, au fost adăugate noi caracteristici plăcilor grafice, inclusiv capacitatea de a-și schimba conductele de randare folosind shadere.

La început, shaderele erau programate la un nivel foarte scăzut și numai în limbaj de asamblare . Deși utilizarea limbajului de asamblare a oferit programatorului control complet asupra codului și flexibilitate, a fost destul de dificil de utilizat. Era nevoie de un limbaj de nivel înalt mai convenabil pentru programarea GPU, așa că Cg a fost creat pentru a rezolva aceste probleme și a face mai ușoară dezvoltarea shaderului.

Unele dintre beneficiile Cg:

Detalii

Tipuri de date

Cg are șase tipuri de date de bază . Unele dintre ele sunt la fel ca în C, dar există altele adăugate special pentru programarea GPU. Aceste tipuri sunt:

Cg conține, de asemenea, tipuri de date vectoriale și matrice bazate pe tipuri de date de bază, cum ar fi float3și float4x4. Aceste tipuri de date sunt destul de comune atunci când lucrați cu programarea 3D. Cg are, de asemenea, tipuri de date de structură și matrice care funcționează similar cu echivalentele lor C.

Operatori

Cg acceptă o gamă largă de operatori, inclusiv operatori aritmetici generali din C, operatori aritmetici echivalenti pentru tipuri de date vectoriale și matrice și operatori logici generali.

Funcții și structuri ale managementului

Cg acceptă structuri de control de bază C, cum ar fi if ... else, whileși for. De asemenea, are un mod similar de definire a funcțiilor.

Biblioteca standard Cg

La fel ca C, Cg are un set de funcții pentru sarcini comune de programare GPU. Unele dintre funcții au echivalente C, cum ar fi funcțiile matematice absși sin, în timp ce altele sunt specializate pentru sarcini de programare grafică, cum ar fi funcțiile de mapare a texturii tex1Dși tex2D.

Cg runtime library

Programele Cg sunt doar shadere și au nevoie de programe de sprijin care se ocupă de restul procesului de randare. Cg poate fi folosit cu două API-uri grafice : OpenGL sau DirectX . Fiecare dintre ele are propriul set de funcții pentru comunicarea cu programul Cg, cum ar fi setarea shaderului Cg curent, trecerea parametrilor etc.

Pe lângă faptul că poate compila codul sursă Cg pentru asamblare, runtime-ul Cg are și capacitatea de a compila shaders în timpul rulării programului suport. Acest lucru permite shader-ului să fie compilat cu cele mai recente optimizări disponibile pentru hardware-ul pe care programul rulează în prezent. Cu toate acestea, această metodă necesită ca codul sursă pentru shader să fie disponibil în text simplu pentru compilator, permițând utilizatorului programului să acceseze codul sursă pentru shader. Unii dezvoltatori văd acesta ca principalul dezavantaj al acestei tehnici.

Pentru a evita dezvăluirea codului sursă al shaderului și pentru a suporta în continuare unele dintre optimizările hardware specifice, a fost dezvoltat conceptul de profile. Shaderele pot fi compilate în funcție de diferite platforme hardware grafice (în funcție de profiluri). Când programul de suport este executat, cel mai optimizat shader este încărcat în funcție de profilul său. De exemplu, ar putea exista un profil pentru o placă grafică care acceptă shadere complexe și un alt profil care acceptă doar shadere minime. Prin crearea unui shader pentru fiecare dintre aceste profiluri, programul de suport crește numărul de platforme hardware acceptate fără a sacrifica calitatea imaginii pe sisteme puternice.

Exemplu de shader Cg

// input vertex struct VertIn { float4 pos : POSITION ; culoare float4 : COLOR0 ; }; // iesire vertex struct VertOut { float4 pos : POSITION ; culoare float4 : COLOR0 ; }; // intrarea principală a vertex shader VertOut main ( VertIn IN , uniform float4x4 modelViewProj ) { VertOut OUT ; OUT . pos = mul ( modelViewProj , IN . pos ); // calculează coordonatele de ieșire OUT . culoare = IN . culoare ; // copiați culoarea de intrare la ieșire OUT . culoare . z = 1,0 f ; // componenta albastră a culorii = 1.0f return OUT ; }

Note

  1. Cg Întrebări frecvente . Preluat la 7 septembrie 2018. Arhivat din original pe 7 septembrie 2018.
  2. Cg Toolkit | Dezvoltator NVIDIA . Preluat la 7 septembrie 2018. Arhivat din original pe 7 septembrie 2018.