Binding glTexSubImage2D 1282-gl es 3.1中的操作无效

Binding glTexSubImage2D 1282-gl es 3.1中的操作无效,binding,opengl-es,textures,compute-shader,Binding,Opengl Es,Textures,Compute Shader,我正在尝试使用: layout (binding = 0, rgba8ui) readonly uniform uimage2D input; 在计算着色器中。为了将纹理绑定到此,我使用: glBindImageTexture(0, texture_name, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8); 为了让这个绑定工作,纹理必须是不变的,所以我从: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, heig

我正在尝试使用:

layout (binding = 0, rgba8ui) readonly uniform uimage2D input;
在计算着色器中。为了将纹理绑定到此,我使用:

glBindImageTexture(0, texture_name, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8);
为了让这个绑定工作,纹理必须是不变的,所以我从:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
致:

但这会生成“无效操作”(特别是glTexSubImage2D()调用会生成该操作)。查看文档,我发现此调用可能导致1282,原因如下:

GL_INVALID_OPERATION is generated if the texture array has not been defined by a previous glTexImage2D or glCopyTexImage2D operation whose internalformat matches the format of glTexSubImage2D.

GL_INVALID_OPERATION is generated if type is GL_UNSIGNED_SHORT_5_6_5 and format is not GL_RGB.

GL_INVALID_OPERATION is generated if type is GL_UNSIGNED_SHORT_4_4_4_4 or GL_UNSIGNED_SHORT_5_5_5_1 and format is not GL_RGBA
但这些都不是我的情况

第一个问题似乎是问题(考虑到我使用的是glTexStorage2D(),而不是glTexImage2D()),但这不是问题所在,因为在浮动纹理的情况下,相同的机制也可以工作:

glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA32F, width, height);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_FLOAT, pixels);
而不是:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, pixels);
这可能无关紧要,但这两种方法在PC机上都能很好地工作

关于发生这种情况的原因有什么建议吗?

您在
glTexImage2D
glbindmagetexture
中使用的内部格式应该相同,并且与您的采样器兼容。对于
uimage2D
,请尝试在任何地方使用
GL\u RGBA8UI

此外,对于传输到
GL\u RGBA8UI
(和其他整数格式),您需要使用
GL\u RGBA\u integer
作为格式

使用格式
GL_RGBA_INTEGER
也应使
glTexSubImage2D
变量工作。

glTexImage2D
glbindmagetexture
中使用的内部格式应相同,并与采样器兼容。对于
uimage2D
,请尝试在任何地方使用
GL\u RGBA8UI

此外,对于传输到
GL\u RGBA8UI
(和其他整数格式),您需要使用
GL\u RGBA\u integer
作为格式


使用格式
GL\u RGBA\u INTEGER
也可以使
glTexSubImage2D
变量工作。

您尝试过我的解决方案吗?您尝试过我的解决方案吗?我尝试过。它没有导致任何错误,但也没有将任何数据上传到我的纹理。我找到的解决方案是使用GL_RGBA8作为内部格式,使用GL_RGBA作为格式。谢谢你的建议,我试过了。它没有导致任何错误,但也没有将任何数据上传到我的纹理。我找到的解决方案是使用GL_RGBA8作为内部格式,使用GL_RGBA作为格式。谢谢你的建议。
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, pixels);
glBindImageTexture(0, texture_name, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8UI, width, height, 0, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE, pixels);