【发布时间】:2013-04-23 11:02:11
【问题描述】:
我希望通过不分配我不使用的内容来节省一些视频卡内存。我远没有耗尽内存,但对我来说它会感觉“更干净”。
我真的想不出在默认帧缓冲区中有 alpha 值的理由,因为无论如何我的窗口都不会与我的桌面进行 alpha 混合。我想知道是否可以通过删除其 alpha 来节省一些字节或获得更多颜色深度。
同样,我正在做一些延迟光照,我所有的深度计算都发生在一个非默认的帧缓冲区中。然后我简单地将一个四边形(两个 tris)渲染到默认帧缓冲区,其中包含我渲染场景的纹理以及一些 GUI 元素,这些元素都不需要深度测试。我在渲染默认帧缓冲区时调用glDisable(GL_DEPTH_TEST),但我不介意根本没有深度缓冲区而不是我不使用的深度缓冲区。
我可以在 OpenGL 中做到这一点吗?或者在我创建 OpenGL 上下文的 SDL 中?
我尝试使用以下 SDL 属性创建我的 OpenGL 上下文
sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1)
sdl.GL_SetAttribute(sdl.GL_DEPTH_SIZE, 0)
sdl.GL_SetAttribute(sdl.GL_ALPHA_SIZE, 0)
info := sdl.GetVideoInfo()
bpp := int(info.Vfmt.BitsPerPixel)
if screen := sdl.SetVideoMode(640, 480, bpp, sdl.OPENGL); screen == nil {
panic("Could not open SDL window: " + sdl.GetError())
}
if err := gl.Init(); err != nil {
panic(err)
}
不幸的是,SDL 对 GoLang 的绑定缺少 sdl_gl_GetAttribute 函数,该函数可以让我检查我的愿望是否得到满足。
正如我所说,没有紧急情况。我主要是好奇。
【问题讨论】: