Blogging Conținut: Flashhell Această publicație a fost transferat de la un utilizator blog personal în secțiunile generale urovok site-ului.
shaderele OpenGL. Simplu de shader GLSL
Este vorba despre shader GLSL, deși nu numai GLSL limba shader care se poate lucra cu OpenGL. Cu OpenGL pot fi de asemenea utilizate în shaderele Cg (C pentru Graphics).
Notă: bibliotecă suplimentară CG (de la NVidia) necesare pentru utilizarea acestora.
GLSL (OpenGL Shading Language) - un limbaj de nivel înalt pentru shadere de programare. Sintaxa se bazează pe limbajul ANSI C. programarea cu toate acestea, din cauza orientării sale specifice de el multe dintre caracteristicile au fost eliminate. Acest lucru a fost făcut pentru a simplifica limbajul și de a îmbunătăți performanța. Limbajul include funcții suplimentare și tipuri de date, de exemplu, pentru a lucra cu vectori si matrici. GLSL devin pe deplin parte a versiunii OpenGL 2.0.
- Vertex Shader - inlocuieste o parte a conductei grafice, realizează conversia asociată cu datele nodurilor. Cum ar fi multiplicarea vârfurilor și normalele pe matricea de proiecție și simulare, stabilind culorile nodurilor, instalarea de materiale de iluminat. El lucrează pentru fiecare nod prestate. munca obligatorie pentru vertex shader este de a înregistra poziția de sus, în gl_Position variabila built-in.
- Geometrie shader - shader care se pot ocupa nu numai cel de sus, ci o entitate întreagă. El poate fie picătură (de la tratament) primitivele, sau pentru a crea altele noi, adică, o shader geometrie este capabil să genereze primitivele. Și, de asemenea, posibilitatea de a schimba tipul de primitivelor de intrare (shader geometrie a intrat complet versiunea OpenGL 3.2).
- Fragment Shader - inlocuieste grafica parte koveyera (CG) de prelucrare a primit fiecare în etapele anterioare ale fragmentului de cod civil (nu pixeli). Prelucrarea poate include pași, cum ar fi primirea datelor de iluminat randare textură, redare de amestecare. Obligatoriu Shader fragment operație pentru înregistrarea de culoare este încorporată gl_FragColor fragment variabil sau aruncarea comandă specială se debarasa. În cazul respingerii fragmentului, fără alte plăți nu vor fi făcute cu el, iar fragmentul nu se încadrează în frame buffer.
Descărcarea și Compilarea
GLSL -sheydery a decis să păstreze sub formă de cod sursă (deși în OpenGL 4.1, și au posibilitatea de a încărca shadere sub formă de date binare). Această abordare a fost utilizată pentru o mai bună shadere tolerabilitate pentru diverse platforme hardware și software. Codurile sursă sunt compilate de către conducătorul auto. Acestea pot fi compilate numai după crearea contextului actual al OpenGL. Driverul se generează într-un cod binar optim care înțelege echipamentul. Acest lucru asigură faptul că aceeași shader va fi în mod corespunzător și eficient rula pe mai multe platforme.
Codul sursă poate fi reprezentat ca ANSI -Row, de încheiere linie de transfer ( „\ n“) sau fără ea. În cazul în care transferul nu este nevoie să treacă o serie de lungimi ale fiecărei linii.
- Primii identificatori sunt alocate ca GLuint. sub shadere - glCreateShader. și un program de shader - glCreateProgram.
- Pe sursa de shader identificator de cod este încărcat, care este transmis la glShaderSource conducătorului auto.
- După aceasta, shader este compilat glCompileShader.
- Mai multe tipuri diferite de shader sunt atașate la programul glAttachShader
- Ultimul pas - linkovanie atașat shadere într-un glLinkProgram program de shader.
Vom folosi vertex shader și fragmente, pentru că fără ele versiuni moderne ale OpenGL va atrage nimic. Alte tipuri de shadere încă nu va lua în considerare, deoarece acestea nu sunt în OpenGL 2.0, iar acestea nu sunt necesare în OpenGL 3.3 și mai sus.