diff --git a/panda/src/egg/eggTexture.cxx b/panda/src/egg/eggTexture.cxx index eb2cfa7342..a4fb06b62e 100644 --- a/panda/src/egg/eggTexture.cxx +++ b/panda/src/egg/eggTexture.cxx @@ -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"; diff --git a/panda/src/egg/eggTexture.h b/panda/src/egg/eggTexture.h index 55f56f4b3d..ac15293140 100644 --- a/panda/src/egg/eggTexture.h +++ b/panda/src/egg/eggTexture.h @@ -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, diff --git a/panda/src/egg2pg/eggLoader.cxx b/panda/src/egg2pg/eggLoader.cxx index 66a9ea44c6..170cc6f7ae 100644 --- a/panda/src/egg2pg/eggLoader.cxx +++ b/panda/src/egg2pg/eggLoader.cxx @@ -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; diff --git a/panda/src/egg2pg/eggSaver.cxx b/panda/src/egg2pg/eggSaver.cxx index dc7be82d7d..da4273d3a3 100644 --- a/panda/src/egg2pg/eggSaver.cxx +++ b/panda/src/egg2pg/eggSaver.cxx @@ -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; }