有2个较小的渲染目标或一个较大的渲染目标是否更好?

时间:2012-06-30 09:45:48

标签: c++ opengl glsl

我正在写一个延迟渲染器,我正在尝试打包我的gbuffer。

将漫反射和镜面反射存储在一起会更好吗?

vec4 difSpec = (diffuse.xyz, specular) // FORMAT_RGBA
gl_FragData[0] = difSpc;

或使用2个渲染目标

vec3 diffuse
float specular
gl_FragData[0] = diffuse  // FORMAT_RGB
gl_FragData[1] = specular //  FORMAT_RED

问题是一个比另一个更好,为什么。

1 个答案:

答案 0 :(得分:4)

您使用的较小缓冲区绑定/重新绑定操作 - 越多越好。

更重要的是,在你的情况下你只有4个浮点数很好:RGB +高光。因此,使用完整的128位rendertarget并打包(r,g,b,specular)值。它必须更好,因为访问不同的内存位置(rgb为96位,镜面反射为32位)对缓存不利。

对于较旧的视频卡,一个渲染目标也更好。无论如何,当你只使用96位时,你就会浪费内存。 g-buffer总是必须紧密包装。