| // |
| // 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(); |
| } |
| |
| } |