mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-28 07:48:37 -04:00
texture: Add missing integer texture formats
This commit is contained in:
parent
3479c6eee2
commit
1fda6e7d51
@ -156,6 +156,18 @@ typedef char GLchar;
|
|||||||
#define GL_TEXTURE_MAX_LEVEL 0x813D
|
#define GL_TEXTURE_MAX_LEVEL 0x813D
|
||||||
#define GL_NUM_EXTENSIONS 0x821D
|
#define GL_NUM_EXTENSIONS 0x821D
|
||||||
#define GL_RG_INTEGER 0x8228
|
#define GL_RG_INTEGER 0x8228
|
||||||
|
#define GL_R8I 0x8231
|
||||||
|
#define GL_R8UI 0x8232
|
||||||
|
#define GL_R16I 0x8233
|
||||||
|
#define GL_R16UI 0x8234
|
||||||
|
#define GL_R32I 0x8235
|
||||||
|
#define GL_R32UI 0x8236
|
||||||
|
#define GL_RG8I 0x8237
|
||||||
|
#define GL_RG8UI 0x8238
|
||||||
|
#define GL_RG16I 0x8239
|
||||||
|
#define GL_RG16UI 0x823A
|
||||||
|
#define GL_RG32I 0x823B
|
||||||
|
#define GL_RG32UI 0x823C
|
||||||
#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
|
#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
|
||||||
#define GL_PROGRAM_BINARY_LENGTH 0x8741
|
#define GL_PROGRAM_BINARY_LENGTH 0x8741
|
||||||
#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
|
#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
|
||||||
@ -196,6 +208,18 @@ typedef char GLchar;
|
|||||||
#define GL_SRGB8 0x8C41
|
#define GL_SRGB8 0x8C41
|
||||||
#define GL_SRGB8_ALPHA8 0x8C43
|
#define GL_SRGB8_ALPHA8 0x8C43
|
||||||
#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
|
#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
|
||||||
|
#define GL_RGBA32UI 0x8D70
|
||||||
|
#define GL_RGB32UI 0x8D71
|
||||||
|
#define GL_RGBA16UI 0x8D76
|
||||||
|
#define GL_RGB16UI 0x8D77
|
||||||
|
#define GL_RGBA8UI 0x8D7C
|
||||||
|
#define GL_RGB8UI 0x8D7D
|
||||||
|
#define GL_RGBA32I 0x8D82
|
||||||
|
#define GL_RGB32I 0x8D83
|
||||||
|
#define GL_RGBA16I 0x8D88
|
||||||
|
#define GL_RGB16I 0x8D89
|
||||||
|
#define GL_RGBA8I 0x8D8E
|
||||||
|
#define GL_RGB8I 0x8D8F
|
||||||
#define GL_RED_INTEGER 0x8D94
|
#define GL_RED_INTEGER 0x8D94
|
||||||
#define GL_RGB_INTEGER 0x8D98
|
#define GL_RGB_INTEGER 0x8D98
|
||||||
#define GL_RGBA_INTEGER 0x8D99
|
#define GL_RGBA_INTEGER 0x8D99
|
||||||
|
@ -9320,6 +9320,8 @@ get_external_image_format(Texture *tex) const {
|
|||||||
case Texture::F_rgba16:
|
case Texture::F_rgba16:
|
||||||
case Texture::F_rgba32:
|
case Texture::F_rgba32:
|
||||||
case Texture::F_rgba8i:
|
case Texture::F_rgba8i:
|
||||||
|
case Texture::F_rgba16i:
|
||||||
|
case Texture::F_rgba32i:
|
||||||
case Texture::F_rgb10_a2:
|
case Texture::F_rgb10_a2:
|
||||||
return GL_COMPRESSED_RGBA;
|
return GL_COMPRESSED_RGBA;
|
||||||
|
|
||||||
@ -9331,7 +9333,9 @@ get_external_image_format(Texture *tex) const {
|
|||||||
case Texture::F_rgb12:
|
case Texture::F_rgb12:
|
||||||
case Texture::F_rgb332:
|
case Texture::F_rgb332:
|
||||||
case Texture::F_rgb16:
|
case Texture::F_rgb16:
|
||||||
|
case Texture::F_rgb16i:
|
||||||
case Texture::F_rgb32:
|
case Texture::F_rgb32:
|
||||||
|
case Texture::F_rgb32i:
|
||||||
return GL_COMPRESSED_RGB;
|
return GL_COMPRESSED_RGB;
|
||||||
|
|
||||||
case Texture::F_alpha:
|
case Texture::F_alpha:
|
||||||
@ -9350,7 +9354,9 @@ get_external_image_format(Texture *tex) const {
|
|||||||
case Texture::F_rg:
|
case Texture::F_rg:
|
||||||
case Texture::F_rg8i:
|
case Texture::F_rg8i:
|
||||||
case Texture::F_rg16:
|
case Texture::F_rg16:
|
||||||
|
case Texture::F_rg16i:
|
||||||
case Texture::F_rg32:
|
case Texture::F_rg32:
|
||||||
|
case Texture::F_rg32i:
|
||||||
return GL_COMPRESSED_RG;
|
return GL_COMPRESSED_RG;
|
||||||
|
|
||||||
case Texture::F_luminance:
|
case Texture::F_luminance:
|
||||||
@ -9605,10 +9611,16 @@ get_external_image_format(Texture *tex) const {
|
|||||||
case Texture::F_r32i:
|
case Texture::F_r32i:
|
||||||
return GL_RED_INTEGER;
|
return GL_RED_INTEGER;
|
||||||
case Texture::F_rg8i:
|
case Texture::F_rg8i:
|
||||||
|
case Texture::F_rg16i:
|
||||||
|
case Texture::F_rg32i:
|
||||||
return GL_RG_INTEGER;
|
return GL_RG_INTEGER;
|
||||||
case Texture::F_rgb8i:
|
case Texture::F_rgb8i:
|
||||||
|
case Texture::F_rgb16i:
|
||||||
|
case Texture::F_rgb32i:
|
||||||
return GL_RGB_INTEGER;
|
return GL_RGB_INTEGER;
|
||||||
case Texture::F_rgba8i:
|
case Texture::F_rgba8i:
|
||||||
|
case Texture::F_rgba16i:
|
||||||
|
case Texture::F_rgba32i:
|
||||||
return GL_RGBA_INTEGER;
|
return GL_RGBA_INTEGER;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -9660,7 +9672,13 @@ get_internal_image_format(Texture *tex, bool force_sized) const {
|
|||||||
case Texture::F_rgb8i:
|
case Texture::F_rgb8i:
|
||||||
case Texture::F_rgba8i:
|
case Texture::F_rgba8i:
|
||||||
case Texture::F_r16i:
|
case Texture::F_r16i:
|
||||||
|
case Texture::F_rg16i:
|
||||||
|
case Texture::F_rgb16i:
|
||||||
|
case Texture::F_rgba16i:
|
||||||
case Texture::F_r32i:
|
case Texture::F_r32i:
|
||||||
|
case Texture::F_rg32i:
|
||||||
|
case Texture::F_rgb32i:
|
||||||
|
case Texture::F_rgba32i:
|
||||||
case Texture::F_r11_g11_b10:
|
case Texture::F_r11_g11_b10:
|
||||||
case Texture::F_rgb9_e5:
|
case Texture::F_rgb9_e5:
|
||||||
// Unsupported; fall through to below.
|
// Unsupported; fall through to below.
|
||||||
@ -10211,12 +10229,6 @@ get_internal_image_format(Texture *tex, bool force_sized) const {
|
|||||||
} else {
|
} else {
|
||||||
return GL_R16_SNORM;
|
return GL_R16_SNORM;
|
||||||
}
|
}
|
||||||
case Texture::F_r16i:
|
|
||||||
if (Texture::is_unsigned(tex->get_component_type())) {
|
|
||||||
return GL_R16UI;
|
|
||||||
} else {
|
|
||||||
return GL_R16I;
|
|
||||||
}
|
|
||||||
case Texture::F_rg16:
|
case Texture::F_rg16:
|
||||||
if (tex->get_component_type() == Texture::T_float) {
|
if (tex->get_component_type() == Texture::T_float) {
|
||||||
return GL_RG16F;
|
return GL_RG16F;
|
||||||
@ -10225,6 +10237,30 @@ get_internal_image_format(Texture *tex, bool force_sized) const {
|
|||||||
} else {
|
} else {
|
||||||
return GL_RG16_SNORM;
|
return GL_RG16_SNORM;
|
||||||
}
|
}
|
||||||
|
case Texture::F_r16i:
|
||||||
|
if (Texture::is_unsigned(tex->get_component_type())) {
|
||||||
|
return GL_R16UI;
|
||||||
|
} else {
|
||||||
|
return GL_R16I;
|
||||||
|
}
|
||||||
|
case Texture::F_rg16i:
|
||||||
|
if (Texture::is_unsigned(tex->get_component_type())) {
|
||||||
|
return GL_RG16UI;
|
||||||
|
} else {
|
||||||
|
return GL_RG16I;
|
||||||
|
}
|
||||||
|
case Texture::F_rgb16i:
|
||||||
|
if (Texture::is_unsigned(tex->get_component_type())) {
|
||||||
|
return GL_RGB16UI;
|
||||||
|
} else {
|
||||||
|
return GL_RGB16I;
|
||||||
|
}
|
||||||
|
case Texture::F_rgba16i:
|
||||||
|
if (Texture::is_unsigned(tex->get_component_type())) {
|
||||||
|
return GL_RGBA16UI;
|
||||||
|
} else {
|
||||||
|
return GL_RGBA16I;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef OPENGLES_1
|
#ifndef OPENGLES_1
|
||||||
@ -10337,9 +10373,31 @@ get_internal_image_format(Texture *tex, bool force_sized) const {
|
|||||||
return _core_profile ? GL_SRGB8_ALPHA8 : GL_SLUMINANCE8_ALPHA8;
|
return _core_profile ? GL_SRGB8_ALPHA8 : GL_SLUMINANCE8_ALPHA8;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef OPENGLES
|
#ifndef OPENGLES_1
|
||||||
case Texture::F_r32i:
|
case Texture::F_r32i:
|
||||||
|
if (Texture::is_unsigned(tex->get_component_type())) {
|
||||||
|
return GL_R32UI;
|
||||||
|
} else {
|
||||||
return GL_R32I;
|
return GL_R32I;
|
||||||
|
}
|
||||||
|
case Texture::F_rg32i:
|
||||||
|
if (Texture::is_unsigned(tex->get_component_type())) {
|
||||||
|
return GL_RG32UI;
|
||||||
|
} else {
|
||||||
|
return GL_RG32I;
|
||||||
|
}
|
||||||
|
case Texture::F_rgb32i:
|
||||||
|
if (Texture::is_unsigned(tex->get_component_type())) {
|
||||||
|
return GL_RGB32UI;
|
||||||
|
} else {
|
||||||
|
return GL_RGB32I;
|
||||||
|
}
|
||||||
|
case Texture::F_rgba32i:
|
||||||
|
if (Texture::is_unsigned(tex->get_component_type())) {
|
||||||
|
return GL_RGBA32UI;
|
||||||
|
} else {
|
||||||
|
return GL_RGBA32I;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef OPENGLES_1
|
#ifndef OPENGLES_1
|
||||||
@ -13972,7 +14030,9 @@ do_extract_texture_data(CLP(TextureContext) *gtc) {
|
|||||||
case GL_R3_G3_B2:
|
case GL_R3_G3_B2:
|
||||||
format = Texture::F_rgb332;
|
format = Texture::F_rgb332;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef OPENGLES_1
|
||||||
case GL_R8I:
|
case GL_R8I:
|
||||||
type = Texture::T_byte;
|
type = Texture::T_byte;
|
||||||
format = Texture::F_r8i;
|
format = Texture::F_r8i;
|
||||||
@ -14011,11 +14071,69 @@ do_extract_texture_data(CLP(TextureContext) *gtc) {
|
|||||||
type = Texture::T_short;
|
type = Texture::T_short;
|
||||||
format = Texture::F_r16i;
|
format = Texture::F_r16i;
|
||||||
break;
|
break;
|
||||||
|
case GL_RG16I:
|
||||||
|
type = Texture::T_short;
|
||||||
|
format = Texture::F_rg16i;
|
||||||
|
break;
|
||||||
|
case GL_RGB16I:
|
||||||
|
type = Texture::T_short;
|
||||||
|
format = Texture::F_rgb16i;
|
||||||
|
break;
|
||||||
|
case GL_RGBA16I:
|
||||||
|
type = Texture::T_short;
|
||||||
|
format = Texture::F_rgba16i;
|
||||||
|
break;
|
||||||
|
|
||||||
case GL_R16UI:
|
case GL_R16UI:
|
||||||
type = Texture::T_unsigned_short;
|
type = Texture::T_unsigned_short;
|
||||||
format = Texture::F_r16i;
|
format = Texture::F_r16i;
|
||||||
break;
|
break;
|
||||||
|
case GL_RG16UI:
|
||||||
|
type = Texture::T_unsigned_short;
|
||||||
|
format = Texture::F_rg16i;
|
||||||
|
break;
|
||||||
|
case GL_RGB16UI:
|
||||||
|
type = Texture::T_unsigned_short;
|
||||||
|
format = Texture::F_rgb16i;
|
||||||
|
break;
|
||||||
|
case GL_RGBA16UI:
|
||||||
|
type = Texture::T_unsigned_short;
|
||||||
|
format = Texture::F_rgba16i;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL_R32I:
|
||||||
|
type = Texture::T_int;
|
||||||
|
format = Texture::F_r32i;
|
||||||
|
break;
|
||||||
|
case GL_RG32I:
|
||||||
|
type = Texture::T_int;
|
||||||
|
format = Texture::F_rg32i;
|
||||||
|
break;
|
||||||
|
case GL_RGB32I:
|
||||||
|
type = Texture::T_int;
|
||||||
|
format = Texture::F_rgb32i;
|
||||||
|
break;
|
||||||
|
case GL_RGBA32I:
|
||||||
|
type = Texture::T_int;
|
||||||
|
format = Texture::F_rgba32i;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL_R32UI:
|
||||||
|
type = Texture::T_unsigned_int;
|
||||||
|
format = Texture::F_r32i;
|
||||||
|
break;
|
||||||
|
case GL_RG32UI:
|
||||||
|
type = Texture::T_unsigned_int;
|
||||||
|
format = Texture::F_rg32i;
|
||||||
|
break;
|
||||||
|
case GL_RGB32UI:
|
||||||
|
type = Texture::T_unsigned_int;
|
||||||
|
format = Texture::F_rgb32i;
|
||||||
|
break;
|
||||||
|
case GL_RGBA32UI:
|
||||||
|
type = Texture::T_unsigned_int;
|
||||||
|
format = Texture::F_rgba32i;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef OPENGLES_1
|
#ifndef OPENGLES_1
|
||||||
@ -14104,12 +14222,6 @@ do_extract_texture_data(CLP(TextureContext) *gtc) {
|
|||||||
format = Texture::F_red;
|
format = Texture::F_red;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENGLES
|
|
||||||
case GL_R32I:
|
|
||||||
type = Texture::T_int;
|
|
||||||
format = Texture::F_r32i;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENGLES
|
#ifndef OPENGLES
|
||||||
case GL_RED:
|
case GL_RED:
|
||||||
|
@ -676,7 +676,7 @@ estimate_texture_memory() const {
|
|||||||
CDReader cdata(_cycler);
|
CDReader cdata(_cycler);
|
||||||
size_t pixels = cdata->_x_size * cdata->_y_size * cdata->_z_size;
|
size_t pixels = cdata->_x_size * cdata->_y_size * cdata->_z_size;
|
||||||
|
|
||||||
size_t bpp = 4;
|
size_t bpp = 0;
|
||||||
switch (cdata->_format) {
|
switch (cdata->_format) {
|
||||||
case Texture::F_rgb332:
|
case Texture::F_rgb332:
|
||||||
bpp = 1;
|
bpp = 1;
|
||||||
@ -739,10 +739,8 @@ estimate_texture_memory() const {
|
|||||||
bpp = 8;
|
bpp = 8;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Texture::F_rgba16:
|
|
||||||
bpp = 8;
|
|
||||||
break;
|
|
||||||
case Texture::F_rgba32:
|
case Texture::F_rgba32:
|
||||||
|
case Texture::F_rgba32i:
|
||||||
bpp = 16;
|
bpp = 16;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -752,9 +750,13 @@ estimate_texture_memory() const {
|
|||||||
bpp = 2;
|
bpp = 2;
|
||||||
break;
|
break;
|
||||||
case Texture::F_rg16:
|
case Texture::F_rg16:
|
||||||
|
case Texture::F_rg16i:
|
||||||
bpp = 4;
|
bpp = 4;
|
||||||
break;
|
break;
|
||||||
case Texture::F_rgb16:
|
case Texture::F_rgb16:
|
||||||
|
case Texture::F_rgb16i:
|
||||||
|
case Texture::F_rgba16:
|
||||||
|
case Texture::F_rgba16i:
|
||||||
bpp = 8;
|
bpp = 8;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -764,10 +766,12 @@ estimate_texture_memory() const {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case Texture::F_rg32:
|
case Texture::F_rg32:
|
||||||
|
case Texture::F_rg32i:
|
||||||
bpp = 8;
|
bpp = 8;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Texture::F_rgb32:
|
case Texture::F_rgb32:
|
||||||
|
case Texture::F_rgb32i:
|
||||||
bpp = 16;
|
bpp = 16;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -776,11 +780,12 @@ estimate_texture_memory() const {
|
|||||||
case Texture::F_rgb10_a2:
|
case Texture::F_rgb10_a2:
|
||||||
bpp = 4;
|
bpp = 4;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
if (bpp == 0) {
|
||||||
|
bpp = 4;
|
||||||
gobj_cat.warning() << "Unhandled format in estimate_texture_memory(): "
|
gobj_cat.warning() << "Unhandled format in estimate_texture_memory(): "
|
||||||
<< cdata->_format << "\n";
|
<< cdata->_format << "\n";
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t bytes = pixels * bpp;
|
size_t bytes = pixels * bpp;
|
||||||
@ -1789,10 +1794,6 @@ write(ostream &out, int indent_level) const {
|
|||||||
case F_r16:
|
case F_r16:
|
||||||
out << "r16";
|
out << "r16";
|
||||||
break;
|
break;
|
||||||
case F_r16i:
|
|
||||||
out << "r16i";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F_rg16:
|
case F_rg16:
|
||||||
out << "rg16";
|
out << "rg16";
|
||||||
break;
|
break;
|
||||||
@ -1852,6 +1853,29 @@ write(ostream &out, int indent_level) const {
|
|||||||
case F_rg:
|
case F_rg:
|
||||||
out << "rg";
|
out << "rg";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case F_r16i:
|
||||||
|
out << "r16i";
|
||||||
|
break;
|
||||||
|
case F_rg16i:
|
||||||
|
out << "rg16i";
|
||||||
|
break;
|
||||||
|
case F_rgb16i:
|
||||||
|
out << "rgb16i";
|
||||||
|
break;
|
||||||
|
case F_rgba16i:
|
||||||
|
out << "rgba16i";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case F_rg32i:
|
||||||
|
out << "rg32i";
|
||||||
|
break;
|
||||||
|
case F_rgb32i:
|
||||||
|
out << "rgb32i";
|
||||||
|
break;
|
||||||
|
case F_rgba32i:
|
||||||
|
out << "rgba32i";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cdata->_compression != CM_default) {
|
if (cdata->_compression != CM_default) {
|
||||||
@ -2217,8 +2241,6 @@ format_format(Format format) {
|
|||||||
return "rgba32";
|
return "rgba32";
|
||||||
case F_r16:
|
case F_r16:
|
||||||
return "r16";
|
return "r16";
|
||||||
case F_r16i:
|
|
||||||
return "r16i";
|
|
||||||
case F_rg16:
|
case F_rg16:
|
||||||
return "rg16";
|
return "rg16";
|
||||||
case F_rgb16:
|
case F_rgb16:
|
||||||
@ -2255,6 +2277,20 @@ format_format(Format format) {
|
|||||||
return "rgb10_a2";
|
return "rgb10_a2";
|
||||||
case F_rg:
|
case F_rg:
|
||||||
return "rg";
|
return "rg";
|
||||||
|
case F_r16i:
|
||||||
|
return "r16i";
|
||||||
|
case F_rg16i:
|
||||||
|
return "rg16i";
|
||||||
|
case F_rgb16i:
|
||||||
|
return "rgb16i";
|
||||||
|
case F_rgba16i:
|
||||||
|
return "rgba16i";
|
||||||
|
case F_rg32i:
|
||||||
|
return "rg32i";
|
||||||
|
case F_rgb32i:
|
||||||
|
return "rgb32i";
|
||||||
|
case F_rgba32i:
|
||||||
|
return "rgba32i";
|
||||||
}
|
}
|
||||||
return "**invalid**";
|
return "**invalid**";
|
||||||
}
|
}
|
||||||
@ -2340,6 +2376,14 @@ string_format(const string &str) {
|
|||||||
return F_rg32;
|
return F_rg32;
|
||||||
} else if (cmp_nocase(str, "rgb32") == 0 || cmp_nocase(str, "r32g32b32") == 0) {
|
} else if (cmp_nocase(str, "rgb32") == 0 || cmp_nocase(str, "r32g32b32") == 0) {
|
||||||
return F_rgb32;
|
return F_rgb32;
|
||||||
|
} else if (cmp_nocase_uh(str, "r8i") == 0) {
|
||||||
|
return F_r8i;
|
||||||
|
} else if (cmp_nocase_uh(str, "rg8i") == 0 || cmp_nocase_uh(str, "r8g8i") == 0) {
|
||||||
|
return F_rg8i;
|
||||||
|
} else if (cmp_nocase_uh(str, "rgb8i") == 0 || cmp_nocase_uh(str, "r8g8b8i") == 0) {
|
||||||
|
return F_rgb8i;
|
||||||
|
} else if (cmp_nocase_uh(str, "rgba8i") == 0 || cmp_nocase_uh(str, "r8g8b8a8i") == 0) {
|
||||||
|
return F_rgba8i;
|
||||||
} else if (cmp_nocase(str, "r11g11b10") == 0) {
|
} else if (cmp_nocase(str, "r11g11b10") == 0) {
|
||||||
return F_r11_g11_b10;
|
return F_r11_g11_b10;
|
||||||
} else if (cmp_nocase(str, "rgb9_e5") == 0) {
|
} else if (cmp_nocase(str, "rgb9_e5") == 0) {
|
||||||
@ -2348,6 +2392,20 @@ string_format(const string &str) {
|
|||||||
return F_rgb10_a2;
|
return F_rgb10_a2;
|
||||||
} else if (cmp_nocase_uh(str, "rg") == 0) {
|
} else if (cmp_nocase_uh(str, "rg") == 0) {
|
||||||
return F_rg;
|
return F_rg;
|
||||||
|
} else if (cmp_nocase_uh(str, "r16i") == 0) {
|
||||||
|
return F_r16i;
|
||||||
|
} else if (cmp_nocase_uh(str, "rg16i") == 0 || cmp_nocase_uh(str, "r16g16i") == 0) {
|
||||||
|
return F_rg16i;
|
||||||
|
} else if (cmp_nocase_uh(str, "rgb16i") == 0 || cmp_nocase_uh(str, "r16g16b16i") == 0) {
|
||||||
|
return F_rgb16i;
|
||||||
|
} else if (cmp_nocase_uh(str, "rgba16i") == 0 || cmp_nocase_uh(str, "r16g16b16a16i") == 0) {
|
||||||
|
return F_rgba16i;
|
||||||
|
} else if (cmp_nocase_uh(str, "rg32i") == 0 || cmp_nocase_uh(str, "r32g32i") == 0) {
|
||||||
|
return F_rg32i;
|
||||||
|
} else if (cmp_nocase_uh(str, "rgb32i") == 0 || cmp_nocase_uh(str, "r32g32b32i") == 0) {
|
||||||
|
return F_rgb32i;
|
||||||
|
} else if (cmp_nocase_uh(str, "rgba32i") == 0 || cmp_nocase_uh(str, "r32g32b32a32i") == 0) {
|
||||||
|
return F_rgba32i;
|
||||||
}
|
}
|
||||||
|
|
||||||
gobj_cat->error()
|
gobj_cat->error()
|
||||||
@ -2588,6 +2646,8 @@ has_alpha(Format format) {
|
|||||||
case F_sluminance_alpha:
|
case F_sluminance_alpha:
|
||||||
case F_rgba8i:
|
case F_rgba8i:
|
||||||
case F_rgb10_a2:
|
case F_rgb10_a2:
|
||||||
|
case F_rgba16i:
|
||||||
|
case F_rgba32i:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -2640,6 +2700,12 @@ is_integer(Format format) {
|
|||||||
case F_rgb8i:
|
case F_rgb8i:
|
||||||
case F_rgba8i:
|
case F_rgba8i:
|
||||||
case F_r16i:
|
case F_r16i:
|
||||||
|
case F_rg16i:
|
||||||
|
case F_rgb16i:
|
||||||
|
case F_rgba16i:
|
||||||
|
case F_rg32i:
|
||||||
|
case F_rgb32i:
|
||||||
|
case F_rgba32i:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -3693,11 +3759,31 @@ do_read_dds(CData *cdata, istream &in, const string &filename, bool header_only)
|
|||||||
component_type = T_unsigned_short;
|
component_type = T_unsigned_short;
|
||||||
func = read_dds_level_abgr16;
|
func = read_dds_level_abgr16;
|
||||||
break;
|
break;
|
||||||
|
case 12: // DXGI_FORMAT_R16G16B16A16_UINT
|
||||||
|
format = F_rgba16i;
|
||||||
|
component_type = T_unsigned_short;
|
||||||
|
func = read_dds_level_abgr16;
|
||||||
|
break;
|
||||||
|
case 14: // DXGI_FORMAT_R16G16B16A16_SINT
|
||||||
|
format = F_rgba16i;
|
||||||
|
component_type = T_short;
|
||||||
|
func = read_dds_level_abgr16;
|
||||||
|
break;
|
||||||
case 16: // DXGI_FORMAT_R32G32_FLOAT
|
case 16: // DXGI_FORMAT_R32G32_FLOAT
|
||||||
format = F_rg32;
|
format = F_rg32;
|
||||||
component_type = T_float;
|
component_type = T_float;
|
||||||
func = read_dds_level_raw;
|
func = read_dds_level_raw;
|
||||||
break;
|
break;
|
||||||
|
case 17: // DXGI_FORMAT_R32G32_UINT
|
||||||
|
format = F_rg32i;
|
||||||
|
component_type = T_unsigned_int;
|
||||||
|
func = read_dds_level_raw;
|
||||||
|
break;
|
||||||
|
case 18: // DXGI_FORMAT_R32G32_SINT
|
||||||
|
format = F_rg32i;
|
||||||
|
component_type = T_int;
|
||||||
|
func = read_dds_level_raw;
|
||||||
|
break;
|
||||||
case 27: // DXGI_FORMAT_R8G8B8A8_TYPELESS
|
case 27: // DXGI_FORMAT_R8G8B8A8_TYPELESS
|
||||||
case 28: // DXGI_FORMAT_R8G8B8A8_UNORM
|
case 28: // DXGI_FORMAT_R8G8B8A8_UNORM
|
||||||
format = F_rgba8;
|
format = F_rgba8;
|
||||||
@ -3731,11 +3817,21 @@ do_read_dds(CData *cdata, istream &in, const string &filename, bool header_only)
|
|||||||
component_type = T_unsigned_short;
|
component_type = T_unsigned_short;
|
||||||
func = read_dds_level_raw;
|
func = read_dds_level_raw;
|
||||||
break;
|
break;
|
||||||
|
case 36: // DXGI_FORMAT_R16G16_UINT:
|
||||||
|
format = F_rg16i;
|
||||||
|
component_type = T_unsigned_short;
|
||||||
|
func = read_dds_level_raw;
|
||||||
|
break;
|
||||||
case 37: // DXGI_FORMAT_R16G16_SNORM:
|
case 37: // DXGI_FORMAT_R16G16_SNORM:
|
||||||
format = F_rg16;
|
format = F_rg16;
|
||||||
component_type = T_short;
|
component_type = T_short;
|
||||||
func = read_dds_level_raw;
|
func = read_dds_level_raw;
|
||||||
break;
|
break;
|
||||||
|
case 38: // DXGI_FORMAT_R16G16_SINT:
|
||||||
|
format = F_rg16i;
|
||||||
|
component_type = T_short;
|
||||||
|
func = read_dds_level_raw;
|
||||||
|
break;
|
||||||
case 40: // DXGI_FORMAT_D32_FLOAT
|
case 40: // DXGI_FORMAT_D32_FLOAT
|
||||||
format = F_depth_component32;
|
format = F_depth_component32;
|
||||||
component_type = T_float;
|
component_type = T_float;
|
||||||
@ -4630,8 +4726,12 @@ do_read_ktx(CData *cdata, istream &in, const string &filename, bool header_only)
|
|||||||
break;
|
break;
|
||||||
case KTX_RG16I:
|
case KTX_RG16I:
|
||||||
case KTX_RG16UI:
|
case KTX_RG16UI:
|
||||||
|
format = F_rg16i;
|
||||||
|
break;
|
||||||
case KTX_RG32I:
|
case KTX_RG32I:
|
||||||
case KTX_RG32UI:
|
case KTX_RG32UI:
|
||||||
|
format = F_rg32i;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
gobj_cat.error()
|
gobj_cat.error()
|
||||||
<< filename << " has unsupported RG integer format " << internal_format << "\n";
|
<< filename << " has unsupported RG integer format " << internal_format << "\n";
|
||||||
@ -4695,8 +4795,12 @@ do_read_ktx(CData *cdata, istream &in, const string &filename, bool header_only)
|
|||||||
break;
|
break;
|
||||||
case KTX_RGB16I:
|
case KTX_RGB16I:
|
||||||
case KTX_RGB16UI:
|
case KTX_RGB16UI:
|
||||||
|
format = F_rgb16i;
|
||||||
|
break;
|
||||||
case KTX_RGB32I:
|
case KTX_RGB32I:
|
||||||
case KTX_RGB32UI:
|
case KTX_RGB32UI:
|
||||||
|
format = F_rgb32i;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
gobj_cat.error()
|
gobj_cat.error()
|
||||||
<< filename << " has unsupported RGB integer format " << internal_format << "\n";
|
<< filename << " has unsupported RGB integer format " << internal_format << "\n";
|
||||||
@ -4758,8 +4862,12 @@ do_read_ktx(CData *cdata, istream &in, const string &filename, bool header_only)
|
|||||||
break;
|
break;
|
||||||
case KTX_RGBA16I:
|
case KTX_RGBA16I:
|
||||||
case KTX_RGBA16UI:
|
case KTX_RGBA16UI:
|
||||||
|
format = F_rgba16i;
|
||||||
|
break;
|
||||||
case KTX_RGBA32I:
|
case KTX_RGBA32I:
|
||||||
case KTX_RGBA32UI:
|
case KTX_RGBA32UI:
|
||||||
|
format = F_rgba32i;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
gobj_cat.error()
|
gobj_cat.error()
|
||||||
<< filename << " has unsupported RGBA integer format " << internal_format << "\n";
|
<< filename << " has unsupported RGBA integer format " << internal_format << "\n";
|
||||||
@ -6896,6 +7004,8 @@ do_set_format(CData *cdata, Texture::Format format) {
|
|||||||
case F_rg32:
|
case F_rg32:
|
||||||
case F_rg8i:
|
case F_rg8i:
|
||||||
case F_rg:
|
case F_rg:
|
||||||
|
case F_rg16i:
|
||||||
|
case F_rg32i:
|
||||||
cdata->_num_components = 2;
|
cdata->_num_components = 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -6910,6 +7020,8 @@ do_set_format(CData *cdata, Texture::Format format) {
|
|||||||
case F_rgb8i:
|
case F_rgb8i:
|
||||||
case F_r11_g11_b10:
|
case F_r11_g11_b10:
|
||||||
case F_rgb9_e5:
|
case F_rgb9_e5:
|
||||||
|
case F_rgb16i:
|
||||||
|
case F_rgb32i:
|
||||||
cdata->_num_components = 3;
|
cdata->_num_components = 3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -6924,6 +7036,8 @@ do_set_format(CData *cdata, Texture::Format format) {
|
|||||||
case F_srgb_alpha:
|
case F_srgb_alpha:
|
||||||
case F_rgba8i:
|
case F_rgba8i:
|
||||||
case F_rgb10_a2:
|
case F_rgb10_a2:
|
||||||
|
case F_rgba16i:
|
||||||
|
case F_rgba32i:
|
||||||
cdata->_num_components = 4;
|
cdata->_num_components = 4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -161,7 +161,15 @@ PUBLISHED:
|
|||||||
F_rgb10_a2,
|
F_rgb10_a2,
|
||||||
|
|
||||||
F_rg,
|
F_rg,
|
||||||
F_r16i
|
|
||||||
|
F_r16i,
|
||||||
|
F_rg16i,
|
||||||
|
F_rgb16i, // not recommended
|
||||||
|
F_rgba16i,
|
||||||
|
|
||||||
|
F_rg32i,
|
||||||
|
F_rgb32i,
|
||||||
|
F_rgba32i,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Deprecated. See SamplerState.FilterType.
|
// Deprecated. See SamplerState.FilterType.
|
||||||
|
@ -114,6 +114,7 @@ TexturePeeker(Texture *tex, Texture::CData *cdata) {
|
|||||||
case Texture::F_r16:
|
case Texture::F_r16:
|
||||||
case Texture::F_r32:
|
case Texture::F_r32:
|
||||||
case Texture::F_r32i:
|
case Texture::F_r32i:
|
||||||
|
case Texture::F_r16i:
|
||||||
_get_texel = get_texel_r;
|
_get_texel = get_texel_r;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -140,21 +141,27 @@ TexturePeeker(Texture *tex, Texture::CData *cdata) {
|
|||||||
_get_texel = get_texel_la;
|
_get_texel = get_texel_la;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Texture::F_rg16:
|
|
||||||
case Texture::F_rg32:
|
|
||||||
case Texture::F_rg:
|
case Texture::F_rg:
|
||||||
|
case Texture::F_rg8i:
|
||||||
|
case Texture::F_rg16:
|
||||||
|
case Texture::F_rg16i:
|
||||||
|
case Texture::F_rg32:
|
||||||
|
case Texture::F_rg32i:
|
||||||
_get_texel = get_texel_rg;
|
_get_texel = get_texel_rg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Texture::F_rgb:
|
case Texture::F_rgb:
|
||||||
case Texture::F_rgb5:
|
case Texture::F_rgb5:
|
||||||
case Texture::F_rgb8:
|
case Texture::F_rgb8:
|
||||||
|
case Texture::F_rgb8i:
|
||||||
case Texture::F_rgb12:
|
case Texture::F_rgb12:
|
||||||
case Texture::F_rgb16:
|
case Texture::F_rgb16:
|
||||||
|
case Texture::F_rgb16i:
|
||||||
case Texture::F_rgb332:
|
case Texture::F_rgb332:
|
||||||
case Texture::F_r11_g11_b10:
|
case Texture::F_r11_g11_b10:
|
||||||
case Texture::F_rgb9_e5:
|
case Texture::F_rgb9_e5:
|
||||||
case Texture::F_rgb32:
|
case Texture::F_rgb32:
|
||||||
|
case Texture::F_rgb32i:
|
||||||
_get_texel = get_texel_rgb;
|
_get_texel = get_texel_rgb;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -163,9 +170,12 @@ TexturePeeker(Texture *tex, Texture::CData *cdata) {
|
|||||||
case Texture::F_rgba4:
|
case Texture::F_rgba4:
|
||||||
case Texture::F_rgba5:
|
case Texture::F_rgba5:
|
||||||
case Texture::F_rgba8:
|
case Texture::F_rgba8:
|
||||||
|
case Texture::F_rgba8i:
|
||||||
case Texture::F_rgba12:
|
case Texture::F_rgba12:
|
||||||
case Texture::F_rgba16:
|
case Texture::F_rgba16:
|
||||||
|
case Texture::F_rgba16i:
|
||||||
case Texture::F_rgba32:
|
case Texture::F_rgba32:
|
||||||
|
case Texture::F_rgba32i:
|
||||||
case Texture::F_rgb10_a2:
|
case Texture::F_rgb10_a2:
|
||||||
_get_texel = get_texel_rgba;
|
_get_texel = get_texel_rgba;
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user