check in 32-bit float texture formats

This commit is contained in:
rdb 2014-07-07 19:49:25 +00:00
parent 40c880a1c0
commit dda0d9c15f
3 changed files with 75 additions and 0 deletions

View File

@ -6649,6 +6649,8 @@ get_external_image_format(Texture *tex) const {
case Texture::F_rgba4:
case Texture::F_rgba8:
case Texture::F_rgba12:
case Texture::F_rgba16:
case Texture::F_rgba32:
return GL_COMPRESSED_RGBA;
case Texture::F_rgb:
@ -6658,6 +6660,7 @@ get_external_image_format(Texture *tex) const {
case Texture::F_rgb12:
case Texture::F_rgb332:
case Texture::F_rgb16:
case Texture::F_rgb32:
return GL_COMPRESSED_RGB;
case Texture::F_alpha:
@ -6667,9 +6670,11 @@ get_external_image_format(Texture *tex) const {
case Texture::F_green:
case Texture::F_blue:
case Texture::F_r16:
case Texture::F_r32:
return GL_COMPRESSED_RED;
case Texture::F_rg16:
case Texture::F_rg32:
return GL_COMPRESSED_RG;
case Texture::F_luminance:
@ -6778,6 +6783,7 @@ get_external_image_format(Texture *tex) const {
#ifndef OPENGLES
case Texture::F_red:
case Texture::F_r16:
case Texture::F_r32:
return GL_RED;
case Texture::F_green:
return GL_GREEN;
@ -6788,6 +6794,7 @@ get_external_image_format(Texture *tex) const {
return GL_ALPHA;
#ifndef OPENGLES_1
case Texture::F_rg16:
case Texture::F_rg32:
return GL_RG;
#endif
case Texture::F_rgb:
@ -6796,6 +6803,7 @@ get_external_image_format(Texture *tex) const {
case Texture::F_rgb12:
case Texture::F_rgb332:
case Texture::F_rgb16:
case Texture::F_rgb32:
case Texture::F_srgb:
#ifdef OPENGLES
return GL_RGB;
@ -6892,6 +6900,8 @@ get_internal_image_format(Texture *tex) const {
case Texture::F_rgba:
case Texture::F_rgba8:
case Texture::F_rgba12:
case Texture::F_rgba16:
case Texture::F_rgba32:
if (get_supports_compressed_texture_format(Texture::CM_dxt5) && !is_3d) {
return GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
} else if (get_supports_compressed_texture_format(Texture::CM_fxt1) && !is_3d) {
@ -6906,6 +6916,7 @@ get_internal_image_format(Texture *tex) const {
case Texture::F_rgb12:
case Texture::F_rgb332:
case Texture::F_rgb16:
case Texture::F_rgb32:
if (get_supports_compressed_texture_format(Texture::CM_dxt1) && !is_3d) {
return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
} else if (get_supports_compressed_texture_format(Texture::CM_fxt1) && !is_3d) {
@ -6925,6 +6936,7 @@ get_internal_image_format(Texture *tex) const {
case Texture::F_green:
case Texture::F_blue:
case Texture::F_r16:
case Texture::F_r32:
if (get_supports_compressed_texture_format(Texture::CM_dxt1) && !is_3d) {
return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
} else if (get_supports_compressed_texture_format(Texture::CM_fxt1) && !is_3d) {
@ -6933,6 +6945,7 @@ get_internal_image_format(Texture *tex) const {
return GL_COMPRESSED_RED;
case Texture::F_rg16:
case Texture::F_rg32:
if (get_supports_compressed_texture_format(Texture::CM_dxt1) && !is_3d) {
return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
} else if (get_supports_compressed_texture_format(Texture::CM_fxt1) && !is_3d) {
@ -7174,6 +7187,8 @@ get_internal_image_format(Texture *tex) const {
return GL_RGB16;
}
#endif // OPENGLES
case Texture::F_rgb32:
return GL_RGB32F;
#ifndef OPENGLES
case Texture::F_rgb332:
@ -7199,6 +7214,10 @@ get_internal_image_format(Texture *tex) const {
return GL_RG16;
}
#endif
case Texture::F_r32:
return GL_R32F;
case Texture::F_rg32:
return GL_RG32F;
case Texture::F_alpha:
return GL_ALPHA;
@ -10364,6 +10383,22 @@ do_extract_texture_data(CLP(TextureContext) *gtc) {
type = Texture::T_float;
format = Texture::F_r16;
break;
case GL_RGBA32F:
type = Texture::T_float;
format = Texture::F_rgba32;
break;
case GL_RGB32F:
type = Texture::T_float;
format = Texture::F_rgb32;
break;
case GL_RG32F:
type = Texture::T_float;
format = Texture::F_rg32;
break;
case GL_R32F:
type = Texture::T_float;
format = Texture::F_r32;
break;
#endif
#ifndef OPENGLES

View File

@ -585,6 +585,16 @@ estimate_texture_memory() const {
bpp = 4;
break;
case Texture::F_r32:
bpp = 4;
break;
case Texture::F_rg32:
bpp = 8;
break;
case Texture::F_rgb32:
bpp = 12;
break;
default:
break;
}
@ -1719,6 +1729,16 @@ write(ostream &out, int indent_level) const {
case F_r32i:
out << "r32i";
break;
case F_r32:
out << "r32";
break;
case F_rg32:
out << "rg32";
break;
case F_rgb32:
out << "rgb32";
break;
}
if (cdata->_compression != CM_default) {
@ -2155,6 +2175,12 @@ format_format(Format format) {
return "sluminance_alpha";
case F_r32i:
return "r32i";
case F_r32:
return "r32";
case F_rg32:
return "rg32";
case F_rgb32:
return "rgb32";
}
return "**invalid**";
}
@ -2235,6 +2261,12 @@ string_format(const string &str) {
return F_sluminance_alpha;
} else if (cmp_nocase(str, "r32i") == 0) {
return F_r32i;
} else if (cmp_nocase(str, "r32") == 0 || cmp_nocase(str, "red32") == 0) {
return F_r32;
} else if (cmp_nocase(str, "rg32") == 0 || cmp_nocase(str, "r32g32") == 0) {
return F_rg32;
} else if (cmp_nocase(str, "rgb32") == 0 || cmp_nocase(str, "r32g32b32") == 0) {
return F_rgb32;
}
gobj_cat->error()
@ -4542,6 +4574,8 @@ do_compress_ram_image(CData *cdata, Texture::CompressionMode compression,
case Texture::F_rgb8:
case Texture::F_rgb12:
case Texture::F_rgb332:
case Texture::F_rgb16:
case Texture::F_rgb32:
if (gsg == NULL || gsg->get_supports_compressed_texture_format(CM_dxt1)) {
compression = CM_dxt1;
} else if (gsg == NULL || gsg->get_supports_compressed_texture_format(CM_dxt3)) {
@ -5081,6 +5115,7 @@ do_set_format(CData *cdata, Texture::Format format) {
case F_r16:
case F_sluminance:
case F_r32i:
case F_r32:
cdata->_num_components = 1;
break;
@ -5088,6 +5123,7 @@ do_set_format(CData *cdata, Texture::Format format) {
case F_luminance_alphamask:
case F_rg16:
case F_sluminance_alpha:
case F_rg32:
cdata->_num_components = 2;
break;
@ -5098,6 +5134,7 @@ do_set_format(CData *cdata, Texture::Format format) {
case F_rgb332:
case F_rgb16:
case F_srgb:
case F_rgb32:
cdata->_num_components = 3;
break;

View File

@ -142,6 +142,9 @@ PUBLISHED:
F_sluminance_alpha,
F_r32i, // 32-bit integer, used for atomic access
F_r32,
F_rg32,
F_rgb32,
};
enum FilterType {