Edit

kc3-lang/angle/src/libGLESv2/Renderbuffer.cpp

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2014-06-19 14:14:41
    Hash : e4a492be
    Message : Remove the clientVersion parameter from the format utils. clientVersion was only useful for intitial validation of formats and not required for queries. Only use the client version and caps structure to validate if a format is available and then trust that it is supported past the validation layer. Fixed some inconsistancies between tables such as missing formats or incorrect load functions in the ES3 tables. BUG=angle:659 Change-Id: I8d33c902156ee6fb41efe937d93b0586191726e5 Reviewed-on: https://chromium-review.googlesource.com/201167 Reviewed-by: Shannon Woods <shannonwoods@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>

  • src/libGLESv2/Renderbuffer.cpp
  • #include "precompiled.h"
    //
    // Copyright (c) 2002-2012 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.
    //
    
    // Renderbuffer.cpp: the gl::Renderbuffer class and its derived classes
    // Colorbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
    // objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
    
    #include "libGLESv2/Renderbuffer.h"
    #include "libGLESv2/renderer/RenderTarget.h"
    
    #include "libGLESv2/Texture.h"
    #include "libGLESv2/renderer/Renderer.h"
    #include "libGLESv2/renderer/TextureStorage.h"
    #include "common/utilities.h"
    #include "libGLESv2/formatutils.h"
    #include "libGLESv2/FramebufferAttachment.h"
    
    namespace gl
    {
    unsigned int RenderbufferStorage::mCurrentSerial = 1;
    
    Renderbuffer::Renderbuffer(GLuint id, RenderbufferStorage *newStorage)
      : RefCountObject(id),
        mStorage(newStorage)
    {
        ASSERT(mStorage);
    }
    
    void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
    {
        ASSERT(newStorage);
    
        SafeDelete(mStorage);
        mStorage = newStorage;
    }
    
    RenderbufferStorage *Renderbuffer::getStorage()
    {
        ASSERT(mStorage);
        return mStorage;
    }
    
    GLsizei Renderbuffer::getWidth() const
    {
        ASSERT(mStorage);
        return mStorage->getWidth();
    }
    
    GLsizei Renderbuffer::getHeight() const
    {
        ASSERT(mStorage);
        return mStorage->getHeight();
    }
    
    GLenum Renderbuffer::getInternalFormat() const
    {
        ASSERT(mStorage);
        return mStorage->getInternalFormat();
    }
    
    GLenum Renderbuffer::getActualFormat() const
    {
        ASSERT(mStorage);
        return mStorage->getActualFormat();
    }
    
    GLsizei Renderbuffer::getSamples() const
    {
        ASSERT(mStorage);
        return mStorage->getSamples();
    }
    
    GLuint Renderbuffer::getRedSize() const
    {
        return gl::GetRedBits(getActualFormat());
    }
    
    GLuint Renderbuffer::getGreenSize() const
    {
        return gl::GetGreenBits(getActualFormat());
    }
    
    GLuint Renderbuffer::getBlueSize() const
    {
        return gl::GetBlueBits(getActualFormat());
    }
    
    GLuint Renderbuffer::getAlphaSize() const
    {
        return gl::GetAlphaBits(getActualFormat());
    }
    
    GLuint Renderbuffer::getDepthSize() const
    {
        return gl::GetDepthBits(getActualFormat());
    }
    
    GLuint Renderbuffer::getStencilSize() const
    {
        return gl::GetStencilBits(getActualFormat());
    }
    
    RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerials(1))
    {
        mWidth = 0;
        mHeight = 0;
        mInternalFormat = GL_RGBA4;
        mActualFormat = GL_RGBA8_OES;
        mSamples = 0;
    }
    
    RenderbufferStorage::~RenderbufferStorage()
    {
    }
    
    rx::RenderTarget *RenderbufferStorage::getRenderTarget()
    {
        return NULL;
    }
    
    rx::RenderTarget *RenderbufferStorage::getDepthStencil()
    {
        return NULL;
    }
    
    rx::TextureStorage *RenderbufferStorage::getTextureStorage()
    {
        return NULL;
    }
    
    GLsizei RenderbufferStorage::getWidth() const
    {
        return mWidth;
    }
    
    GLsizei RenderbufferStorage::getHeight() const
    {
        return mHeight;
    }
    
    GLenum RenderbufferStorage::getInternalFormat() const
    {
        return mInternalFormat;
    }
    
    GLenum RenderbufferStorage::getActualFormat() const
    {
        return mActualFormat;
    }
    
    GLsizei RenderbufferStorage::getSamples() const
    {
        return mSamples;
    }
    
    unsigned int RenderbufferStorage::getSerial() const
    {
        return mSerial;
    }
    
    unsigned int RenderbufferStorage::issueSerials(GLuint count)
    {
        unsigned int firstSerial = mCurrentSerial;
        mCurrentSerial += count;
        return firstSerial;
    }
    
    bool RenderbufferStorage::isTexture() const
    {
        return false;
    }
    
    unsigned int RenderbufferStorage::getTextureSerial() const
    {
        return -1;
    }
    
    Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
    {
        mRenderTarget = renderer->createRenderTarget(swapChain, false); 
    
        if (mRenderTarget)
        {
            mWidth = mRenderTarget->getWidth();
            mHeight = mRenderTarget->getHeight();
            mInternalFormat = mRenderTarget->getInternalFormat();
            mActualFormat = mRenderTarget->getActualFormat();
            mSamples = mRenderTarget->getSamples();
        }
    }
    
    Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
    {
        mRenderTarget = renderer->createRenderTarget(width, height, format, samples);
    
        if (mRenderTarget)
        {
            mWidth = width;
            mHeight = height;
            mInternalFormat = format;
            mActualFormat = mRenderTarget->getActualFormat();
            mSamples = mRenderTarget->getSamples();
        }
    }
    
    Colorbuffer::~Colorbuffer()
    {
        if (mRenderTarget)
        {
            delete mRenderTarget;
        }
    }
    
    rx::RenderTarget *Colorbuffer::getRenderTarget()
    {
        return mRenderTarget;
    }
    
    DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
    {
        mDepthStencil = renderer->createRenderTarget(swapChain, true);
        if (mDepthStencil)
        {
            mWidth = mDepthStencil->getWidth();
            mHeight = mDepthStencil->getHeight();
            mInternalFormat = mDepthStencil->getInternalFormat();
            mSamples = mDepthStencil->getSamples();
            mActualFormat = mDepthStencil->getActualFormat();
        }
    }
    
    DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
    {
    
        mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples);
    
        mWidth = mDepthStencil->getWidth();
        mHeight = mDepthStencil->getHeight();
        mInternalFormat = GL_DEPTH24_STENCIL8_OES;
        mActualFormat = mDepthStencil->getActualFormat();
        mSamples = mDepthStencil->getSamples();
    }
    
    DepthStencilbuffer::~DepthStencilbuffer()
    {
        if (mDepthStencil)
        {
            delete mDepthStencil;
        }
    }
    
    rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
    {
        return mDepthStencil;
    }
    
    Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
    {
        if (mDepthStencil)
        {
            mInternalFormat = GL_DEPTH_COMPONENT16;   // If the renderbuffer parameters are queried, the calling function
                                                      // will expect one of the valid renderbuffer formats for use in 
                                                      // glRenderbufferStorage
        }
    }
    
    Depthbuffer::~Depthbuffer()
    {
    }
    
    Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
    {
        if (mDepthStencil)
        {
            mInternalFormat = GL_STENCIL_INDEX8;   // If the renderbuffer parameters are queried, the calling function
                                                   // will expect one of the valid renderbuffer formats for use in 
                                                   // glRenderbufferStorage
        }
    }
    
    Stencilbuffer::~Stencilbuffer()
    {
    }
    
    }