gfx/angle/src/libGLESv2/Renderbuffer.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     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 //
     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.
    12 #include "libGLESv2/Renderbuffer.h"
    13 #include "libGLESv2/renderer/RenderTarget.h"
    15 #include "libGLESv2/Texture.h"
    16 #include "libGLESv2/renderer/Renderer.h"
    17 #include "libGLESv2/utilities.h"
    19 namespace gl
    20 {
    21 unsigned int RenderbufferStorage::mCurrentSerial = 1;
    23 RenderbufferInterface::RenderbufferInterface()
    24 {
    25 }
    27 // The default case for classes inherited from RenderbufferInterface is not to
    28 // need to do anything upon the reference count to the parent Renderbuffer incrementing
    29 // or decrementing. 
    30 void RenderbufferInterface::addProxyRef(const Renderbuffer *proxy)
    31 {
    32 }
    34 void RenderbufferInterface::releaseProxy(const Renderbuffer *proxy)
    35 {
    36 }
    38 GLuint RenderbufferInterface::getRedSize() const
    39 {
    40     return gl::GetRedSize(getActualFormat());
    41 }
    43 GLuint RenderbufferInterface::getGreenSize() const
    44 {
    45     return gl::GetGreenSize(getActualFormat());
    46 }
    48 GLuint RenderbufferInterface::getBlueSize() const
    49 {
    50     return gl::GetBlueSize(getActualFormat());
    51 }
    53 GLuint RenderbufferInterface::getAlphaSize() const
    54 {
    55     return gl::GetAlphaSize(getActualFormat());
    56 }
    58 GLuint RenderbufferInterface::getDepthSize() const
    59 {
    60     return gl::GetDepthSize(getActualFormat());
    61 }
    63 GLuint RenderbufferInterface::getStencilSize() const
    64 {
    65     return gl::GetStencilSize(getActualFormat());
    66 }
    68 ///// RenderbufferTexture2D Implementation ////////
    70 RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLenum target) : mTarget(target)
    71 {
    72     mTexture2D.set(texture);
    73 }
    75 RenderbufferTexture2D::~RenderbufferTexture2D()
    76 {
    77     mTexture2D.set(NULL);
    78 }
    80 // Textures need to maintain their own reference count for references via
    81 // Renderbuffers acting as proxies. Here, we notify the texture of a reference.
    82 void RenderbufferTexture2D::addProxyRef(const Renderbuffer *proxy)
    83 {
    84     mTexture2D->addProxyRef(proxy);
    85 }
    87 void RenderbufferTexture2D::releaseProxy(const Renderbuffer *proxy)
    88 {
    89     mTexture2D->releaseProxy(proxy);
    90 }
    92 rx::RenderTarget *RenderbufferTexture2D::getRenderTarget()
    93 {
    94     return mTexture2D->getRenderTarget(mTarget);
    95 }
    97 rx::RenderTarget *RenderbufferTexture2D::getDepthStencil()
    98 {
    99     return mTexture2D->getDepthStencil(mTarget);
   100 }
   102 GLsizei RenderbufferTexture2D::getWidth() const
   103 {
   104     return mTexture2D->getWidth(0);
   105 }
   107 GLsizei RenderbufferTexture2D::getHeight() const
   108 {
   109     return mTexture2D->getHeight(0);
   110 }
   112 GLenum RenderbufferTexture2D::getInternalFormat() const
   113 {
   114     return mTexture2D->getInternalFormat(0);
   115 }
   117 GLenum RenderbufferTexture2D::getActualFormat() const
   118 {
   119     return mTexture2D->getActualFormat(0);
   120 }
   122 GLsizei RenderbufferTexture2D::getSamples() const
   123 {
   124     return 0;
   125 }
   127 unsigned int RenderbufferTexture2D::getSerial() const
   128 {
   129     return mTexture2D->getRenderTargetSerial(mTarget);
   130 }
   132 ///// RenderbufferTextureCubeMap Implementation ////////
   134 RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
   135 {
   136     mTextureCubeMap.set(texture);
   137 }
   139 RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap()
   140 {
   141     mTextureCubeMap.set(NULL);
   142 }
   144 // Textures need to maintain their own reference count for references via
   145 // Renderbuffers acting as proxies. Here, we notify the texture of a reference.
   146 void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
   147 {
   148     mTextureCubeMap->addProxyRef(proxy);
   149 }
   151 void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
   152 {
   153     mTextureCubeMap->releaseProxy(proxy);
   154 }
   156 rx::RenderTarget *RenderbufferTextureCubeMap::getRenderTarget()
   157 {
   158     return mTextureCubeMap->getRenderTarget(mTarget);
   159 }
   161 rx::RenderTarget *RenderbufferTextureCubeMap::getDepthStencil()
   162 {
   163     return NULL;
   164 }
   166 GLsizei RenderbufferTextureCubeMap::getWidth() const
   167 {
   168     return mTextureCubeMap->getWidth(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
   169 }
   171 GLsizei RenderbufferTextureCubeMap::getHeight() const
   172 {
   173     return mTextureCubeMap->getHeight(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
   174 }
   176 GLenum RenderbufferTextureCubeMap::getInternalFormat() const
   177 {
   178     return mTextureCubeMap->getInternalFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
   179 }
   181 GLenum RenderbufferTextureCubeMap::getActualFormat() const
   182 {
   183     return mTextureCubeMap->getActualFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
   184 }
   186 GLsizei RenderbufferTextureCubeMap::getSamples() const
   187 {
   188     return 0;
   189 }
   191 unsigned int RenderbufferTextureCubeMap::getSerial() const
   192 {
   193     return mTextureCubeMap->getRenderTargetSerial(mTarget);
   194 }
   196 ////// Renderbuffer Implementation //////
   198 Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
   199 {
   200     ASSERT(instance != NULL);
   201     mInstance = instance;
   202 }
   204 Renderbuffer::~Renderbuffer()
   205 {
   206     delete mInstance;
   207 }
   209 // The RenderbufferInterface contained in this Renderbuffer may need to maintain
   210 // its own reference count, so we pass it on here.
   211 void Renderbuffer::addRef() const
   212 {
   213     mInstance->addProxyRef(this);
   215     RefCountObject::addRef();
   216 }
   218 void Renderbuffer::release() const
   219 {
   220     mInstance->releaseProxy(this);
   222     RefCountObject::release();
   223 }
   225 rx::RenderTarget *Renderbuffer::getRenderTarget()
   226 {
   227     return mInstance->getRenderTarget();
   228 }
   230 rx::RenderTarget *Renderbuffer::getDepthStencil()
   231 {
   232     return mInstance->getDepthStencil();
   233 }
   235 GLsizei Renderbuffer::getWidth() const
   236 {
   237     return mInstance->getWidth();
   238 }
   240 GLsizei Renderbuffer::getHeight() const
   241 {
   242     return mInstance->getHeight();
   243 }
   245 GLenum Renderbuffer::getInternalFormat() const
   246 {
   247     return mInstance->getInternalFormat();
   248 }
   250 GLenum Renderbuffer::getActualFormat() const
   251 {
   252     return mInstance->getActualFormat();
   253 }
   255 GLuint Renderbuffer::getRedSize() const
   256 {
   257     return mInstance->getRedSize();
   258 }
   260 GLuint Renderbuffer::getGreenSize() const
   261 {
   262     return mInstance->getGreenSize();
   263 }
   265 GLuint Renderbuffer::getBlueSize() const
   266 {
   267     return mInstance->getBlueSize();
   268 }
   270 GLuint Renderbuffer::getAlphaSize() const
   271 {
   272     return mInstance->getAlphaSize();
   273 }
   275 GLuint Renderbuffer::getDepthSize() const
   276 {
   277     return mInstance->getDepthSize();
   278 }
   280 GLuint Renderbuffer::getStencilSize() const
   281 {
   282     return mInstance->getStencilSize();
   283 }
   285 GLsizei Renderbuffer::getSamples() const
   286 {
   287     return mInstance->getSamples();
   288 }
   290 unsigned int Renderbuffer::getSerial() const
   291 {
   292     return mInstance->getSerial();
   293 }
   295 void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
   296 {
   297     ASSERT(newStorage != NULL);
   299     delete mInstance;
   300     mInstance = newStorage;
   301 }
   303 RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerial())
   304 {
   305     mWidth = 0;
   306     mHeight = 0;
   307     mInternalFormat = GL_RGBA4;
   308     mActualFormat = GL_RGBA8_OES;
   309     mSamples = 0;
   310 }
   312 RenderbufferStorage::~RenderbufferStorage()
   313 {
   314 }
   316 rx::RenderTarget *RenderbufferStorage::getRenderTarget()
   317 {
   318     return NULL;
   319 }
   321 rx::RenderTarget *RenderbufferStorage::getDepthStencil()
   322 {
   323     return NULL;
   324 }
   326 GLsizei RenderbufferStorage::getWidth() const
   327 {
   328     return mWidth;
   329 }
   331 GLsizei RenderbufferStorage::getHeight() const
   332 {
   333     return mHeight;
   334 }
   336 GLenum RenderbufferStorage::getInternalFormat() const
   337 {
   338     return mInternalFormat;
   339 }
   341 GLenum RenderbufferStorage::getActualFormat() const
   342 {
   343     return mActualFormat;
   344 }
   346 GLsizei RenderbufferStorage::getSamples() const
   347 {
   348     return mSamples;
   349 }
   351 unsigned int RenderbufferStorage::getSerial() const
   352 {
   353     return mSerial;
   354 }
   356 unsigned int RenderbufferStorage::issueSerial()
   357 {
   358     return mCurrentSerial++;
   359 }
   361 unsigned int RenderbufferStorage::issueCubeSerials()
   362 {
   363     unsigned int firstSerial = mCurrentSerial;
   364     mCurrentSerial += 6;
   365     return firstSerial;
   366 }
   368 Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
   369 {
   370     mRenderTarget = renderer->createRenderTarget(swapChain, false); 
   372     if (mRenderTarget)
   373     {
   374         mWidth = mRenderTarget->getWidth();
   375         mHeight = mRenderTarget->getHeight();
   376         mInternalFormat = mRenderTarget->getInternalFormat();
   377         mActualFormat = mRenderTarget->getActualFormat();
   378         mSamples = mRenderTarget->getSamples();
   379     }
   380 }
   382 Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
   383 {
   384     mRenderTarget = renderer->createRenderTarget(width, height, format, samples, false);
   386     if (mRenderTarget)
   387     {
   388         mWidth = width;
   389         mHeight = height;
   390         mInternalFormat = format;
   391         mActualFormat = mRenderTarget->getActualFormat();
   392         mSamples = mRenderTarget->getSamples();
   393     }
   394 }
   396 Colorbuffer::~Colorbuffer()
   397 {
   398     if (mRenderTarget)
   399     {
   400         delete mRenderTarget;
   401     }
   402 }
   404 rx::RenderTarget *Colorbuffer::getRenderTarget()
   405 {
   406     if (mRenderTarget)
   407     {
   408         return mRenderTarget;
   409     }
   411     return NULL;
   412 }
   414 DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
   415 {
   416     mDepthStencil = renderer->createRenderTarget(swapChain, true);
   417     if (mDepthStencil)
   418     {
   419         mWidth = mDepthStencil->getWidth();
   420         mHeight = mDepthStencil->getHeight();
   421         mInternalFormat = mDepthStencil->getInternalFormat();
   422         mSamples = mDepthStencil->getSamples();
   423         mActualFormat = mDepthStencil->getActualFormat();
   424     }
   425 }
   427 DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
   428 {
   430     mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples, true);
   432     mWidth = mDepthStencil->getWidth();
   433     mHeight = mDepthStencil->getHeight();
   434     mInternalFormat = GL_DEPTH24_STENCIL8_OES;
   435     mActualFormat = mDepthStencil->getActualFormat();
   436     mSamples = mDepthStencil->getSamples();
   437 }
   439 DepthStencilbuffer::~DepthStencilbuffer()
   440 {
   441     if (mDepthStencil)
   442     {
   443         delete mDepthStencil;
   444     }
   445 }
   447 rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
   448 {
   449     if (mDepthStencil)
   450     {
   451         return mDepthStencil;
   452     }
   454     return NULL;
   455 }
   457 Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
   458 {
   459     if (mDepthStencil)
   460     {
   461         mInternalFormat = GL_DEPTH_COMPONENT16;   // If the renderbuffer parameters are queried, the calling function
   462                                                   // will expect one of the valid renderbuffer formats for use in 
   463                                                   // glRenderbufferStorage
   464     }
   465 }
   467 Depthbuffer::~Depthbuffer()
   468 {
   469 }
   471 Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
   472 {
   473     if (mDepthStencil)
   474     {
   475         mInternalFormat = GL_STENCIL_INDEX8;   // If the renderbuffer parameters are queried, the calling function
   476                                                // will expect one of the valid renderbuffer formats for use in 
   477                                                // glRenderbufferStorage
   478     }
   479 }
   481 Stencilbuffer::~Stencilbuffer()
   482 {
   483 }
   485 }

mercurial