image-processing - glGetTexImage 返回全黑纹理
问题描述
我正在使用 OpenGL API (v 4.6) 来做一些图像处理的东西,它基本上是在着色器中的 OpenGL 图像加载存储操作,我通过 glBindImageTexture 加载纹理并进行一些处理,然后我想使用 glGetTexImage 来读取内容我更新的图像,但虽然函数本身工作正常,但它返回全黑图像,当它加载到其他着色器中时,情况并非如此。
TLDR:图像在着色器中加载时工作正常(我在许多地方使用它,renderdoc 在 GPU 端显示它一切正常),但它是全黑的软件端。
这就是我使用 glGetTexImage 的输出应该是什么样的(渲染后使用 renderdoc查看)
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);
解决方案
找到了。GL_RED 仅适用于浮点组件,通过更改所有代码,即 glTexImage 和 glGetTexImage GL_REDs 到 GL_RED_INTEGERs 问题得到解决!
推荐阅读
- ios - 当应用程序的内容是我的想法时,如何找到 App Store 批准的“文件证据”
- python - Scrapy:NameError:名称'url'未定义
- python - 关于仅在使用 pd.to_datetime 后保留日期信息
- python - 在 python 字典中使用单引号和双引号之间有什么区别(如果有的话)?
- android - 为什么“设计”中没有任何显示(Android Studio)
- node.js - 异步函数未被识别为异步
- php - 正则表达式查找 html div 类内容和数据属性?(preg_match_all)
- javascript - jquery .click() 在循环内
- git - remote: Repository not found
- kubernetes - Kubernetes cluster as pubsub push subscriber