从我在网上看到的几个例子中,假设gl_FragData [0]是一个颜色缓冲区。我试图在gl_FragData中找到每个索引的含义,并从OpenGL着色语言书(橙皮书)中看到了这段经文
gl_FragData是一个可以分配写入值的数组 进入一个或多个屏幕外缓冲区。这个数组的大小是 依赖于实现,可以使用glGet查询 符号常量GL_MAX_DRAW_BUFFERS。屏幕外的缓冲区 由于将值写入一个内的gl_FragData而被修改 片段着色器使用glDrawBuffers指定。写的价值 进入gl_FragData [0]更新指定列表中的第一个缓冲区 调用glDrawBuffers,写入gl_FragData [1]的值 更新列表中的第二个缓冲区,依此类推。
没有指定gl_FragData的第0个值始终是颜色缓冲区。如果有这样的规格,我在哪里可以找到它?如果没有,写入gl_FragData时的常规做法是什么?
答案 0 :(得分:9)
它本身不一定是颜色缓冲区。但如果它不是颜色缓冲区,那么没有。
gl_FragData
输出数组引用glDrawBuffers
设置的值。使用FBO时,传递给此函数的值只能是GL_COLOR_ATTACHMENTn
或GL_NONE
。其中,如名称所示,是颜色缓冲区。
所以它可以是颜色缓冲区,也可以是GL_NONE
。
对于不提供glDrawBuffers
的GL ES实现(即,未实现NV_draw_buffers),它被定义为索引零设置为GL_COLOR_ATTACHMENT0
。
ES 2.0的愚蠢之处是允许多个附件的可能性而不实际提供渲染到多个附件的方法......