glgsg: add ability to get red/rg-only floating-point renderbuffers

This commit is contained in:
rdb 2018-12-18 19:59:36 +01:00
parent b7d638e53d
commit 11526852ed

View File

@ -921,21 +921,38 @@ bind_slot(int layer, bool rb_resize, Texture **attach, RenderTexturePlane slot,
if (_fb_properties.get_alpha_bits() == 0) { if (_fb_properties.get_alpha_bits() == 0) {
if (_fb_properties.get_srgb_color()) { if (_fb_properties.get_srgb_color()) {
gl_format = GL_SRGB8; gl_format = GL_SRGB8;
} else if (_fb_properties.get_float_color()) { } else if (_fb_properties.get_color_bits() > 16 * 3 ||
if (_fb_properties.get_color_bits() > 16 * 3) { _fb_properties.get_red_bits() > 16 ||
gl_format = GL_RGB32F_ARB; _fb_properties.get_green_bits() > 16 ||
_fb_properties.get_blue_bits() > 16) {
// 32-bit, which is always floating-point.
if (_fb_properties.get_blue_bits() > 0 ||
_fb_properties.get_color_bits() == 1 ||
_fb_properties.get_color_bits() > 32 * 2) {
gl_format = GL_RGB32F;
} else if (_fb_properties.get_green_bits() > 0 ||
_fb_properties.get_color_bits() > 32) {
gl_format = GL_RG32F;
} else { } else {
gl_format = GL_RGB16F_ARB; gl_format = GL_R32F;
} }
} else if (_fb_properties.get_float_color()) {
// 16-bit floating-point.
if (_fb_properties.get_blue_bits() > 0 ||
_fb_properties.get_color_bits() == 1 ||
_fb_properties.get_color_bits() > 16 * 2) {
gl_format = GL_RGB16F;
} else if (_fb_properties.get_green_bits() > 0 ||
_fb_properties.get_color_bits() > 16) {
gl_format = GL_RG16F;
} else { } else {
if (_fb_properties.get_color_bits() > 16 * 3) { gl_format = GL_R16F;
gl_format = GL_RGB32F_ARB; }
} else if (_fb_properties.get_color_bits() > 8 * 3) { } else if (_fb_properties.get_color_bits() > 8 * 3) {
gl_format = GL_RGB16_EXT; gl_format = GL_RGB16_EXT;
} else { } else {
gl_format = GL_RGB; gl_format = GL_RGB;
} }
}
} else { } else {
if (_fb_properties.get_srgb_color()) { if (_fb_properties.get_srgb_color()) {
gl_format = GL_SRGB8_ALPHA8; gl_format = GL_SRGB8_ALPHA8;