From 234e7eefee4eddd3741a4c25c7661a8f733d85e1 Mon Sep 17 00:00:00 2001 From: deflected Date: Mon, 12 Sep 2016 13:19:44 +0300 Subject: [PATCH] loader: Added loading of 2D texture array Signed-off-by: deflected --- direct/src/showbase/Loader.py | 57 +++++++++++++++++++++++++++++++++ panda/src/putil/loaderOptions.I | 8 ++--- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/direct/src/showbase/Loader.py b/direct/src/showbase/Loader.py index 24773b776b..9edde2a9b7 100644 --- a/direct/src/showbase/Loader.py +++ b/direct/src/showbase/Loader.py @@ -687,6 +687,63 @@ class Loader(DirectObject): return texture + def load2DTextureArray(self, texturePattern, readMipmaps = False, okMissing = False, + minfilter = None, magfilter = None, anisotropicDegree = None, + loaderOptions = None, multiview = None, numViews = 2): + """ + texturePattern is a string that contains a sequence of one or + more hash characters ('#'), which will be filled in with the + z-height number. Returns a 2-D Texture array object, suitable + for rendering array of textures. + + okMissing should be True to indicate the method should return + None if the texture file is not found. If it is False, the + method will raise an exception if the texture file is not + found or cannot be loaded. + + If readMipmaps is True, then the filename string must contain + two sequences of hash characters; the first group is filled in + with the z-height number, and the second group with the mipmap + index number. + + If multiview is true, it indicates to load a multiview or + stereo texture. In this case, numViews should also be + specified (the default is 2), and the sequence of texture + images will be divided into numViews views. The total + z-height will be (numImages / numViews). For instance, if you + read 16 images with numViews = 2, then you have created a + stereo multiview image, with z = 8. In this example, images + numbered 0 - 7 will be part of the left eye view, and images + numbered 8 - 15 will be part of the right eye view. + """ + assert Loader.notify.debug("Loading 2-D texture array: %s" % (texturePattern)) + if loaderOptions is None: + loaderOptions = LoaderOptions() + else: + loaderOptions = LoaderOptions(loaderOptions) + if multiview is not None: + flags = loaderOptions.getTextureFlags() + if multiview: + flags |= LoaderOptions.TFMultiview + else: + flags &= ~LoaderOptions.TFMultiview + loaderOptions.setTextureFlags(flags) + loaderOptions.setTextureNumViews(numViews) + + texture = TexturePool.load2dTextureArray(texturePattern, readMipmaps, loaderOptions) + if not texture and not okMissing: + message = 'Could not load 2-D texture array: %s' % (texturePattern) + raise IOError(message) + + if minfilter is not None: + texture.setMinfilter(minfilter) + if magfilter is not None: + texture.setMagfilter(magfilter) + if anisotropicDegree is not None: + texture.setAnisotropicDegree(anisotropicDegree) + + return texture + def loadCubeMap(self, texturePattern, readMipmaps = False, okMissing = False, minfilter = None, magfilter = None, anisotropicDegree = None, loaderOptions = None, multiview = None): diff --git a/panda/src/putil/loaderOptions.I b/panda/src/putil/loaderOptions.I index f28be10370..b15780c847 100644 --- a/panda/src/putil/loaderOptions.I +++ b/panda/src/putil/loaderOptions.I @@ -81,10 +81,10 @@ get_texture_flags() const { /** * Specifies the expected number of views to load for the texture. This is * ignored unless TF_multiview is included in texture_flags. This must be - * specified when loading a 3-d multiview texture, in which case it is used to - * differentiate z levels from separate views; it may be zero in the case of - * 2-d textures or cube maps, in which case the number of views can be - * inferred from the number of images found on disk. + * specified when loading a 3-d multiview texture or 2-d texture array, in + * which case it is used to differentiate z levels from separate views; it + * may be zero in the case of 2-d textures or cube maps, in which case the + * number of views can be inferred from the number of images found on disk. */ INLINE void LoaderOptions:: set_texture_num_views(int texture_num_views) {