glreadpixels模具缓冲区总是抛出GL_INVALID_OPERATION

tmo7452

我正在尝试找出模版。现在,我只是在绘制一些带有模板值的盒子,然后读取该值。每次我使用GL_STENCIL_INDEX调用glReadPixels时,我都会得到GL_INVALID_OPERATION。这是有问题的代码:

glPixelStorei(GL_PACK_ALIGNMENT, 1);
GLfloat tempStencilVal = 3;
glGetError();
glReadPixels(10, g_window1Height-10, 1, 1, GL_STENCIL_INDEX, GL_FLOAT, &tempStencilVal);
if (glGetError() == GL_INVALID_OPERATION) {std::cout << "GL Invalid Operation\n";}
else {std::cout << "X: " << 10 << " Y: " << 10 << " S: " << tempStencilVal << "\n";}

我尝试了5种不同的数据格式,3种不同的glPixelStore模式,并且遍历了glReadPixels错误列表7次。(是的,OGL 2.1)如果我将STENCIL_INDEX更改为DEPTH_COMPONENT,则可以正常工作。我唯一不能确认的是我是否有模板缓冲区。是否缺少一些初始化或glGet检查?

可能的相关信息:Win7 x64 SP1 | 华硕GTX650Ti | VS2012 Ultimate

这是绘制框的函数的代码,以防引起它:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, g_window1Width, -g_window1Height, 0, 0.0, 50.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScaled(1.0, -1.0, -1.0);
glTranslated(0.0, 0.0, 0.5);

glClearColor(0.0, 0.0, 0.0, 0.0);
glClearStencil(0);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

glDisable(GL_DEPTH_TEST);
glEnable(GL_STENCIL_TEST);
glStencilOp( GL_REPLACE, GL_REPLACE, GL_REPLACE );

glColor3ub(0, 100, 250);

glStencilFunc(GL_ALWAYS, 1, 1);
glBegin(GL_QUADS);
glVertex3d(0, 0, 0);
glVertex3d(0, 50, 0);
glVertex3d(50, 50, 0);
glVertex3d(50, 0, 0);
glEnd();

glStencilFunc(GL_ALWAYS, 1, 1);
glBegin(GL_QUADS);
glVertex3d(g_window1Width-50, 0, 0);
glVertex3d(g_window1Width, 0, 0);
glVertex3d(g_window1Width, 50, 0);
glVertex3d(g_window1Width-50, 50, 0);
glEnd();

这不是OGL无缘无故第一次做错事,但这违反了我编写接口编码的计划。

jozxyqk

要检查是否有模板缓冲区,可以尝试使用值进行操作,例如在glStencilFunc(GL_NOTEQUAL, 1, 1);启用和不启用模板测试的情况下绘制另一个四边形

要找到所使用的实际格式,就像用a所说的glGet...那样,glGetFramebufferAttachmentParameter它将为您提供答案(带有默认的帧缓冲区)。

模板缓冲区为8位(我认为它不能是其他任何东西),因此可以将格式更改为GL_UNSIGNED_BYTE

您也可以将深度和模板缓冲区与混合GL_DEPTH_STENCIL使用GL_UNSIGNED_INT_24_8我没有默认帧缓冲的格式,或者这是否适合您的情况。如果您使用的是glut,SDL或glfw之类的库,则负责进行设置以及应在何处查找配置默认帧缓冲区。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“ GL_INVALID_OPERATION:缓冲区大小不足。” 在可变数量的渲染调用之后

来自分类Dev

Chrome GL_INVALID_OPERATION 上的 Three.js 自定义着色器错误:缺少片段着色器输出的活动绘制缓冲区

来自分类Dev

glReadPixels更改缓冲区数据?

来自分类Dev

glNamedBufferData触发GL_INVALID_OPERATION

来自分类Dev

glVertexAttribPointer(Offset?)提供GL_INVALID_OPERATION

来自分类Dev

OpenGL / JOGL投掷GL_INVALID_OPERATION

来自分类Dev

glNamedBufferData触发GL_INVALID_OPERATION

来自分类Dev

glBufferData生成GL_INVALID_OPERATION

来自分类Dev

模具传递是否写入颜色缓冲区?

来自分类Dev

在OpenGL中更新模具缓冲区时的问题

来自分类Dev

模具缓冲区似乎无法正常工作

来自分类Dev

libgdx贴图未拉入模具缓冲区

来自分类Dev

