15abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick/* 25abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * Copyright (c) 2010, Google Inc. All rights reserved. 35abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * 45abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * Redistribution and use in source and binary forms, with or without 55abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * modification, are permitted provided that the following conditions are 65abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * met: 75abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * 85abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * * Redistributions of source code must retain the above copyright 95abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * notice, this list of conditions and the following disclaimer. 105abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * * Redistributions in binary form must reproduce the above 115abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * copyright notice, this list of conditions and the following disclaimer 125abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * in the documentation and/or other materials provided with the 135abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * distribution. 145abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * * Neither the name of Google Inc. nor the names of its 155abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * contributors may be used to endorse or promote products derived from 165abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * this software without specific prior written permission. 175abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * 185abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick */ 305abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "config.h" 325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 335abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "DrawingBuffer.h" 345abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 3528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "Extensions3DChromium.h" 365abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "GraphicsContext3D.h" 375abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "SharedGraphicsContext3D.h" 385abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(SKIA_GPU) 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "GrContext.h" 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 435abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if USE(ACCELERATED_COMPOSITING) 445abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "Canvas2DLayerChromium.h" 455abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 475abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merricknamespace WebCore { 485abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 495abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickstruct DrawingBufferInternal { 505abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick unsigned offscreenColorTexture; 515abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if USE(ACCELERATED_COMPOSITING) 525abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick RefPtr<Canvas2DLayerChromium> platformLayer; 535abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 545abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}; 555abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochstatic unsigned generateColorTexture(GraphicsContext3D* context, const IntSize& size) 575abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 585abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick unsigned offscreenColorTexture = context->createTexture(); 595abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (!offscreenColorTexture) 605abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return 0; 615abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 625abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick context->bindTexture(GraphicsContext3D::TEXTURE_2D, offscreenColorTexture); 635abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::NEAREST); 645abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::NEAREST); 655abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE); 665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE); 67f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch context->texImage2DResourceSafe(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, size.width(), size.height(), 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE); 685abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, offscreenColorTexture, 0); 695abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 705abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return offscreenColorTexture; 715abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 725abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 735abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochDrawingBuffer::DrawingBuffer(GraphicsContext3D* context, 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch const IntSize& size, 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool multisampleExtensionSupported, 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool packedDepthStencilExtensionSupported) 785abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick : m_context(context) 792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_size(-1, -1) 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_multisampleExtensionSupported(multisampleExtensionSupported) 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_packedDepthStencilExtensionSupported(packedDepthStencilExtensionSupported) 8228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , m_fbo(0) 836b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , m_colorBuffer(0) 846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , m_depthStencilBuffer(0) 85ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch , m_depthBuffer(0) 86ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch , m_stencilBuffer(0) 876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , m_multisampleFBO(0) 886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , m_multisampleColorBuffer(0) 895abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick , m_internal(new DrawingBufferInternal) 902bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(SKIA_GPU) 912bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_grContext(0) 922bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 935abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 9428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (!m_context->getExtensions()->supports("GL_CHROMIUM_copy_texture_to_parent_texture")) { 9528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu m_context.clear(); 9628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return; 9728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 9828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu m_fbo = context->createFramebuffer(); 99a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo); 1006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_colorBuffer = generateColorTexture(context, size); 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch createSecondaryBuffers(); 102ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch reset(size); 1035abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 1045abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 1055abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickDrawingBuffer::~DrawingBuffer() 1065abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1075abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if USE(ACCELERATED_COMPOSITING) 1085abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (m_internal->platformLayer) 1095abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick m_internal->platformLayer->setDrawingBuffer(0); 1105abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 111a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 112a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!m_context) 113a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 114a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 115a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo); 1166b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_context->deleteTexture(m_colorBuffer); 117a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 118a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch clear(); 1195abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 1205abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 1215abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if USE(ACCELERATED_COMPOSITING) 1225abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickvoid DrawingBuffer::publishToPlatformLayer() 1235abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 124a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!m_context) 125a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 126a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1275abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (m_callback) 1285abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick m_callback->willPublish(); 1292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (multisample()) 1302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block commit(); 1315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick unsigned parentTexture = m_internal->platformLayer->textureId(); 1325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // FIXME: We do the copy in the canvas' (child) context so that it executes in the correct order relative to 1335abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // other commands in the child context. This ensures that the parent texture always contains a complete 1345abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // frame and not some intermediate result. However, there is no synchronization to ensure that this copy 1355abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // happens before the compositor draws. This means we might draw stale frames sometimes. Ideally this 1365abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // would insert a fence into the child command stream that the compositor could wait for. 1375abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick m_context->makeContextCurrent(); 1382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(SKIA_GPU) 1392bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_grContext) 1402bde8e466a4451c7319e3a072d118917957d6554Steve Block m_grContext->flush(0); 1412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 1426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner static_cast<Extensions3DChromium*>(m_context->getExtensions())->copyTextureToParentTextureCHROMIUM(m_colorBuffer, parentTexture); 14368513a70bcd92384395513322f1b801e7bf9c729Steve Block m_context->flush(); 1445abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 1455abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 1465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 1476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervoid DrawingBuffer::didReset() 1485abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1495abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if USE(ACCELERATED_COMPOSITING) 1505abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (m_internal->platformLayer) 1515abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick m_internal->platformLayer->setTextureChanged(); 1525abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 1535abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 1545abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 1555abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if USE(ACCELERATED_COMPOSITING) 1565abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickPlatformLayer* DrawingBuffer::platformLayer() 1575abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1585abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (!m_internal->platformLayer) 1595abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick m_internal->platformLayer = Canvas2DLayerChromium::create(this, 0); 1605abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return m_internal->platformLayer.get(); 1615abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 1625abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 1635abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 1646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell BrennerPlatform3DObject DrawingBuffer::platformColorBuffer() const 1655abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1666b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return m_colorBuffer; 1675abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 1685abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 1692bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(SKIA_GPU) 1702bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid DrawingBuffer::setGrContext(GrContext* context) 1712bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1722bde8e466a4451c7319e3a072d118917957d6554Steve Block // We just take a ptr without referencing it, as we require that we never outlive 1732bde8e466a4451c7319e3a072d118917957d6554Steve Block // the SharedGraphicsContext3D object that is giving us the context. 1742bde8e466a4451c7319e3a072d118917957d6554Steve Block m_grContext = context; 1752bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid DrawingBuffer::getGrPlatformSurfaceDesc(GrPlatformSurfaceDesc* desc) 1782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 1792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fSurfaceType = kTextureRenderTarget_GrPlatformSurfaceType; 1802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fPlatformTexture = m_colorBuffer; 1822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (multisample()) { 1832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fRenderTargetFlags = kIsMultisampled_GrPlatformRenderTargetFlagBit | kGrCanResolve_GrPlatformRenderTargetFlagBit; 1842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fPlatformRenderTarget = m_multisampleFBO; 1852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fPlatformResolveDestination = m_fbo; 1862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } else { 1872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fRenderTargetFlags = kNone_GrPlatformRenderTargetFlagBit; 1882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fPlatformRenderTarget = m_fbo; 1892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fPlatformResolveDestination = 0; 1902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 1912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fWidth = m_size.width(); 1932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fHeight = m_size.height(); 1942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fConfig = kRGBA_8888_GrPixelConfig; 1952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch desc->fStencilBits = (m_depthStencilBuffer || m_stencilBuffer) ? 8 : 0; 1972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 1982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1992bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 2002bde8e466a4451c7319e3a072d118917957d6554Steve Block 2015abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 202