OpenGL中的纹理中未初始化/未保留的GPU内存

时间:2011-10-28 21:55:33

标签: opengl textures fbo deferred-rendering

(这实际上是gamedev的一个交叉点,但我认为你们这些人和女孩也可能会有所帮助!)

编辑:我详细阐述了叠加的含义。经过一段时间的休眠后,我发现我对glGenerateMipmaps的调用是无用的,因为我使用null作为指向glTexImage2D的指针。

在OpenGL 3.3,Ubuntu 11.04,nVidia驱动程序280.13,GeForce GT240上。

我正在制作一个延迟着色器,并希望在屏幕下方的小覆盖中显示我的G缓冲区。在这种情况下,叠加意味着没有z测试,纹理屏幕对齐四边形,并且最后渲染。

在完整窗口中渲染(一次一个)G缓冲区(FBO纹理)时,它们会正确显示。 当渲染到这些叠加层时,我得到了垃圾(看似随机的GPU内存为静态干扰,但运行之间有所不同,有时是清晰的图片)。

如果我创建了一个不同的纹理,比如说来自文件,它会在叠加层中显示没有垃圾,因此代码应该没问题。 有谁能解释为什么?我已经使用glGenerateMipmap作为G缓冲区中的纹理。

我知道这可能不是足够的信息,但从这开始。请询问任何相关信息。 问题可能与FBO渲染和mipmapping有关吗?当然我的代码想显示未保留/未初始化的内存,但我不知道为什么。 The four textures below have trash data in them.


全窗绿色图片是我目前从照明阶段得到的结果,分辨率(256 * 256)因为胖G缓冲而节省GPU内存。 此外,在材质着色器(生成G缓冲区)中,我使用“out vec4 fragment [3]”,并且纹理具有不同的内部格式。这可能是个问题吗?

PS。 灯光在(-30,0,0)和(30,0,0),但似乎“更近”。这可能是精确问题吗?我将GL_RGBA16F用于法线,GL_RGBA32F用于位置,GL_DEPTH_COMPONENT24用于深度,GL_RGBA用于反照率(是的,这是一个巨大的浪费,但我稍后会进行优化)。

1 个答案:

答案 0 :(得分:1)

好的,我发现了问题。我在内存中有任何有意义的数据之前生成了mipmap。关闭相关纹理的mipmapping解决了这个问题。无论如何,谢谢你的关注! enter image description here