Möchten Sie OpenGL 1.1-Code zu OpenGL 2.0 konvertieren.Konvertieren Sie OpenGL 1.1-Code in OpenGL 2.0
Ich benutze Cocos2d v2.0 (ein Framework zum Erstellen von 2D-Spiele)
Möchten Sie OpenGL 1.1-Code zu OpenGL 2.0 konvertieren.Konvertieren Sie OpenGL 1.1-Code in OpenGL 2.0
Ich benutze Cocos2d v2.0 (ein Framework zum Erstellen von 2D-Spiele)
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);
}
Sie müssen Shader binden, etwas zu Drow. Ohne Shader wird nichts gezeichnet. –