我发现WebGL中没有GL_DEPTH_COMPONENT24_OES
renderbuffer存储等价物。但是我可以使用WEBGL_depth_texture
扩展来制作24_8或32位深度纹理。那些DEPTH_COMPONENT24
/ DEPTH_COMPONENT32
渲染缓冲区是等效的吗?它会像屏幕缓冲区一样工作吗?
这就是他们没有为WebGL制作24 / 32bit深度渲染缓冲的原因吗?
答案 0 :(得分:1)
有一种方法可以在WebGL 1中分配24位深度缓冲区:这不是真的。虽然规范没有明确指定DEPTH_STENCIL
。这是一个测试:http://jsbin.com/tadikibidi/edit?js,output。DEPTH_STENCIL
缓冲区组件的大小,但一致性测试表明DEPTH
唯一的要求是STENCIL
具有> = 16位且> = 8位DEPTH_STENCIL
1}}。似乎唯一的方法(至少没有扩展名)是分配DEPTH_BITS
附件并检查附件附加到的帧缓冲区的INTERVAL '12' HOUR
参数。
AFAIK,32位深度缓冲更难以上传移动设备,因此WebGL没有它们(仅限扩展)。
答案 1 :(得分:0)
规范没有说明的是DEPTH_STENCIL
只是一个抽象。 WebGL实现,特别是较旧的实现,可以通过捆绑一个深度缓冲区和一个模板缓冲区来实现DEPTH_STENCIL
。所以DEPTH_STENCIL
渲染缓冲区可以是任何东西:16/8(如果不支持24),24/8(带扩展名),依此类推。一致性测试表明深度缓冲区至少为16位。
他们提出了这种抽象概念,甚至没有简单地解释它是什么。只是这条线突然出现了:
WebGL添加了
DEPTH_STENCIL
renderbuffer