mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-28 07:48:37 -04:00
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:
parent
cd435ecec8
commit
ad0e634292
@ -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";
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user