1f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch/* 2f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Copyright (C) 2010, Google Inc. All rights reserved. 3f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 4f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Redistribution and use in source and binary forms, with or without 5f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * modification, are permitted provided that the following conditions 6f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * are met: 7f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 1. Redistributions of source code must retain the above copyright 8f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * notice, this list of conditions and the following disclaimer. 9f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright 10f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * notice, this list of conditions and the following disclaimer in the 11f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * documentation and/or other materials provided with the distribution. 12f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 13f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 14f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 20f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch */ 24f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 25f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "config.h" 26f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 27f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if USE(ACCELERATED_COMPOSITING) 28f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 29f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "LayerTexture.h" 30f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 31f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "GraphicsContext3D.h" 32f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "TextureManager.h" 33f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 34f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochnamespace WebCore { 35f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 36f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochLayerTexture::LayerTexture(GraphicsContext3D* context, TextureManager* manager) 37f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch : m_context(context) 38f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , m_textureManager(manager) 39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , m_token(0) 40f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , m_format(0) 41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , m_textureId(0) 42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 43f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 44f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 45f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochLayerTexture::~LayerTexture() 46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (m_token) 48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_textureManager->releaseToken(m_token); 49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 50f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool LayerTexture::isValid(const IntSize& size, unsigned format) 52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return m_token && size == m_size && format == m_format && m_textureManager->hasTexture(m_token); 54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 55f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool LayerTexture::reserve(const IntSize& size, unsigned format) 57f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 58f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!m_token) 59f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_token = m_textureManager->getToken(); 60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 61f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (size == m_size && format == m_format && m_textureManager->hasTexture(m_token)) 62f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_textureManager->protectTexture(m_token); 63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else { 64f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_textureId = m_textureManager->requestTexture(m_token, size, format); 65f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (m_textureId) { 66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_size = size; 67f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_format = format; 68f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 69f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 70f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 71f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return m_textureId; 72f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 73f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 74f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid LayerTexture::bindTexture() 75f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(m_textureManager->hasTexture(m_token)); 77f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureId); 78f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 79f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 80f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid LayerTexture::framebufferTexture2D() 81f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 82f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, m_textureId, 0); 83f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 84f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 86f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 87f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif // USE(ACCELERATED_COMPOSITING) 88f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 89