【发布时间】:2020-04-29 01:20:43
【问题描述】:
我试图避免在我的代码中使用glDrawPixels,所以我正在寻找替代方案。
下面是我用来将帧缓冲区内容读入vector<GLubyte> 的代码。现在我需要代码将矢量内容传输回帧缓冲区。我尝试了十几种不同的尝试,但都没有成功。
glReadBuffer(GL_COLOR_ATTACHMENT0);
GLuint copy_tex = 0;
glGenTextures(1, ©_tex);
vector<GLubyte> tex_buf(4 * win_x * win_y, 0);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, copy_tex);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, win_x, win_y, 0);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, &tex_buf[0]);
for (size_t i = 0; i < win_x; i++)
{
for (size_t j = 0; j < win_y; j++)
{
size_t index = 4 * (i*win_y + j);
tex_buf[index + 0] = 255;
tex_buf[index + 1] = 127;
tex_buf[index + 2] = 0;
}
}
glDrawPixels(win_x, win_y, GL_RGBA, GL_UNSIGNED_BYTE, &tex_buf[0]);
glDeleteTextures(1, ©_tex);
【问题讨论】:
-
您是否打算让它全部不可见?您已将每个像素的 alpha 设置为 0。尝试设置
tex_buf[index + 3] = 255; -
亲爱的 Nathan,感谢您指出这一点。我更新了我电脑上的代码。
-
我想我应该问的是如何从纹理复制到帧缓冲区?
标签: c++ opengl opengl-compat