gpt4 book ai didi

c - glDrawArrays 在 GLESv2 上抛出 GL_INVALID_VALUE

转载 作者:行者123 更新时间:2023-11-30 19:31:48 29 4
gpt4 key购买 nike

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

    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 并且我对 GL 很陌生。

inst->texture是用glTexImage2D()上传的纹理。我在初始化 EGL 并编译着色器后立即创建了 vertex_buffer:

    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 。该文件是合成器的视频“驱动程序”,它所做的只是创建 2D 表面并将其渲染到屏幕上。如果问题有任何问题或遗漏了某些内容,请发表评论,以便我可以修复它。谢谢。

最佳答案

我明白了。我在eglCreateContext()之后调用eglBindAPI(),所以我认为我实际上是在创建一个GLES1上下文。

关于c - glDrawArrays 在 GLESv2 上抛出 GL_INVALID_VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47912080/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com