Skip to content

Commit ad0e634

Browse files
committed
egg: Add (discouraged) way to specify sRGB texture format (panda3d#924)
This should NOT be used by exporters, but is provided only for the sake of round-trippability of .bam files.
1 parent cd435ec commit ad0e634

File tree

4 files changed

+29
-1
lines changed

4 files changed

+29
-1
lines changed

panda/src/egg/eggTexture.cxx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ has_alpha_channel(int num_components) const {
509509
case F_rgb8:
510510
case F_rgb5:
511511
case F_rgb332:
512+
case F_srgb:
512513
// These formats never use alpha, regardless of the number of components
513514
// we have.
514515
return false;
@@ -525,6 +526,7 @@ has_alpha_channel(int num_components) const {
525526
case F_rgba8:
526527
case F_rgba4:
527528
case F_rgba5:
529+
case F_srgb_alpha:
528530
case F_unspecified:
529531
// These formats use alpha if the image had alpha.
530532
return (num_components == 2 || num_components == 4);
@@ -690,6 +692,8 @@ EggTexture::Format EggTexture::
690692
string_format(const string &string) {
691693
if (cmp_nocase_uh(string, "rgba") == 0) {
692694
return F_rgba;
695+
} else if (cmp_nocase_uh(string, "srgb_alpha") == 0) {
696+
return F_srgb_alpha;
693697
} else if (cmp_nocase_uh(string, "rgbm") == 0) {
694698
return F_rgbm;
695699
} else if (cmp_nocase_uh(string, "rgba12") == 0) {
@@ -701,6 +705,8 @@ string_format(const string &string) {
701705

702706
} else if (cmp_nocase_uh(string, "rgb") == 0) {
703707
return F_rgb;
708+
} else if (cmp_nocase_uh(string, "srgb") == 0) {
709+
return F_srgb;
704710
} else if (cmp_nocase_uh(string, "rgb12") == 0) {
705711
return F_rgb12;
706712
} else if (cmp_nocase_uh(string, "rgb8") == 0) {
@@ -1137,6 +1143,8 @@ ostream &operator << (ostream &out, EggTexture::Format format) {
11371143
return out << "rgba8";
11381144
case EggTexture::F_rgba4:
11391145
return out << "rgba4";
1146+
case EggTexture::F_srgb_alpha:
1147+
return out << "srgb_alpha";
11401148

11411149
case EggTexture::F_rgb:
11421150
return out << "rgb";
@@ -1150,6 +1158,8 @@ ostream &operator << (ostream &out, EggTexture::Format format) {
11501158
return out << "rgba5";
11511159
case EggTexture::F_rgb332:
11521160
return out << "rgb332";
1161+
case EggTexture::F_srgb:
1162+
return out << "srgb";
11531163

11541164
case EggTexture::F_red:
11551165
return out << "red";

panda/src/egg/eggTexture.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@ class EXPCL_PANDA_EGG EggTexture : public EggFilenameNode, public EggRenderMode,
6060
F_rgba, F_rgbm, F_rgba12, F_rgba8, F_rgba4, F_rgba5,
6161
F_rgb, F_rgb12, F_rgb8, F_rgb5, F_rgb332,
6262
F_red, F_green, F_blue, F_alpha, F_luminance,
63-
F_luminance_alpha, F_luminance_alphamask
63+
F_luminance_alpha, F_luminance_alphamask,
64+
65+
// Only for compatibility with .bam, use is discouraged!
66+
F_srgb, F_srgb_alpha
6467
};
6568
enum CompressionMode {
6669
CM_default, CM_off, CM_on,

panda/src/egg2pg/eggLoader.cxx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -900,6 +900,7 @@ load_texture(TextureDef &def, EggTexture *egg_tex) {
900900
case EggTexture::F_rgb8:
901901
case EggTexture::F_rgb5:
902902
case EggTexture::F_rgb332:
903+
case EggTexture::F_srgb:
903904
wanted_channels = 3;
904905
wanted_alpha = false;
905906
break;
@@ -910,6 +911,7 @@ load_texture(TextureDef &def, EggTexture *egg_tex) {
910911
case EggTexture::F_rgba8:
911912
case EggTexture::F_rgba4:
912913
case EggTexture::F_rgba5:
914+
case EggTexture::F_srgb_alpha:
913915
wanted_channels = 4;
914916
wanted_alpha = true;
915917
break;
@@ -1259,6 +1261,10 @@ apply_texture_attributes(Texture *tex, const EggTexture *egg_tex) {
12591261
case EggTexture::F_rgb332:
12601262
tex->set_format(Texture::F_rgb332);
12611263
break;
1264+
case EggTexture::F_srgb:
1265+
case EggTexture::F_srgb_alpha:
1266+
tex->set_format(Texture::F_srgb);
1267+
break;
12621268

12631269
case EggTexture::F_unspecified:
12641270
break;
@@ -1296,6 +1302,9 @@ apply_texture_attributes(Texture *tex, const EggTexture *egg_tex) {
12961302
case EggTexture::F_rgba5:
12971303
tex->set_format(Texture::F_rgba5);
12981304
break;
1305+
case EggTexture::F_srgb_alpha:
1306+
tex->set_format(Texture::F_srgb_alpha);
1307+
break;
12991308

13001309
case EggTexture::F_unspecified:
13011310
break;

panda/src/egg2pg/eggSaver.cxx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1420,6 +1420,12 @@ get_egg_texture(Texture *tex) {
14201420
case Texture::F_luminance_alphamask:
14211421
temp.set_format(EggTexture::F_luminance_alphamask);
14221422
break;
1423+
case Texture::F_srgb:
1424+
temp.set_format(EggTexture::F_srgb);
1425+
break;
1426+
case Texture::F_srgb_alpha:
1427+
temp.set_format(EggTexture::F_srgb_alpha);
1428+
break;
14231429
default:
14241430
break;
14251431
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy