Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C glDrawArrays在GLESv2上抛出无效的GLU值_C_Opengl Es_Opengl Es 2.0 - Fatal编程技术网

C glDrawArrays在GLESv2上抛出无效的GLU值

C glDrawArrays在GLESv2上抛出无效的GLU值,c,opengl-es,opengl-es-2.0,C,Opengl Es,Opengl Es 2.0,我正在尝试将OpenGL程序移植到GLESv2。该程序使用以下代码将纹理添加到默认帧缓冲区(如果我将其渲染到同样适用于OpenGL的fbo,它也会失败) 这在OpenGL上运行良好,但在GLESv2下的glDrawArrays()上失败。我读到这个问题:这与我的问题非常相似,但我不知道如何将解决方案应用到我的代码中,因为我没有使用VertexArray,而且我对GL非常陌生 inst->纹理是使用GLTEXAGE2D()上载的纹理。在初始化EGL并编译着色器之后,我立即创建了vertex_缓冲区

我正在尝试将OpenGL程序移植到GLESv2。该程序使用以下代码将纹理添加到默认帧缓冲区(如果我将其渲染到同样适用于OpenGL的fbo,它也会失败)

这在OpenGL上运行良好,但在GLESv2下的glDrawArrays()上失败。我读到这个问题:这与我的问题非常相似,但我不知道如何将解决方案应用到我的代码中,因为我没有使用VertexArray,而且我对GL非常陌生

inst->纹理是使用GLTEXAGE2D()上载的纹理。在初始化EGL并编译着色器之后,我立即创建了vertex_缓冲区:

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

编辑:您可以在此处查看整个源文件:。该文件是合成器的视频“驱动程序”,它所做的只是创建二维曲面并将其渲染到屏幕上。如果这个问题有什么问题或者我遗漏了什么,请发表评论,这样我就可以解决它。谢谢。

我想出来了。我在eglCreateContext()之后调用了eglBindAPI(),所以我想我实际上是在创建一个GLES1上下文

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