Torque3D Documentation / _generateds / gfxGLTextureArray.cpp

gfxGLTextureArray.cpp

Engine/source/gfx/gl/gfxGLTextureArray.cpp

More...

Detailed Description

  1
  2#include "gfxGLTextureArray.h"
  3
  4#include "gfxGLTextureObject.h"
  5#include "gfxGLUtils.h"
  6#include "core/util/tVector.h"
  7
  8GFXGLTextureArray::GFXGLTextureArray()
  9{
 10   mTextureArray = NULL;
 11}
 12
 13void GFXGLTextureArray::init()
 14{
 15   PRESERVE_2D_TEXTURE_ARRAY();
 16   glGenTextures(1, &mTextureArray);
 17   glBindTexture(GL_TEXTURE_2D_ARRAY, mTextureArray);
 18   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, mMin(mMipLevels - 1, 1));
 19   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 20   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 21   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 22   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 23
 24   glTexStorage3D(GL_TEXTURE_2D_ARRAY, mMipLevels, GFXGLTextureInternalFormat[mFormat], mWidth, mHeight, mArraySize);
 25}
 26
 27void GFXGLTextureArray::_setTexture(const GFXTexHandle& texture, U32 slot)
 28{
 29   PRESERVE_2D_TEXTURE_ARRAY();
 30   glBindTexture(GL_TEXTURE_2D_ARRAY, mTextureArray);
 31
 32   GFXGLTextureObject* texObj = dynamic_cast<GFXGLTextureObject*>(texture.getPointer());
 33   for (U32 mip = 0; mip < mMipLevels; ++mip)
 34   {
 35      U8* buf = texObj->getTextureData(mip);
 36      const U32 mipWidth = getMax(U32(1), mWidth >> mip);
 37      const U32 mipHeight = getMax(U32(1), mHeight >> mip);
 38      if (mIsCompressed)
 39      {
 40         glCompressedTexSubImage3D(
 41            GL_TEXTURE_2D_ARRAY,
 42            mip, 0, 0,
 43            slot, mipWidth, mipHeight, 1,
 44            GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], buf
 45         );
 46      }
 47      else
 48      {
 49         glTexSubImage3D(
 50            GL_TEXTURE_2D_ARRAY,
 51            mip, 0, 0,
 52            slot, mipWidth, mipHeight, 1,
 53            GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], buf
 54         );
 55      }
 56      delete[] buf;
 57   }
 58}
 59
 60void GFXGLTextureArray::setToTexUnit(U32 tuNum)
 61{
 62   dynamic_cast<GFXGLDevice*>(getOwningDevice())->setTextureArrayInternal(tuNum, this);
 63}
 64
 65void GFXGLTextureArray::Release()
 66{
 67   glDeleteTextures(1, &mTextureArray);
 68   mTextureArray = 0;
 69
 70   GFXTextureArray::Release();
 71}
 72
 73void GFXGLTextureArray::bind(U32 textureUnit) const
 74{
 75   glActiveTexture(GL_TEXTURE0 + textureUnit);
 76   glBindTexture(GL_TEXTURE_2D_ARRAY, mTextureArray);
 77
 78   dynamic_cast<GFXGLDevice*>(getOwningDevice())->getOpenglCache()->setCacheBindedTex(textureUnit, GL_TEXTURE_2D_ARRAY, mTextureArray);
 79
 80   GFXGLStateBlockRef sb = dynamic_cast<GFXGLDevice*>(GFX)->getCurrentStateBlock();
 81   AssertFatal(sb, "GFXGLTextureArray::bind - No active stateblock!");
 82   if (!sb)
 83      return;
 84
 85   const GFXSamplerStateDesc& ssd = sb->getDesc().samplers[textureUnit];
 86   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, minificationFilter(ssd.minFilter, ssd.mipFilter, 0));
 87   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GFXGLTextureFilter[ssd.magFilter]);
 88   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, mMin(mMipLevels - 1, 1));
 89   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GFXGLTextureAddress[ssd.addressModeU]);
 90   glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GFXGLTextureAddress[ssd.addressModeV]);
 91}
 92
 93void GFXGLTextureArray::zombify()
 94{
 95}
 96
 97void GFXGLTextureArray::resurrect()
 98{
 99}
100