michael@0: #include "precompiled.h" michael@0: // michael@0: // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved. michael@0: // Use of this source code is governed by a BSD-style license that can be michael@0: // found in the LICENSE file. michael@0: // michael@0: michael@0: // TextureStorage.cpp: Implements the abstract rx::TextureStorageInterface class and its concrete derived michael@0: // classes TextureStorageInterface2D and TextureStorageInterfaceCube, which act as the interface to the michael@0: // GPU-side texture. michael@0: michael@0: #include "libGLESv2/renderer/TextureStorage.h" michael@0: #include "libGLESv2/renderer/Renderer.h" michael@0: #include "libGLESv2/Renderbuffer.h" michael@0: #include "libGLESv2/Texture.h" michael@0: michael@0: #include "common/debug.h" michael@0: michael@0: namespace rx michael@0: { michael@0: unsigned int TextureStorageInterface::mCurrentTextureSerial = 1; michael@0: michael@0: TextureStorageInterface::TextureStorageInterface() michael@0: : mTextureSerial(issueTextureSerial()), michael@0: mInstance(NULL) michael@0: { michael@0: } michael@0: michael@0: TextureStorageInterface::~TextureStorageInterface() michael@0: { michael@0: delete mInstance; michael@0: } michael@0: michael@0: bool TextureStorageInterface::isRenderTarget() const michael@0: { michael@0: return mInstance->isRenderTarget(); michael@0: } michael@0: michael@0: michael@0: bool TextureStorageInterface::isManaged() const michael@0: { michael@0: return mInstance->isManaged(); michael@0: } michael@0: michael@0: unsigned int TextureStorageInterface::getTextureSerial() const michael@0: { michael@0: return mTextureSerial; michael@0: } michael@0: michael@0: unsigned int TextureStorageInterface::issueTextureSerial() michael@0: { michael@0: return mCurrentTextureSerial++; michael@0: } michael@0: michael@0: int TextureStorageInterface::getLodOffset() const michael@0: { michael@0: return mInstance->getLodOffset(); michael@0: } michael@0: michael@0: michael@0: int TextureStorageInterface::levelCount() michael@0: { michael@0: return mInstance->levelCount(); michael@0: } michael@0: michael@0: TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, SwapChain *swapchain) michael@0: : mRenderTargetSerial(gl::RenderbufferStorage::issueSerial()) michael@0: { michael@0: mInstance = renderer->createTextureStorage2D(swapchain); michael@0: } michael@0: michael@0: TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height) michael@0: : mRenderTargetSerial(gl::RenderbufferStorage::issueSerial()) michael@0: { michael@0: mInstance = renderer->createTextureStorage2D(levels, internalformat, usage, forceRenderable, width, height); michael@0: } michael@0: michael@0: TextureStorageInterface2D::~TextureStorageInterface2D() michael@0: { michael@0: } michael@0: michael@0: RenderTarget *TextureStorageInterface2D::getRenderTarget() const michael@0: { michael@0: return mInstance->getRenderTarget(); michael@0: } michael@0: michael@0: void TextureStorageInterface2D::generateMipmap(int level) michael@0: { michael@0: mInstance->generateMipmap(level); michael@0: } michael@0: michael@0: unsigned int TextureStorageInterface2D::getRenderTargetSerial(GLenum target) const michael@0: { michael@0: return mRenderTargetSerial; michael@0: } michael@0: michael@0: TextureStorageInterfaceCube::TextureStorageInterfaceCube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size) michael@0: : mFirstRenderTargetSerial(gl::RenderbufferStorage::issueCubeSerials()) michael@0: { michael@0: mInstance = renderer->createTextureStorageCube(levels, internalformat, usage, forceRenderable, size); michael@0: } michael@0: michael@0: TextureStorageInterfaceCube::~TextureStorageInterfaceCube() michael@0: { michael@0: } michael@0: michael@0: RenderTarget *TextureStorageInterfaceCube::getRenderTarget(GLenum faceTarget) const michael@0: { michael@0: return mInstance->getRenderTarget(faceTarget); michael@0: } michael@0: michael@0: void TextureStorageInterfaceCube::generateMipmap(int face, int level) michael@0: { michael@0: mInstance->generateMipmap(face, level); michael@0: } michael@0: michael@0: unsigned int TextureStorageInterfaceCube::getRenderTargetSerial(GLenum target) const michael@0: { michael@0: return mFirstRenderTargetSerial + gl::TextureCubeMap::faceIndex(target); michael@0: } michael@0: michael@0: }