在 OpenGL es 中是否可以进行 HDR 渲染?
Is HDR rendering possible in OpenGL es?
我不是在谈论实际渲染到 HDR 显示器。
我正在努力让我的游戏看起来更好,我在网上找到的一种方法是在 post 处理中使用 HDR 管道。 According to this tutorial, to accomplish this, you need to render to a framebuffer with a texture that's set to an internal format of GL_RGB16f, GL_RGBA16, GL_RGB32F or GL_RGBA32F. Unfortunatly, I looked in the OpenGL es 3.0 docs,它告诉我(在第 132 页)没有可渲染的浮点类型内部格式,这导致了一个不完整的 frameBuffer。我是否忘记了一些非常明显的事情,或者 OpenGL es 3.0 中的 HDR 管道是不可能的?
我通过这种方式生成纹理使其工作:
FloatBuffer floatBuffer = ByteBuffer.allocateDirect(w * h * 4 * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
//allocateDirect( width * height * ComponentNumber * bitPerFloat)
GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_RGBA16F, w, h, 0, GLES30.GL_RGBA, GLES30.GL_FLOAT, floatBuffer);
我不是在谈论实际渲染到 HDR 显示器。
我正在努力让我的游戏看起来更好,我在网上找到的一种方法是在 post 处理中使用 HDR 管道。 According to this tutorial, to accomplish this, you need to render to a framebuffer with a texture that's set to an internal format of GL_RGB16f, GL_RGBA16, GL_RGB32F or GL_RGBA32F. Unfortunatly, I looked in the OpenGL es 3.0 docs,它告诉我(在第 132 页)没有可渲染的浮点类型内部格式,这导致了一个不完整的 frameBuffer。我是否忘记了一些非常明显的事情,或者 OpenGL es 3.0 中的 HDR 管道是不可能的?
我通过这种方式生成纹理使其工作:
FloatBuffer floatBuffer = ByteBuffer.allocateDirect(w * h * 4 * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
//allocateDirect( width * height * ComponentNumber * bitPerFloat)
GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_RGBA16F, w, h, 0, GLES30.GL_RGBA, GLES30.GL_FLOAT, floatBuffer);