egg: Add (discouraged) way to specify sRGB texture format (#924)

This should NOT be used by exporters, but is provided only for the sake of round-trippability of .bam files.
This commit is contained in:
rdb 2020-09-06 14:44:44 +02:00
parent cd435ecec8
commit ad0e634292
4 changed files with 29 additions and 1 deletions

View File

@ -509,6 +509,7 @@ has_alpha_channel(int num_components) const {
case F_rgb8:
case F_rgb5:
case F_rgb332:
case F_srgb:
// These formats never use alpha, regardless of the number of components
// we have.
return false;
@ -525,6 +526,7 @@ has_alpha_channel(int num_components) const {
case F_rgba8:
case F_rgba4:
case F_rgba5:
case F_srgb_alpha:
case F_unspecified:
// These formats use alpha if the image had alpha.
return (num_components == 2 || num_components == 4);
@ -690,6 +692,8 @@ EggTexture::Format EggTexture::
string_format(const string &string) {
if (cmp_nocase_uh(string, "rgba") == 0) {
return F_rgba;
} else if (cmp_nocase_uh(string, "srgb_alpha") == 0) {
return F_srgb_alpha;
} else if (cmp_nocase_uh(string, "rgbm") == 0) {
return F_rgbm;
} else if (cmp_nocase_uh(string, "rgba12") == 0) {
@ -701,6 +705,8 @@ string_format(const string &string) {
} else if (cmp_nocase_uh(string, "rgb") == 0) {
return F_rgb;
} else if (cmp_nocase_uh(string, "srgb") == 0) {
return F_srgb;
} else if (cmp_nocase_uh(string, "rgb12") == 0) {
return F_rgb12;
} else if (cmp_nocase_uh(string, "rgb8") == 0) {
@ -1137,6 +1143,8 @@ ostream &operator << (ostream &out, EggTexture::Format format) {
return out << "rgba8";
case EggTexture::F_rgba4:
return out << "rgba4";
case EggTexture::F_srgb_alpha:
return out << "srgb_alpha";
case EggTexture::F_rgb:
return out << "rgb";
@ -1150,6 +1158,8 @@ ostream &operator << (ostream &out, EggTexture::Format format) {
return out << "rgba5";
case EggTexture::F_rgb332:
return out << "rgb332";
case EggTexture::F_srgb:
return out << "srgb";
case EggTexture::F_red:
return out << "red";

View File

@ -60,7 +60,10 @@ PUBLISHED:
F_rgba, F_rgbm, F_rgba12, F_rgba8, F_rgba4, F_rgba5,
F_rgb, F_rgb12, F_rgb8, F_rgb5, F_rgb332,
F_red, F_green, F_blue, F_alpha, F_luminance,
F_luminance_alpha, F_luminance_alphamask
F_luminance_alpha, F_luminance_alphamask,
// Only for compatibility with .bam, use is discouraged!
F_srgb, F_srgb_alpha
};
enum CompressionMode {
CM_default, CM_off, CM_on,

View File

@ -900,6 +900,7 @@ load_texture(TextureDef &def, EggTexture *egg_tex) {
case EggTexture::F_rgb8:
case EggTexture::F_rgb5:
case EggTexture::F_rgb332:
case EggTexture::F_srgb:
wanted_channels = 3;
wanted_alpha = false;
break;
@ -910,6 +911,7 @@ load_texture(TextureDef &def, EggTexture *egg_tex) {
case EggTexture::F_rgba8:
case EggTexture::F_rgba4:
case EggTexture::F_rgba5:
case EggTexture::F_srgb_alpha:
wanted_channels = 4;
wanted_alpha = true;
break;
@ -1259,6 +1261,10 @@ apply_texture_attributes(Texture *tex, const EggTexture *egg_tex) {
case EggTexture::F_rgb332:
tex->set_format(Texture::F_rgb332);
break;
case EggTexture::F_srgb:
case EggTexture::F_srgb_alpha:
tex->set_format(Texture::F_srgb);
break;
case EggTexture::F_unspecified:
break;
@ -1296,6 +1302,9 @@ apply_texture_attributes(Texture *tex, const EggTexture *egg_tex) {
case EggTexture::F_rgba5:
tex->set_format(Texture::F_rgba5);
break;
case EggTexture::F_srgb_alpha:
tex->set_format(Texture::F_srgb_alpha);
break;
case EggTexture::F_unspecified:
break;

View File

@ -1420,6 +1420,12 @@ get_egg_texture(Texture *tex) {
case Texture::F_luminance_alphamask:
temp.set_format(EggTexture::F_luminance_alphamask);
break;
case Texture::F_srgb:
temp.set_format(EggTexture::F_srgb);
break;
case Texture::F_srgb_alpha:
temp.set_format(EggTexture::F_srgb_alpha);
break;
default:
break;
}