有没有办法检测驱动程序是否支持在OpenGL ES 2 / WebGL中混合浮点目标?在某些移动设备上,glDrawElements会在启用了混合的情况下为浮点纹理抛出GL_INVALID_OPERATION。
由于没有扩展保证浮点帧缓冲支持,我检查它是这样的:
glGenTextures(1, &texture_test);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture_test);
glTexImage2D(GL_TEXTURE_2D, 0, opengl_es_2 ? GL_RGBA : GL_RGBA32F, 1, 1, 0, GL_RGBA, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glGenFramebuffers(1, &fbo_test);
glBindFramebuffer(GL_FRAMEBUFFER, fbo_test);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_test, 0);
fbo_test_status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
bool floating_point_supported = (fbo_test_status == GL_FRAMEBUFFER_COMPLETE);
这似乎并不能保证混合支持。我可以绘制一些东西,并在启用混合的情况下检查错误状态,但我想知道是否有更优雅的方式。
答案 0 :(得分:2)
OpenGL ES 2.0本身并不支持浮点渲染 - 它只能通过扩展在某些平台上使用。
浮点数仅在OpenGL ES 3.2中正式提供。
由于没有扩展保证浮点帧缓冲支持
除了这两个,当然......