gfx/angle/src/libGLESv2/Buffer.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-2013 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 // Buffer.cpp: Implements the gl::Buffer class, representing storage of vertex and/or
     9 // index data. Implements GL buffer objects and related functionality.
    10 // [OpenGL ES 2.0.24] section 2.9 page 21.
    12 #include "libGLESv2/Buffer.h"
    14 #include "libGLESv2/renderer/VertexBuffer.h"
    15 #include "libGLESv2/renderer/IndexBuffer.h"
    16 #include "libGLESv2/renderer/BufferStorage.h"
    17 #include "libGLESv2/renderer/Renderer.h"
    19 namespace gl
    20 {
    22 Buffer::Buffer(rx::Renderer *renderer, GLuint id) : RefCountObject(id)
    23 {
    24     mRenderer = renderer;
    25     mUsage = GL_DYNAMIC_DRAW;
    27     mBufferStorage = renderer->createBufferStorage();
    28     mStaticVertexBuffer = NULL;
    29     mStaticIndexBuffer = NULL;
    30     mUnmodifiedDataUse = 0;
    31 }
    33 Buffer::~Buffer()
    34 {
    35     delete mBufferStorage;
    36     delete mStaticVertexBuffer;
    37     delete mStaticIndexBuffer;
    38 }
    40 void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage)
    41 {
    42     mBufferStorage->clear();
    43     mIndexRangeCache.clear();
    44     mBufferStorage->setData(data, size, 0);
    46     mUsage = usage;
    48     invalidateStaticData();
    50     if (usage == GL_STATIC_DRAW)
    51     {
    52         mStaticVertexBuffer = new rx::StaticVertexBufferInterface(mRenderer);
    53         mStaticIndexBuffer = new rx::StaticIndexBufferInterface(mRenderer);
    54     }
    55 }
    57 void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset)
    58 {
    59     mBufferStorage->setData(data, size, offset);
    60     mIndexRangeCache.invalidateRange(offset, size);
    62     if ((mStaticVertexBuffer && mStaticVertexBuffer->getBufferSize() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->getBufferSize() != 0))
    63     {
    64         invalidateStaticData();
    65     }
    67     mUnmodifiedDataUse = 0;
    68 }
    70 rx::BufferStorage *Buffer::getStorage() const
    71 {
    72     return mBufferStorage;
    73 }
    75 unsigned int Buffer::size()
    76 {
    77     return mBufferStorage->getSize();
    78 }
    80 GLenum Buffer::usage() const
    81 {
    82     return mUsage;
    83 }
    85 rx::StaticVertexBufferInterface *Buffer::getStaticVertexBuffer()
    86 {
    87     return mStaticVertexBuffer;
    88 }
    90 rx::StaticIndexBufferInterface *Buffer::getStaticIndexBuffer()
    91 {
    92     return mStaticIndexBuffer;
    93 }
    95 void Buffer::invalidateStaticData()
    96 {
    97     delete mStaticVertexBuffer;
    98     mStaticVertexBuffer = NULL;
   100     delete mStaticIndexBuffer;
   101     mStaticIndexBuffer = NULL;
   103     mUnmodifiedDataUse = 0;
   104 }
   106 // Creates static buffers if sufficient used data has been left unmodified
   107 void Buffer::promoteStaticUsage(int dataSize)
   108 {
   109     if (!mStaticVertexBuffer && !mStaticIndexBuffer)
   110     {
   111         mUnmodifiedDataUse += dataSize;
   113         if (mUnmodifiedDataUse > 3 * mBufferStorage->getSize())
   114         {
   115             mStaticVertexBuffer = new rx::StaticVertexBufferInterface(mRenderer);
   116             mStaticIndexBuffer = new rx::StaticIndexBufferInterface(mRenderer);
   117         }
   118     }
   119 }
   121 rx::IndexRangeCache *Buffer::getIndexRangeCache()
   122 {
   123     return &mIndexRangeCache;
   124 }
   126 }

mercurial