am 81bd735a: Merge "Require minimum 4 bit stencil for layers." into mnc-dev

* commit '81bd735a010771ab502dabe7ef4d20ea520cf6ac':
  Require minimum 4 bit stencil for layers.
This commit is contained in:
Chris Craik
2015-04-29 20:21:44 +00:00
committed by Android Git Automerger
3 changed files with 11 additions and 9 deletions

View File

@@ -1262,7 +1262,7 @@ void OpenGLRenderer::attachStencilBufferToLayer(Layer* layer) {
endTiling(); endTiling();
RenderBuffer* buffer = mCaches.renderBufferCache.get( RenderBuffer* buffer = mCaches.renderBufferCache.get(
Stencil::getSmallestStencilFormat(), Stencil::getLayerStencilFormat(),
layer->getWidth(), layer->getHeight()); layer->getWidth(), layer->getHeight());
layer->setStencilRenderBuffer(buffer); layer->setStencilRenderBuffer(buffer);

View File

@@ -42,12 +42,17 @@ uint8_t Stencil::getStencilSize() {
return STENCIL_BUFFER_SIZE; return STENCIL_BUFFER_SIZE;
} }
GLenum Stencil::getSmallestStencilFormat() { /**
* This method will return either GL_STENCIL_INDEX4_OES if supported,
* GL_STENCIL_INDEX8 if not.
*
* Layers can't use a single bit stencil because multi-rect ClipArea needs a high enough
* stencil resolution to represent the summation of multiple intersecting rect geometries.
*/
GLenum Stencil::getLayerStencilFormat() {
#if !DEBUG_STENCIL #if !DEBUG_STENCIL
const Extensions& extensions = Caches::getInstance().extensions(); const Extensions& extensions = Caches::getInstance().extensions();
if (extensions.has1BitStencil()) { if (extensions.has4BitStencil()) {
return GL_STENCIL_INDEX1_OES;
} else if (extensions.has4BitStencil()) {
return GL_STENCIL_INDEX4_OES; return GL_STENCIL_INDEX4_OES;
} }
#endif #endif

View File

@@ -42,10 +42,7 @@ public:
*/ */
ANDROID_API static uint8_t getStencilSize(); ANDROID_API static uint8_t getStencilSize();
/** static GLenum getLayerStencilFormat();
* Returns the smallest stencil format accepted by render buffers.
*/
static GLenum getSmallestStencilFormat();
/** /**
* Clears the stencil buffer. * Clears the stencil buffer.