Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.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
Image processing glGetTexImage返回所有黑色纹理_Image Processing_Opengl_Glsl_Opengl 4 - Fatal编程技术网

Image processing glGetTexImage返回所有黑色纹理

Image processing glGetTexImage返回所有黑色纹理,image-processing,opengl,glsl,opengl-4,Image Processing,Opengl,Glsl,Opengl 4,我正在使用OpenGL API(V4.6)来做一些图像处理的工作,它基本上是OpenGL图像加载存储在着色器中的操作,我通过glBindImageTexture加载纹理并进行一些处理,然后我想使用glGetTexImage读取更新图像的内容,但虽然函数本身工作正常,但它返回一个全黑图像,在其他着色器中加载时,情况并非如此 TLDR:Image在加载到着色器中时可以正常工作(我在很多情况下使用它,renderdoc在GPU端可以正常显示),但它在软件端都是黑色的 这就是我的输出应该是什么样子(渲染

我正在使用OpenGL API(V4.6)来做一些图像处理的工作,它基本上是OpenGL图像加载存储在着色器中的操作,我通过glBindImageTexture加载纹理并进行一些处理,然后我想使用glGetTexImage读取更新图像的内容,但虽然函数本身工作正常,但它返回一个全黑图像,在其他着色器中加载时,情况并非如此

TLDR:Image在加载到着色器中时可以正常工作(我在很多情况下使用它,renderdoc在GPU端可以正常显示),但它在软件端都是黑色的

这就是我的输出应该是什么样子(渲染后使用renderdoc查看)


找到了。GL_RED仅适用于浮点组件,通过将所有代码中的glTexImage和glGetTexImage GL_RED更改为GL_RED_整数,问题就解决了

我不确定我在说什么,但可能是图像在您请求时没有准备好。在读取图像之前,尝试添加
glFinish()
,这是一种快速而肮脏的方式,告诉OpenGL在所有操作完成之前都要阻止。这似乎不是一个同步问题,因为我有glMemoryBarrier(GL\u ALL\u BARRIER\u BITS)来确保所有操作。不错的技巧。啊,好的。也许你能给我们看看你的一些代码吗?我已经用代码更新了问题,非常感谢。谢谢,你怎么知道你的头像全是黑色的?这有点奇怪,你读的图像是
GL_FLOAT
,指针的类型是
GLint
,这应该不是一个问题,尽管捕捉得很好!我只是将此格式表留在这里,以供将来参考:
use_shader(&shader);
glBindBuffer (GL_ARRAY_BUFFER, quad_vbo);
setInt(shader, "screen_width", window_width);
setInt(shader, "screen_height", window_height);
glBindImageTexture(0, head_list, 0, FALSE, 0,  GL_READ_WRITE, GL_R32UI); //head list is the opengl texture id

glDrawArrays(GL_TRIANGLES, 0, 24);
glBindVertexArray(0);

glMemoryBarrier(GL_ALL_BARRIER_BITS);


//the image is just a GL_RED so one component
 GLint *image_head= (GLint*)malloc(sizeof(u32) *window_width *window_height);   
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, head_list);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RED, GL_UNSIGNED_INT, image_head);