| // | |
| // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| // FramebufferAttachment.cpp: the gl::FramebufferAttachment class and its derived classes | |
| // objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108. | |
| #include "libGLESv2/FramebufferAttachment.h" | |
| #include "libGLESv2/Texture.h" | |
| #include "libGLESv2/formatutils.h" | |
| #include "libGLESv2/Renderbuffer.h" | |
| #include "libGLESv2/renderer/RenderTarget.h" | |
| #include "libGLESv2/renderer/Renderer.h" | |
| #include "libGLESv2/renderer/d3d/TextureStorage.h" | |
| #include "common/utilities.h" | |
| namespace gl | |
| { | |
| ////// FramebufferAttachment Implementation ////// | |
| FramebufferAttachment::FramebufferAttachment(GLenum binding) | |
| : mBinding(binding) | |
| { | |
| } | |
| FramebufferAttachment::~FramebufferAttachment() | |
| { | |
| } | |
| GLuint FramebufferAttachment::getRedSize() const | |
| { | |
| return (GetInternalFormatInfo(getInternalFormat()).redBits > 0) ? GetInternalFormatInfo(getActualFormat()).redBits : 0; | |
| } | |
| GLuint FramebufferAttachment::getGreenSize() const | |
| { | |
| return (GetInternalFormatInfo(getInternalFormat()).greenBits > 0) ? GetInternalFormatInfo(getActualFormat()).greenBits : 0; | |
| } | |
| GLuint FramebufferAttachment::getBlueSize() const | |
| { | |
| return (GetInternalFormatInfo(getInternalFormat()).blueBits > 0) ? GetInternalFormatInfo(getActualFormat()).blueBits : 0; | |
| } | |
| GLuint FramebufferAttachment::getAlphaSize() const | |
| { | |
| return (GetInternalFormatInfo(getInternalFormat()).alphaBits > 0) ? GetInternalFormatInfo(getActualFormat()).alphaBits : 0; | |
| } | |
| GLuint FramebufferAttachment::getDepthSize() const | |
| { | |
| return (GetInternalFormatInfo(getInternalFormat()).depthBits > 0) ? GetInternalFormatInfo(getActualFormat()).depthBits : 0; | |
| } | |
| GLuint FramebufferAttachment::getStencilSize() const | |
| { | |
| return (GetInternalFormatInfo(getInternalFormat()).stencilBits > 0) ? GetInternalFormatInfo(getActualFormat()).stencilBits : 0; | |
| } | |
| GLenum FramebufferAttachment::getComponentType() const | |
| { | |
| return GetInternalFormatInfo(getActualFormat()).componentType; | |
| } | |
| GLenum FramebufferAttachment::getColorEncoding() const | |
| { | |
| return GetInternalFormatInfo(getActualFormat()).colorEncoding; | |
| } | |
| bool FramebufferAttachment::isTexture() const | |
| { | |
| return (type() != GL_RENDERBUFFER); | |
| } | |
| ///// TextureAttachment Implementation //////// | |
| TextureAttachment::TextureAttachment(GLenum binding, Texture *texture, const ImageIndex &index) | |
| : FramebufferAttachment(binding), | |
| mIndex(index) | |
| { | |
| mTexture.set(texture); | |
| } | |
| TextureAttachment::~TextureAttachment() | |
| { | |
| mTexture.set(NULL); | |
| } | |
| GLsizei TextureAttachment::getSamples() const | |
| { | |
| return 0; | |
| } | |
| GLuint TextureAttachment::id() const | |
| { | |
| return mTexture->id(); | |
| } | |
| GLsizei TextureAttachment::getWidth() const | |
| { | |
| return mTexture->getWidth(mIndex); | |
| } | |
| GLsizei TextureAttachment::getHeight() const | |
| { | |
| return mTexture->getHeight(mIndex); | |
| } | |
| GLenum TextureAttachment::getInternalFormat() const | |
| { | |
| return mTexture->getInternalFormat(mIndex); | |
| } | |
| GLenum TextureAttachment::getActualFormat() const | |
| { | |
| return mTexture->getActualFormat(mIndex); | |
| } | |
| GLenum TextureAttachment::type() const | |
| { | |
| return mIndex.type; | |
| } | |
| GLint TextureAttachment::mipLevel() const | |
| { | |
| return mIndex.mipIndex; | |
| } | |
| GLint TextureAttachment::layer() const | |
| { | |
| return mIndex.layerIndex; | |
| } | |
| Texture *TextureAttachment::getTexture() | |
| { | |
| return mTexture.get(); | |
| } | |
| const ImageIndex *TextureAttachment::getTextureImageIndex() const | |
| { | |
| return &mIndex; | |
| } | |
| Renderbuffer *TextureAttachment::getRenderbuffer() | |
| { | |
| UNREACHABLE(); | |
| return NULL; | |
| } | |
| ////// RenderbufferAttachment Implementation ////// | |
| RenderbufferAttachment::RenderbufferAttachment(GLenum binding, Renderbuffer *renderbuffer) | |
| : FramebufferAttachment(binding) | |
| { | |
| ASSERT(renderbuffer); | |
| mRenderbuffer.set(renderbuffer); | |
| } | |
| RenderbufferAttachment::~RenderbufferAttachment() | |
| { | |
| mRenderbuffer.set(NULL); | |
| } | |
| GLsizei RenderbufferAttachment::getWidth() const | |
| { | |
| return mRenderbuffer->getWidth(); | |
| } | |
| GLsizei RenderbufferAttachment::getHeight() const | |
| { | |
| return mRenderbuffer->getHeight(); | |
| } | |
| GLenum RenderbufferAttachment::getInternalFormat() const | |
| { | |
| return mRenderbuffer->getInternalFormat(); | |
| } | |
| GLenum RenderbufferAttachment::getActualFormat() const | |
| { | |
| return mRenderbuffer->getActualFormat(); | |
| } | |
| GLsizei RenderbufferAttachment::getSamples() const | |
| { | |
| return mRenderbuffer->getStorage()->getSamples(); | |
| } | |
| GLuint RenderbufferAttachment::id() const | |
| { | |
| return mRenderbuffer->id(); | |
| } | |
| GLenum RenderbufferAttachment::type() const | |
| { | |
| return GL_RENDERBUFFER; | |
| } | |
| GLint RenderbufferAttachment::mipLevel() const | |
| { | |
| return 0; | |
| } | |
| GLint RenderbufferAttachment::layer() const | |
| { | |
| return 0; | |
| } | |
| Texture *RenderbufferAttachment::getTexture() | |
| { | |
| UNREACHABLE(); | |
| return NULL; | |
| } | |
| const ImageIndex *RenderbufferAttachment::getTextureImageIndex() const | |
| { | |
| UNREACHABLE(); | |
| return NULL; | |
| } | |
| Renderbuffer *RenderbufferAttachment::getRenderbuffer() | |
| { | |
| return mRenderbuffer.get(); | |
| } | |
| } |