diff --git a/direct/src/showbase/BufferViewer.py b/direct/src/showbase/BufferViewer.py index b4d7f90d58..1180e1a5a0 100644 --- a/direct/src/showbase/BufferViewer.py +++ b/direct/src/showbase/BufferViewer.py @@ -290,6 +290,17 @@ class BufferViewer(DirectObject): card = NodePath(self.cardmaker.generate()) card.setTexture(tex) cards.append(card) + elif (tex.getTextureType() == Texture.TT2dTextureArray): + for layer in range(tex.getZSize()): + self.cardmaker.setUvRange((0, 1, 1, 0), (0, 0, 1, 1),\ + (layer, layer, layer, layer)) + card = NodePath(self.cardmaker.generate()) + # 2D texture arrays are not supported by + # the fixed-function pipeline, so we need to + # enable the shader generator to view them. + card.setShaderAuto() + card.setTexture(tex) + cards.append(card) else: card = win.getTextureCard() card.setTexture(tex) diff --git a/panda/src/pgraph/textureAttrib.cxx b/panda/src/pgraph/textureAttrib.cxx index 7afddd99e3..452378d37d 100644 --- a/panda/src/pgraph/textureAttrib.cxx +++ b/panda/src/pgraph/textureAttrib.cxx @@ -962,8 +962,10 @@ sort_on_stages() { for (si = _on_stages.begin(); si != _on_stages.end(); ++si) { StageNode &sn = (*si); TextureStage *stage = sn._stage; + Texture *texture = sn._texture; nassertv(stage != NULL); - if (stage->is_fixed_function()) { + nassertv(texture != NULL); + if (stage->is_fixed_function() && texture->get_texture_type() != Texture::TT_2d_texture_array) { const InternalName *name = stage->get_texcoord_name(); // This pair of lines will get the next consecutive texcoord index diff --git a/panda/src/pgraphnodes/shaderGenerator.cxx b/panda/src/pgraphnodes/shaderGenerator.cxx index 6ddb41dca7..9f9218ed46 100644 --- a/panda/src/pgraphnodes/shaderGenerator.cxx +++ b/panda/src/pgraphnodes/shaderGenerator.cxx @@ -612,7 +612,7 @@ update_shadow_buffer(NodePath light_np) { // - shadow mapping // - most texgen modes // - texmatrix -// - 1D/2D/3D textures, cube textures +// - 1D/2D/3D textures, cube textures, 2D tex arrays // - linear/exp/exp2 fog // // Not yet supported: @@ -955,7 +955,8 @@ synthesize_shader(const RenderState *rs) { text << "(tex_" << _map_index_height << ", l_texcoord" << _map_index_height << "."; switch (tex->get_texture_type()) { case Texture::TT_cube_map: - case Texture::TT_3d_texture: + case Texture::TT_3d_texture: + case Texture::TT_2d_texture_array: text << "xyz"; break; case Texture::TT_2d_texture: @@ -997,7 +998,8 @@ synthesize_shader(const RenderState *rs) { text << "(tex_" << i << ", l_texcoord" << i << "."; switch(tex->get_texture_type()) { case Texture::TT_cube_map: - case Texture::TT_3d_texture: + case Texture::TT_3d_texture: + case Texture::TT_2d_texture_array: text << "xyz"; break; case Texture::TT_2d_texture: @@ -1625,6 +1627,9 @@ texture_type_as_string(Texture::TextureType ttype) { case Texture::TT_cube_map: return "CUBE"; break; + case Texture::TT_2d_texture_array: + return "2DARRAY"; + break; default: pgraph_cat.error() << "Unsupported texture type!\n"; return "2D";