2012-04-04 3 views

Antwort

2

Zuerst Sie Ihre Shadern in Ihr Programm zu bekommen. Sie können den Shader-Code entweder direkt in ein const char * kopieren, wie ich es unten zeige, oder Sie können den Shader zur Laufzeit aus einer Datei laden, die je nachdem, für welche Plattformen Sie arbeiten, unterschiedlich ist, so dass ich nicht zeigen werde, wie das geht.

const char *vertexShader = "... Vertex Shader source ..."; 
const char *fragmentShader = "... Fragment Shader source ..."; 

erstellen Shadern sowohl für einen Vertex-Shader und ein Fragment-Shader und speichern ihre ids:

GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); 
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); 

Dies ist, wo Sie die Shadern füllen Sie nur mit den Daten erstellt entweder Sie kopieren in eine const geklebt char * oder laden sie aus Datei:

glShaderSource(vertexShader, 1, &vertexShader, NULL); 
glShaderSource(fragmentShader, 1, &fragmentShader, NULL); 

Dann sagen Sie das Programm, das Sie Shadern zu kompilieren:

ein Shader-Programm erstellen, das die Schnittstelle zu Ihren Shadern von OpenGL ist:

shaderProgram = glCreateProgram(); 

Bringen Sie Ihre Shadern zum Shader-Programm:

glAttachShader(shaderProgram, vertexShader); 
glAttachShader(shaderProgram, fragmentShader); 

Verknüpfen Sie das Shader-Programm zu Ihrem Programm:

Sagen Sie OpenGL, dass Sie das von Ihnen erstellte Shader-Programm verwenden möchten:

glUseProgram(shaderProgram); 

Vertex Shader:

attribute vec4 a_Position; // Attribute is data send with each vertex. Position 
attribute vec2 a_TexCoord; // and texture coordinates is the example here 

uniform mat4 u_ModelViewProjMatrix; // This is sent from within your program 

varying mediump vec2 v_TexCoord; // varying means it is passed to next shader 

void main() 
{ 
    // Multiply the model view projection matrix with the vertex position 
    gl_Position = u_ModelViewProjMatrix* a_Position; 
    v_TexCoord = a_TexCoord; // Send texture coordinate data to fragment shader. 
} 

Fragment Shader:

precision mediump float; // Mandatory OpenGL ES float precision 

varying vec2 v_TexCoord; // Sent in from Vertex Shader 

uniform sampler2D u_Texture; // The texture to use sent from within your program. 

void main() 
{ 
    // The pixel colors are set to the texture according to texture coordinates. 
    gl_FragColor = texture2D(u_Texture, v_TexCoord); 
}