2017-12-20 7 views
-1

Ich versuche, ein OpenGL-Programm auf GLESv2 zu portieren. Das Programm verwendet den folgenden Code eine Textur zu den Standard-Framebuffer (es scheitert auch, wenn ich es auf eine fbo rendern, die auch auf OpenGL funktioniert).glDrawArrays wirft GL_INVALID_VALUE auf GLESv2

Dies funktioniert gut mit OpenGL aber es schlägt auf GlDrawArrays() unter GLESv2 fehl. Ich lese diese Frage: glDrawElements throw GL_INVALID_VALUE​ error, die meinem Problem sehr ähnlich ist, aber ich kann nicht herausfinden, wie man die Lösung auf meinen Code anwendet, da ich VertexArray nicht benutze und ich GL sehr neu bin.

inst-> Textur ist eine Textur, die mit glTexImage2D() hochgeladen wurde. Ich habe die vertex_buffer direkt nach EGL Initialisierung und die Erstellung der Shadern:

glGenBuffers(1, &vertex_buffer); 
    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), 
      vertices, GL_STATIC_DRAW); 
    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); 
    glVertexAttribPointer(bgra_pos, 2, GL_FLOAT, GL_FALSE, 0, 0); 
    glEnableVertexAttribArray(bgra_pos); 
    DEBUG_ERROR_CHECK(); 

Edit: Sie können an der gesamten Quelldatei hier: https://github.com/fernando-rodriguez/mediabox/blob/bc4135d9568b2c5b4e8f39ac63ded2cb66023bcd/src/lib/ui/video-opengl.c. Die Datei ist ein Video- "Treiber" für einen Compositor. Sie erstellt lediglich 2D-Oberflächen und rendert sie auf dem Bildschirm. Wenn etwas mit der Frage nicht in Ordnung ist oder etwas fehlt, poste bitte einen Kommentar, damit ich es beheben kann. Vielen Dank.

Antwort

0

Ich fand es heraus. Ich habe eglBindAPI() nach eglCreateContext() aufgerufen, also glaube ich, dass ich tatsächlich einen GLES1-Kontext erstellt habe.

Verwandte Themen