Home | History | Annotate | Download | only in libGLESv2
      1 #include "precompiled.h"
      2 //
      3 // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
      4 // Use of this source code is governed by a BSD-style license that can be
      5 // found in the LICENSE file.
      6 //
      7 
      8 // Renderbuffer.cpp: the gl::Renderbuffer class and its derived classes
      9 // Colorbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
     10 // objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
     11 
     12 #include "libGLESv2/Renderbuffer.h"
     13 #include "libGLESv2/renderer/RenderTarget.h"
     14 
     15 #include "libGLESv2/Texture.h"
     16 #include "libGLESv2/renderer/Renderer.h"
     17 #include "libGLESv2/renderer/TextureStorage.h"
     18 #include "common/utilities.h"
     19 #include "libGLESv2/formatutils.h"
     20 
     21 namespace gl
     22 {
     23 unsigned int RenderbufferStorage::mCurrentSerial = 1;
     24 
     25 RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerials(1))
     26 {
     27     mWidth = 0;
     28     mHeight = 0;
     29     mInternalFormat = GL_RGBA4;
     30     mActualFormat = GL_RGBA8_OES;
     31     mSamples = 0;
     32 }
     33 
     34 RenderbufferStorage::~RenderbufferStorage()
     35 {
     36 }
     37 
     38 rx::RenderTarget *RenderbufferStorage::getRenderTarget()
     39 {
     40     return NULL;
     41 }
     42 
     43 rx::RenderTarget *RenderbufferStorage::getDepthStencil()
     44 {
     45     return NULL;
     46 }
     47 
     48 rx::TextureStorage *RenderbufferStorage::getTextureStorage()
     49 {
     50     return NULL;
     51 }
     52 
     53 GLsizei RenderbufferStorage::getWidth() const
     54 {
     55     return mWidth;
     56 }
     57 
     58 GLsizei RenderbufferStorage::getHeight() const
     59 {
     60     return mHeight;
     61 }
     62 
     63 GLenum RenderbufferStorage::getInternalFormat() const
     64 {
     65     return mInternalFormat;
     66 }
     67 
     68 GLenum RenderbufferStorage::getActualFormat() const
     69 {
     70     return mActualFormat;
     71 }
     72 
     73 GLsizei RenderbufferStorage::getSamples() const
     74 {
     75     return mSamples;
     76 }
     77 
     78 unsigned int RenderbufferStorage::getSerial() const
     79 {
     80     return mSerial;
     81 }
     82 
     83 unsigned int RenderbufferStorage::issueSerials(GLuint count)
     84 {
     85     unsigned int firstSerial = mCurrentSerial;
     86     mCurrentSerial += count;
     87     return firstSerial;
     88 }
     89 
     90 bool RenderbufferStorage::isTexture() const
     91 {
     92     return false;
     93 }
     94 
     95 unsigned int RenderbufferStorage::getTextureSerial() const
     96 {
     97     return -1;
     98 }
     99 
    100 Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
    101 {
    102     mRenderTarget = renderer->createRenderTarget(swapChain, false);
    103 
    104     if (mRenderTarget)
    105     {
    106         mWidth = mRenderTarget->getWidth();
    107         mHeight = mRenderTarget->getHeight();
    108         mInternalFormat = mRenderTarget->getInternalFormat();
    109         mActualFormat = mRenderTarget->getActualFormat();
    110         mSamples = mRenderTarget->getSamples();
    111     }
    112 }
    113 
    114 Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
    115 {
    116     mRenderTarget = renderer->createRenderTarget(width, height, format, samples);
    117 
    118     if (mRenderTarget)
    119     {
    120         mWidth = width;
    121         mHeight = height;
    122         mInternalFormat = format;
    123         mActualFormat = mRenderTarget->getActualFormat();
    124         mSamples = mRenderTarget->getSamples();
    125     }
    126 }
    127 
    128 Colorbuffer::~Colorbuffer()
    129 {
    130     if (mRenderTarget)
    131     {
    132         delete mRenderTarget;
    133     }
    134 }
    135 
    136 rx::RenderTarget *Colorbuffer::getRenderTarget()
    137 {
    138     return mRenderTarget;
    139 }
    140 
    141 DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
    142 {
    143     mDepthStencil = renderer->createRenderTarget(swapChain, true);
    144     if (mDepthStencil)
    145     {
    146         mWidth = mDepthStencil->getWidth();
    147         mHeight = mDepthStencil->getHeight();
    148         mInternalFormat = mDepthStencil->getInternalFormat();
    149         mSamples = mDepthStencil->getSamples();
    150         mActualFormat = mDepthStencil->getActualFormat();
    151     }
    152 }
    153 
    154 DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
    155 {
    156 
    157     mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples);
    158 
    159     mWidth = mDepthStencil->getWidth();
    160     mHeight = mDepthStencil->getHeight();
    161     mInternalFormat = GL_DEPTH24_STENCIL8_OES;
    162     mActualFormat = mDepthStencil->getActualFormat();
    163     mSamples = mDepthStencil->getSamples();
    164 }
    165 
    166 DepthStencilbuffer::~DepthStencilbuffer()
    167 {
    168     if (mDepthStencil)
    169     {
    170         delete mDepthStencil;
    171     }
    172 }
    173 
    174 rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
    175 {
    176     return mDepthStencil;
    177 }
    178 
    179 Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
    180 {
    181     if (mDepthStencil)
    182     {
    183         mInternalFormat = GL_DEPTH_COMPONENT16;   // If the renderbuffer parameters are queried, the calling function
    184                                                   // will expect one of the valid renderbuffer formats for use in
    185                                                   // glRenderbufferStorage
    186     }
    187 }
    188 
    189 Depthbuffer::~Depthbuffer()
    190 {
    191 }
    192 
    193 Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
    194 {
    195     if (mDepthStencil)
    196     {
    197         mInternalFormat = GL_STENCIL_INDEX8;   // If the renderbuffer parameters are queried, the calling function
    198                                                // will expect one of the valid renderbuffer formats for use in
    199                                                // glRenderbufferStorage
    200     }
    201 }
    202 
    203 Stencilbuffer::~Stencilbuffer()
    204 {
    205 }
    206 
    207 }
    208