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