在OpenGL 4.5下在AMD RENOIR (DRM 3.40.0, 5.10.56-1-lts, LLVM 12.0.1)上运行
glCreateBuffers(1, &result_buffer);
glNamedBufferData(result_buffer, count * 4, NULL, GL_STATIC_DRAW);
glClearNamedBufferData(result_buffer, GL_R32UI, GL_RED, GL_UNSIGNED_INT, NULL);GL_INVALID_OPERATION in glClearNamedBufferData(integer vs non-integer)检查结果。
如果我使用GL_R32F,它可以正常工作,但这不是我想要的格式。
规格指出,只有在映射或不映射现有缓冲区对象的名称时才能发生GL_INVALID_OPERATION;两者似乎都不可能发生。
我做错了什么?什么是“整数与非整数”?
发布于 2021-08-17 18:35:04
缓冲器清除被定义为像素传输操作的一种形式。本质上,您是在指定数据,就像指定要复制的打包像素数据一样。因此,您必须指定像素传输格式和类型参数,以及要在缓冲区中使用的“内部格式”。
但这意味着所有像素传输规则都适用,包括将数据传输到整数内部格式必须使用*_INTEGER像素传输格式这一事实。这是不匹配的:您必须使用GL_RED_INTEGER,因为您正在写入整数内部格式。
https://computergraphics.stackexchange.com/questions/12139
复制相似问题