gl::Error TextureStorage9_Cube::generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex) { IDirect3DSurface9 *upper = NULL; gl::Error error = getCubeMapSurface(sourceIndex.type, sourceIndex.mipIndex, false, &upper); if (error.isError()) { return error; } IDirect3DSurface9 *lower = NULL; error = getCubeMapSurface(destIndex.type, destIndex.mipIndex, true, &lower); if (error.isError()) { SafeRelease(upper); return error; } ASSERT(upper && lower); error = mRenderer->boxFilter(upper, lower); SafeRelease(upper); SafeRelease(lower); return error; }
void TextureStorage9_Cube::generateMipmap(int faceIndex, int level) { IDirect3DSurface9 *upper = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level - 1, false); IDirect3DSurface9 *lower = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level, true); if (upper != NULL && lower != NULL) { mRenderer->boxFilter(upper, lower); } SafeRelease(upper); SafeRelease(lower); }
void TextureStorage9_Cube::initializeRenderTarget() { if (mTexture != NULL && isRenderTarget()) { IDirect3DSurface9 *surface = NULL; for (int i = 0; i < 6; ++i) { ASSERT(mRenderTarget[i] == NULL); surface = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, false); mRenderTarget[i] = new RenderTarget9(mRenderer, surface); } } }
gl::Error TextureStorage9_Cube::getRenderTarget(const gl::ImageIndex &index, RenderTarget **outRT) { ASSERT(outRT); ASSERT(index.mipIndex == 0); ASSERT(index.layerIndex >= 0 && index.layerIndex < CUBE_FACE_COUNT); if (mRenderTarget[index.layerIndex] == NULL && isRenderTarget()) { IDirect3DSurface9 *surface = NULL; gl::Error error = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + index.layerIndex, 0, false, &surface); if (error.isError()) { return error; } mRenderTarget[index.layerIndex] = new RenderTarget9(surface, mInternalFormat, mTextureWidth, mTextureHeight, 1, 0); } *outRT = mRenderTarget[index.layerIndex]; return gl::Error(GL_NO_ERROR); }
gl::Error TextureStorage9_Cube::copyToStorage(TextureStorage *destStorage) { ASSERT(destStorage); TextureStorage9_Cube *dest9 = TextureStorage9_Cube::makeTextureStorage9_Cube(destStorage); int levels = getLevelCount(); for (int f = 0; f < CUBE_FACE_COUNT; f++) { for (int i = 0; i < levels; i++) { IDirect3DSurface9 *srcSurf = NULL; gl::Error error = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, false, &srcSurf); if (error.isError()) { return error; } IDirect3DSurface9 *dstSurf = NULL; error = dest9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, true, &dstSurf); if (error.isError()) { SafeRelease(srcSurf); return error; } error = mRenderer->copyToRenderTarget(dstSurf, srcSurf, isManaged()); SafeRelease(srcSurf); SafeRelease(dstSurf); if (error.isError()) { return error; } } } return gl::Error(GL_NO_ERROR); }