Ich versuche, ein einfaches strukturiertes Quad in OpenGL ES 2.0 auf einem iPhone zu rendern. Die Geometrie ist in Ordnung und ich bekomme die erwartete Quad, wenn ich eine feste Farbe in meinem Shader:OpenGL ES 2.0 Texturierung
gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0);
Und ich bekomme die erwarteten Gradienten, wenn ich die Textur machen Koordinaten direkt:
gl_FragColor = vec4 (texCoord.x, texCoord.y, 0.0, 1.0);
Das Bild Daten werden von einem UIImage geladen wird, innerhalb von 1024x1024 zu passen skaliert und in eine Textur geladen etwa so:
glGenTextures (1, &_texture); glBindTexture (GL_TEXTURE_2D, _texture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
width
, height
, und um den Inhalt von data
sind alle korrekt, wie im Debugger untersucht.
Wenn ich meine Fragment-Shader ändern, um die Textur zu verwenden:
gl_FragColor = texture2D (tex, texCoord);
... und binden die Textur und machen etwa so:
glActiveTexture (GL_TEXTURE0); glBindTexture (GL_TEXTURE_2D, _texture); // this is unnecessary, as it defaults to 0, but for completeness... GLuint texLoc = glGetUniformLocation(_program, "tex"); glUniform1i(texLoc, 0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
... ich nichts. Ein schwarzes Viereck. glGetError()
gibt keinen Fehler zurück und glIsTexture(_texture)
gibt True zurück.
Was mache ich hier falsch? Ich bin immer und immer wieder über jedes Beispiel gestolpert, das ich online finden konnte, aber jeder tut es genau so, wie ich bin, und der Debugger zeigt meine Parameter den verschiedenen GL-Funktionen an, was ich von ihnen erwarte.
Genau wie Sie, kann ich nicht offensichtlich etwas falsch mit dem Code angezeigt sehen. Wenn Sie wollen, können Sie das ganze Projekt irgendwo posten? Es muss wirklich sehr interessant sein. – Tommy
Ich möchte nicht das gesamte Projekt veröffentlichen, aber der OpenGL-Code befindet sich in einer eigenständigen UIView-Unterklasse: – Xtapolapocetl
http://dl.dropbox.com/u/163839/FilteredImageView/FilteredImageView.h – Xtapolapocetl