将Depthbuffer和TextureBuffer发送到同一片段OpenGL3

拉夫·希姆(Raph Schim)

这可能是一个愚蠢的问题,但由于我是OpenGL的新手,所以我不了解如何将来自单个FBO的颜色缓冲区和深度缓冲区发送到片段着色器。
我的FBO由1个纹理缓冲区和1个深度缓冲区生成

   glGenTextures(1, &texture_color);
   glBindTexture(GL_TEXTURE_2D, texture_color);
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);    
   glGenTextures(1, &texture_depth);
   glBindTexture(GL_TEXTURE_2D, texture_depth);
   glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);

我想在我的片段缓冲区中有

uniform sampler2D colorTexture;
uniform sampler2D depthTexture;

充满颜色和深度纹理...

我只能使用GlBindtexture发送一个(另一个很好),但是我无法同时发送两个。有人知道该怎么做吗?

谢谢!

拉夫·希姆(Raph Schim)

好的,由于解决方案很简单,我可能并不大,而且我做错了。

我试图使用glActiveTexture(GL_DEPTH),然后绑定到我的Texture:(glBindTexture(GL_TEXTURE_2D,visibleFBO.getDepthTexture()))认为使用GL_DEPTH是正常的。

但是我错了,它可以使用:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, visibilityFBO.getColorTexture()); 
glUniform1i(glGetUniformLocation(visibilityPassShader.Program, "positionTexture"), 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, visibilityFBO.getDepthTexture());
glUniform1i(glGetUniformLocation(visibilityPassShader.Program, "depthTexture"), 1);

与以前相同,但是由于我曾经glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);生成“深度”纹理,因此“深度”被视为“纹理”。因此,我只需要调用下一个纹理并将其绑定即可使用它。

在片段中,它仍然是:

uniform sampler2D positionTexture;
uniform sampler2D depthTexture;

秩序井然。

使用OpenGL> = 4,可以在片段着色器中使用

layout (binding = 0) uniform sampler2D positionTexture;
layout (binding = 1) uniform sampler2D depthTexture;

并原谅关于glUniform1i的部分。

希望它可以帮助某人!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在返回堆栈防止同一片段

防止导航到同一片段

Android导航:从同一片段访问NavHostFragment

EventBus在同一片段中发布和订阅

从其他活动返回同一片段时,如何保存和恢复片段中RecyclerView的滚动位置?

在将某些数据传递到活动后,如何从同一片段中结束片段?

如何多次将同一片段包含到m3u8播放列表中?

片段到活动再次在同一片段上

防止同一片段堆叠超过一次(addToBackStack)

如何在同一片段中创建多个Retrofit回调-Android

如何使用片段中的相机并在同一片段的图像视图中显示捕获的图像?

将多个补丁和发布方法发送到同一位置

将变量发送到同一函数

将片段列表发送到FragmentPagerAdapter

Kotlin 将数据发送到片段

如何通过单击后退(不是“后退硬件”按钮)返回到上一片段?

OpenGL无法将变量从顶点着色器发送到片段着色器

将数据从片段发送到另一个片段

将一个类的所有参数和对象发送到 PyTorch 中的同一设备

使用NavigatorDrawer时如何从一个片段或活动更改为另一片段或活动?

将数据从嵌套片段发送到父片段

如何使用 FirebaseRecyclerAdapter 将数据片段发送到片段

使用 TabLayout 将数据从片段发送到片段

通过CLI将邮件发送到同一LAN上的SMTP服务器(与Mutt和Postfix混淆)

使用SectionStatPageAdapter和bundle将数据从活动发送到多个片段

将图片ID从片段发送到另一个活动

如何将日期从 datepickerfragment 发送到另一个片段

将数据从 Activity 发送到 TabLayout 片段

将数据从活动发送到已创建的片段