Sat, 03 Jan 2015 20:18:00 +0100
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 }