【问题标题】:Uninitialized/unreserved GPU memory in textures, OpenGL纹理中未初始化/未保留的 GPU 内存,OpenGL
【发布时间】:2011-10-28 21:55:33
【问题描述】:

(这实际上是来自gamedev 的交叉帖子,但我认为你们也可能会有所帮助!)

编辑:我详细说明了叠加的含义。经过一番睡眠后,我发现我对 glGenerateMipmaps 的调用毫无用处,因为我使用 null 作为指向 glTexImage2D 的指针。

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

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

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

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

我知道这可能没有足够的信息,但从这里开始。请询问任何相关信息。 问题是否与 FBO 渲染和 mipmapping 有关?当然,我的代码想要显示未保留/未初始化的内存,但我不知道为什么。


全窗口绿色图片是我当前在光照阶段的结果,分辨率为 (256*256),以节省 GPU 内存,因为 G-buffer 很厚。 此外,在材质着色器(生成 G 缓冲区)中,我使用“out vec4 fragment[3]”,并且纹理具有不同的内部格式。会不会有问题?

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

【问题讨论】:

  • “当渲染到小叠加层时,我得到了垃圾”:什么是“小叠加层”?
  • 鉴于完全没有代码,可以是任何东西。

标签: opengl textures fbo deferred-rendering


【解决方案1】:

好的,我发现了问题。在任何有意义的数据进入内存之前,我就生成了 mipmap。关闭相关纹理的 mipmapping 解决了这个问题。无论如何感谢您的关注!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多