Add Texture::F_r11_g11_b10

This commit is contained in:
tobspr 2015-08-15 21:09:53 +02:00 committed by rdb
parent d569e2ab6f
commit 9868d87196
3 changed files with 30 additions and 0 deletions

View File

@ -7763,6 +7763,7 @@ get_external_image_format(Texture *tex) const {
case Texture::F_depth_component24:
case Texture::F_depth_component32:
case Texture::F_depth_stencil:
case Texture::F_r11_g11_b10:
// This shouldn't be possible.
nassertr(false, GL_RGB);
break;
@ -7946,6 +7947,7 @@ get_external_image_format(Texture *tex) const {
case Texture::F_rgb16:
case Texture::F_rgb32:
case Texture::F_srgb:
case Texture::F_r11_g11_b10:
#ifdef OPENGLES
return GL_RGB;
#else
@ -8044,6 +8046,7 @@ get_internal_image_format(Texture *tex, bool force_sized) const {
case Texture::F_rgb8i:
case Texture::F_rgba8i:
case Texture::F_r32i:
case Texture::F_r11_g11_b10:
// Unsupported; fall through to below.
break;
@ -8536,6 +8539,11 @@ get_internal_image_format(Texture *tex, bool force_sized) const {
return GL_R32I;
#endif
#ifndef OPENGLES
case Texture::F_r11_g11_b10:
return GL_R11F_G11F_B10F;
#endif
default:
GLCAT.error()
<< "Invalid image format in get_internal_image_format(): "
@ -12105,6 +12113,13 @@ do_extract_texture_data(CLP(TextureContext) *gtc) {
break;
#endif
#ifndef OPENGLES
case GL_R11F_G11F_B10F:
type = Texture::T_float;
format = Texture::F_r11_g11_b10;
break;
#endif
#ifdef OPENGLES_2
case GL_RED_EXT:
case GL_R8_EXT:

View File

@ -577,6 +577,10 @@ estimate_texture_memory() const {
bpp = 12;
break;
case Texture::F_r11_g11_b10:
bpp = 4;
break;
default:
break;
}
@ -1701,6 +1705,9 @@ write(ostream &out, int indent_level) const {
case F_rgba8i:
out << "rgba8i";
break;
case F_r11_g11_b10:
out << "r11_g11_b10";
break;
}
if (cdata->_compression != CM_default) {
@ -2115,6 +2122,8 @@ format_format(Format format) {
return "rgb8i";
case F_rgba8i:
return "rgba8i";
case F_r11_g11_b10:
return "r11g11b10";
}
return "**invalid**";
}
@ -2201,6 +2210,8 @@ string_format(const string &str) {
return F_rg32;
} else if (cmp_nocase(str, "rgb32") == 0 || cmp_nocase(str, "r32g32b32") == 0) {
return F_rgb32;
} else if (cmp_nocase(str, "r11g11b10") == 0) {
return F_r11_g11_b10;
}
gobj_cat->error()
@ -5181,6 +5192,7 @@ do_set_format(CData *cdata, Texture::Format format) {
case F_srgb:
case F_rgb32:
case F_rgb8i:
case F_r11_g11_b10:
cdata->_num_components = 3;
break;

View File

@ -156,6 +156,9 @@ PUBLISHED:
F_rg8i, // 8 integer bits per R,G channel
F_rgb8i, // 8 integer bits per R,G,B channel
F_rgba8i, // 8 integer bits per R,G,B,A channel
F_r11_g11_b10, // unsigned floating-point, 11 Red, 11 Green, 10 Blue Bits
};
// Deprecated. See SamplerState.FilterType.