2017-12-20 18 views
-1

OpenGLプログラムをGLESv2に移植しようとしています。プログラムは、次のコードをデフォルトのフレームバッファにテクスチャを使用します(OpenGLでも動作するfboにレンダリングすると失敗します)。glDrawArraysがGLESv2でGL_INVALID_VALUEをスローする

glBindFramebuffer(GL_FRAMEBUFFER, 0); 
    glVertexAttribPointer(bgra_texcoords, 2, GL_FLOAT, GL_FALSE, 0, display_texcoords); 
    glEnableVertexAttribArray(bgra_texcoords); 
    DEBUG_ERROR_CHECK(); 

    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); 
    glUseProgram(bgra_program); 
    glBindTexture(GL_TEXTURE_2D, inst->texture); 
    glUniform1i(bgra_texture, 0); 
    glViewport(inst->x, root_surface->h - (inst->y + inst->h), inst->w, inst->h); 
    DEBUG_ERROR_CHECK(); 

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
    DEBUG_ERROR_CHECK(); 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
    glFlush(); 

これはOpenGLで問題なく動作しますが、GLESv2のglDrawArrays()では失敗します。私はこの質問を読む:glDrawElements throw GL_INVALID_VALUE​ errorこれは私の問題に非常に似ていますが、私はVertexArrayを使用していないので、ソリューションに自分のコードを適用する方法を理解できません。

inst-> textureはglTexImage2D()でアップロードされたテクスチャです。

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(); 

編集:https://github.com/fernando-rodriguez/mediabox/blob/bc4135d9568b2c5b4e8f39ac63ded2cb66023bcd/src/lib/ui/video-opengl.c:あなたがここに全体のソースファイルを見ることができ、私は右のEGLを初期化し、シェーダをコンパイルした後vertex_bufferを作成しました。ファイルはコンポジタのビデオドライバであり、2Dサーフェスを作成してスクリーンにレンダリングするだけです。質問に間違いがあったり、何かが見つからない場合は、コメントを投稿して修正してください。ありがとう。

答えて

0

私はそれを理解しました。 eglCreateContext()の後にeglBindAPI()を呼び出していたので、実際にGLES1コンテキストを作成していたと思います。

関連する問題