//--------------------------------------------------------------------------------------------- void GLTexture::_createSurfaceList() { mSurfaceList.clear(); // For all faces and mipmaps, store surfaces as HardwarePixelBufferSharedPtr bool wantGeneratedMips = (mUsage & TU_AUTOMIPMAP)!=0; // Do mipmapping in software? (uses GLU) For some cards, this is still needed. Of course, // only when mipmap generation is desired. bool doSoftware = wantGeneratedMips && !mMipmapsHardwareGenerated && getNumMipmaps(); for(size_t face=0; face<getNumFaces(); face++) { for(size_t mip=0; mip<=getNumMipmaps(); mip++) { GLHardwarePixelBuffer *buf = new GLTextureBuffer(mName, getGLTextureTarget(), mTextureID, face, mip, static_cast<HardwareBuffer::Usage>(mUsage), doSoftware && mip==0, mHwGamma, mFSAA); mSurfaceList.push_back(HardwarePixelBufferSharedPtr(buf)); /// Check for error if(buf->getWidth()==0 || buf->getHeight()==0 || buf->getDepth()==0) { OGRE_EXCEPT( Exception::ERR_RENDERINGAPI_ERROR, "Zero sized texture surface on texture "+getName()+ " face "+StringConverter::toString(face)+ " mipmap "+StringConverter::toString(mip)+ ". Probably, the GL driver refused to create the texture.", "GLTexture::_createSurfaceList"); } } } }
void GL3PlusTexture::_createSurfaceList() { mSurfaceList.clear(); for (size_t face = 0; face < getNumFaces(); face++) { for (size_t mip = 0; mip <= getNumMipmaps(); mip++) { GL3PlusHardwarePixelBuffer *buf = new GL3PlusTextureBuffer(mName, getGL3PlusTextureTarget(), mTextureID, face, mip, static_cast<HardwareBuffer::Usage>(mUsage), mHwGamma, mFSAA); mSurfaceList.push_back(HardwarePixelBufferSharedPtr(buf)); // Check for error if (buf->getWidth() == 0 || buf->getHeight() == 0 || buf->getDepth() == 0) { OGRE_EXCEPT( Exception::ERR_RENDERINGAPI_ERROR, "Zero sized texture surface on texture "+getName()+ " face "+StringConverter::toString(face)+ " mipmap "+StringConverter::toString(mip)+ ". The GL driver probably refused to create the texture.", "GL3PlusTexture::_createSurfaceList"); } } } }
void GL3PlusTexture::_createSurfaceList() { mSurfaceList.clear(); size_t depth = mDepth; for (uint8 face = 0; face < getNumFaces(); face++) { size_t width = mWidth; size_t height = mHeight; for (uint32 mip = 0; mip <= getNumMipmaps(); mip++) { GL3PlusHardwarePixelBuffer* buf = new GL3PlusTextureBuffer(this, face, mip, width, height, depth); mSurfaceList.push_back(HardwarePixelBufferSharedPtr(buf)); if (width > 1) width = width / 2; if (height > 1) height = height / 2; if (depth > 1 && mTextureType != TEX_TYPE_2D_ARRAY) depth = depth / 2; } } }
//--------------------------------------------------------------------------------------------- void GLTexture::_createSurfaceList() { mSurfaceList.clear(); uint32 depth = mDepth; // For all faces and mipmaps, store surfaces as HardwarePixelBufferSharedPtr for(GLint face=0; face<static_cast<GLint>(getNumFaces()); face++) { uint32 width = mWidth; uint32 height = mHeight; for(uint32 mip=0; mip<=getNumMipmaps(); mip++) { GLHardwarePixelBuffer* buf = new GLTextureBuffer(mRenderSystem, this, face, mip, width, height, depth); mSurfaceList.push_back(HardwarePixelBufferSharedPtr(buf)); if (width > 1) width = width / 2; if (height > 1) height = height / 2; if (depth > 1 && mTextureType != TEX_TYPE_2D_ARRAY) depth = depth / 2; } } }
void GLES2Texture::_createSurfaceList() { mSurfaceList.clear(); // For all faces and mipmaps, store surfaces as HardwarePixelBufferSharedPtr bool wantGeneratedMips = (mUsage & TU_AUTOMIPMAP)!=0; // Do mipmapping in software? (uses GLU) For some cards, this is still needed. Of course, // only when mipmap generation is desired. bool doSoftware = wantGeneratedMips && !mMipmapsHardwareGenerated && getNumMipmaps(); for (size_t face = 0; face < getNumFaces(); face++) { uint32 width = mWidth; uint32 height = mHeight; uint32 depth = mDepth; for (uint8 mip = 0; mip <= getNumMipmaps(); mip++) { GLES2HardwarePixelBuffer *buf = OGRE_NEW GLES2TextureBuffer(mName, getGLES2TextureTarget(), mTextureID, width, height, depth, GLES2PixelUtil::getClosestGLInternalFormat(mFormat, mHwGamma), GLES2PixelUtil::getGLOriginDataType(mFormat), static_cast<GLint>(face), mip, static_cast<HardwareBuffer::Usage>(mUsage), doSoftware && mip == 0, mHwGamma, mFSAA); mSurfaceList.push_back(HardwarePixelBufferSharedPtr(buf)); // Check for error if (buf->getWidth() == 0 || buf->getHeight() == 0 || buf->getDepth() == 0) { OGRE_EXCEPT( Exception::ERR_RENDERINGAPI_ERROR, "Zero sized texture surface on texture " + getName() + " face " + StringConverter::toString(face) + " mipmap " + StringConverter::toString(mip) + ". The GL driver probably refused to create the texture.", "GLES2Texture::_createSurfaceList"); } } } }