threejs纹理导致“ GL错误:GL_INVALID_OPERATION:glDrawElements”

来自分类Dev

OpenGL ES2.0 glReadPixels()从渲染缓冲区通过帧缓冲区读取数据

来自分类Dev

使用glReadPixels(...)读取帧缓冲区时精度较低

来自分类Dev

镶嵌着色器上的GL_INVALID_OPERATION

来自分类Dev

glVertexAttribPointer GL_INVALID_OPERATION无效vao vbo指针用法

来自分类Dev

为什么glDrawBuffer生成GL_INVALID_OPERATION?

来自分类Dev

glVertexAttribPointer引发不可能的GL_INVALID_OPERATION?

来自分类Dev

glGenerateMipmap在特定平台上引发GL_INVALID_OPERATION

来自分类Dev

OpenGL中的怪异GL_INVALID_OPERATION错误

来自分类Dev

glUniformMatrix4fv导致GL_INVALID_OPERATION

来自分类Dev

在OpenGL ES中使用深度和模具渲染缓冲区附件作为帧缓冲区

来自分类Dev

recv函数总是给我相同的缓冲区

来自分类Dev

默认帧缓冲区的采样深度?(GL ES 3)

来自分类Dev

带有GL_PIXEL_UNPACK_BUFFER的glTexSubImage2D得到GL_INVALID_OPERATION

来自分类Dev

copyTexImage2D — GL错误:GL_INVALID_OPERATION:glCopyTexImage2D:

来自分类Dev

LWJGL Wiki上的示例代码因GL_INVALID_OPERATION而失败

来自分类Dev

加载均匀矩阵1104 GL_Invalid_Operation Android OpenGLES 2.0

Related 相关文章

  1. 1

    “ GL_INVALID_OPERATION:缓冲区大小不足。” 在可变数量的渲染调用之后

  2. 2

    Chrome GL_INVALID_OPERATION 上的 Three.js 自定义着色器错误:缺少片段着色器输出的活动绘制缓冲区

  3. 3

    glReadPixels更改缓冲区数据?

  4. 4

    glNamedBufferData触发GL_INVALID_OPERATION

  5. 5

    glVertexAttribPointer(Offset?)提供GL_INVALID_OPERATION

  6. 6

    OpenGL / JOGL投掷GL_INVALID_OPERATION

  7. 7

    glNamedBufferData触发GL_INVALID_OPERATION

  8. 8

    glBufferData生成GL_INVALID_OPERATION

  9. 9

    模具传递是否写入颜色缓冲区?

  10. 10

    在OpenGL中更新模具缓冲区时的问题

  11. 11

    模具缓冲区似乎无法正常工作

  12. 12

    libgdx贴图未拉入模具缓冲区

  13. 13

    threejs纹理导致“ GL错误:GL_INVALID_OPERATION:glDrawElements”

  14. 14

    OpenGL ES2.0 glReadPixels()从渲染缓冲区通过帧缓冲区读取数据

  15. 15

    使用glReadPixels(...)读取帧缓冲区时精度较低

  16. 16

    镶嵌着色器上的GL_INVALID_OPERATION

  17. 17

    glVertexAttribPointer GL_INVALID_OPERATION无效vao vbo指针用法

  18. 18

    为什么glDrawBuffer生成GL_INVALID_OPERATION?

  19. 19

    glVertexAttribPointer引发不可能的GL_INVALID_OPERATION?

  20. 20

    glGenerateMipmap在特定平台上引发GL_INVALID_OPERATION

  21. 21

    OpenGL中的怪异GL_INVALID_OPERATION错误

  22. 22

    glUniformMatrix4fv导致GL_INVALID_OPERATION

  23. 23

    在OpenGL ES中使用深度和模具渲染缓冲区附件作为帧缓冲区

  24. 24

    recv函数总是给我相同的缓冲区

  25. 25

    默认帧缓冲区的采样深度?(GL ES 3)

  26. 26

    带有GL_PIXEL_UNPACK_BUFFER的glTexSubImage2D得到GL_INVALID_OPERATION

  27. 27

    copyTexImage2D — GL错误:GL_INVALID_OPERATION:glCopyTexImage2D:

  28. 28

    LWJGL Wiki上的示例代码因GL_INVALID_OPERATION而失败

  29. 29

    加载均匀矩阵1104 GL_Invalid_Operation Android OpenGLES 2.0

热门标签

归档