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-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 }