OpenGL glDrawBuffer and glBindTexture
OpenGL glDrawBuffer and glBindTexture
我仍然是opengl3的新手,我正在尝试创建一个多通道渲染。
为了做到这一点,我创建了FBO,生成了几个纹理,并将它们附加到它上面
unsigned index_col = 0;
for (index_col = 0; index_col < nbr_textures; ++index_col)
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + index_col, texture_colors[index_col], 0);
它运作良好(我试着相信我在这里做得很好!
我的理解问题发生在我尝试在屏幕外渲染第一个纹理之后,然后在第二个纹理中渲染,然后在屏幕上渲染。
要渲染到特定的纹理,我正在使用:
FBO.bind();
glDrawBuffer(GL_COLOR_ATTACHMENT0);
glBindTexture(GL_TEXTURE_2D, FBO.getColorTextures(0)); //getColorTextures(0) is texture_colors[0]
然后我使用着色器绘制,然后我想做:
glDrawBuffer(GL_COLOR_ATTACHMENT1);
glBindTexture(GL_TEXTURE_2D, FBO.getColorTextures(1));
毕竟
glBindFramebuffer(GL_FRAMEBUFFER, 0);
RenderToScreen(); // assuming this function render to screen with a quad
我的问题是:glDrawBuffer
和glBindTexture
有什么区别?有必要同时调用两者吗?纹理不是附加到缓冲区吗? (我实际上无法测试它,因为我正在尝试让它工作......
谢谢!
glBindTexture
将纹理与纹理采样器单元连接以进行读取。 glDrawBuffer
选择图形写入的目标。如果要选择纹理作为渲染目标,请在纹理附加到的颜色附件上使用glDrawBuffer
;并确保当前绑定到的任何纹理采样器单元都不用作着色器输入!创建反馈循环的结果是不确定的。
glDrawBuffer
选择要写入的颜色缓冲区(在本例中为帧缓冲区对象(:
当颜色写入帧缓冲区时,它们将写入由 glDrawBuffer 指定的颜色缓冲区
如果你想绘制到多个颜色缓冲区,你会写
GLuint attachments[2] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
glDrawBuffers(2, attachments);
而glBindTexture
将纹理绑定到纹理单元。
它们有不同的用途 - 请记住,OpenGL 及其当前的渲染上下文表现为状态机。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- glBindTexture 是否覆盖活动纹理单元的内容
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- OpenGL glDrawBuffer and glBindTexture