1 /* 2 * Copyright (C) 2011 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 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #include "config.h" 27 28 #if USE(ACCELERATED_COMPOSITING) 29 30 #include "GeometryBinding.h" 31 32 #include "GraphicsContext.h" 33 #include "GraphicsContext3D.h" 34 #include "LayerRendererChromium.h" 35 36 namespace WebCore { 37 38 GeometryBinding::GeometryBinding(GraphicsContext3D* context) 39 : m_context(context) 40 , m_quadVerticesVbo(0) 41 , m_quadElementsVbo(0) 42 , m_initialized(false) 43 { 44 // Vertex positions and texture coordinates for the 4 corners of a 1x1 quad. 45 float vertices[] = { -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 46 -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 47 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 48 0.5f, 0.5f, 0.0f, 1.0f, 1.0f }; 49 uint16_t indices[] = { 0, 1, 2, 0, 2, 3, // The two triangles that make up the layer quad. 50 0, 1, 2, 3}; // A line path for drawing the layer border. 51 52 GLC(m_context, m_quadVerticesVbo = m_context->createBuffer()); 53 GLC(m_context, m_quadElementsVbo = m_context->createBuffer()); 54 GLC(m_context, m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_quadVerticesVbo)); 55 GLC(m_context, m_context->bufferData(GraphicsContext3D::ARRAY_BUFFER, sizeof(vertices), vertices, GraphicsContext3D::STATIC_DRAW)); 56 GLC(m_context, m_context->bindBuffer(GraphicsContext3D::ELEMENT_ARRAY_BUFFER, m_quadElementsVbo)); 57 GLC(m_context, m_context->bufferData(GraphicsContext3D::ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GraphicsContext3D::STATIC_DRAW)); 58 59 m_initialized = true; 60 } 61 62 GeometryBinding::~GeometryBinding() 63 { 64 GLC(m_context, m_context->deleteBuffer(m_quadVerticesVbo)); 65 GLC(m_context, m_context->deleteBuffer(m_quadElementsVbo)); 66 } 67 68 void GeometryBinding::prepareForDraw() 69 { 70 GLC(m_context, m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, quadVerticesVbo())); 71 GLC(m_context, m_context->bindBuffer(GraphicsContext3D::ELEMENT_ARRAY_BUFFER, quadElementsVbo())); 72 unsigned offset = 0; 73 GLC(m_context, m_context->vertexAttribPointer(positionAttribLocation(), 3, GraphicsContext3D::FLOAT, false, 5 * sizeof(float), offset)); 74 offset += 3 * sizeof(float); 75 GLC(m_context, m_context->vertexAttribPointer(texCoordAttribLocation(), 2, GraphicsContext3D::FLOAT, false, 5 * sizeof(float), offset)); 76 GLC(m_context, m_context->enableVertexAttribArray(positionAttribLocation())); 77 GLC(m_context, m_context->enableVertexAttribArray(texCoordAttribLocation())); 78 } 79 80 } // namespace WebCore 81 82 #endif // USE(ACCELERATED_COMPOSITING) 83