From b2ebd78d81a2934c6b58dc0e68f1db097ab5ad85 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sat, 30 Apr 2016 12:12:21 +0200 Subject: [PATCH] Support for R16I and R16UI --- .../glstuff/glGraphicsStateGuardian_src.cxx | 19 +++++++++++++++++++ panda/src/gobj/texture.cxx | 10 ++++++++++ panda/src/gobj/texture.h | 1 + 3 files changed, 30 insertions(+) diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx index 9a590bd746..50a18790a2 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx @@ -8334,6 +8334,7 @@ get_external_image_format(Texture *tex) const { case Texture::F_blue: case Texture::F_r8i: case Texture::F_r16: + case Texture::F_r16i: case Texture::F_r32: case Texture::F_r32i: return GL_COMPRESSED_RED; @@ -8539,6 +8540,7 @@ get_external_image_format(Texture *tex) const { #ifndef OPENGLES_1 case Texture::F_r8i: + case Texture::F_r16i: case Texture::F_r32i: return GL_RED_INTEGER; case Texture::F_rg8i: @@ -8596,6 +8598,7 @@ get_internal_image_format(Texture *tex, bool force_sized) const { case Texture::F_rg8i: case Texture::F_rgb8i: case Texture::F_rgba8i: + case Texture::F_r16i: case Texture::F_r32i: case Texture::F_r11_g11_b10: case Texture::F_rgb9_e5: @@ -9072,6 +9075,12 @@ get_internal_image_format(Texture *tex, bool force_sized) const { } else { 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: if (tex->get_component_type() == Texture::T_float) { return GL_RG16F; @@ -12662,6 +12671,16 @@ do_extract_texture_data(CLP(TextureContext) *gtc) { type = Texture::T_unsigned_byte; format = Texture::F_rgba8i; break; + + case GL_R16I: + type = Texture::T_short; + format = Texture::F_r16i; + break; + case GL_R16UI: + type = Texture::T_unsigned_short; + format = Texture::F_r16i; + break; + #endif #ifndef OPENGLES_1 diff --git a/panda/src/gobj/texture.cxx b/panda/src/gobj/texture.cxx index 6fd3b9a93d..f8654d265c 100644 --- a/panda/src/gobj/texture.cxx +++ b/panda/src/gobj/texture.cxx @@ -514,6 +514,7 @@ estimate_texture_memory() const { break; case Texture::F_r16: + case Texture::F_r16i: case Texture::F_rg8i: bpp = 2; break; @@ -1532,6 +1533,10 @@ write(ostream &out, int indent_level) const { case F_r16: out << "r16"; break; + case F_r16i: + out << "r16i"; + break; + case F_rg16: out << "rg16"; break; @@ -1950,6 +1955,8 @@ format_format(Format format) { return "rgba32"; case F_r16: return "r16"; + case F_r16i: + return "r16i"; case F_rg16: return "rg16"; case F_rgb16: @@ -2049,6 +2056,8 @@ string_format(const string &str) { return F_rgba32; } else if (cmp_nocase(str, "r16") == 0 || cmp_nocase(str, "red16") == 0) { return F_r16; + } else if (cmp_nocase(str, "r16i") == 0) { + return F_r16i; } else if (cmp_nocase(str, "rg16") == 0 || cmp_nocase(str, "r16g16") == 0) { return F_rg16; } else if (cmp_nocase(str, "rgb16") == 0 || cmp_nocase(str, "r16g16b16") == 0) { @@ -5745,6 +5754,7 @@ do_set_format(CData *cdata, Texture::Format format) { case F_alpha: case F_luminance: case F_r16: + case F_r16i: case F_sluminance: case F_r32i: case F_r32: diff --git a/panda/src/gobj/texture.h b/panda/src/gobj/texture.h index e1226579b2..a7115d4664 100644 --- a/panda/src/gobj/texture.h +++ b/panda/src/gobj/texture.h @@ -159,6 +159,7 @@ PUBLISHED: F_rgb10_a2, F_rg, + F_r16i }; // Deprecated. See SamplerState.FilterType.