181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch/* 281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2011 Google Inc. All rights reserved. 381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Redistribution and use in source and binary forms, with or without 581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * modification, are permitted provided that the following conditions 681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * are met: 781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 1. Redistributions of source code must retain the above copyright 981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * notice, this list of conditions and the following disclaimer. 1081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * notice, this list of conditions and the following disclaimer in the 1281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * documentation and/or other materials provided with the distribution. 1381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 1481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 1581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 1881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 1981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 2081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 2181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch */ 2581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 2681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "config.h" 2781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 2881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(ACCELERATED_COMPOSITING) 2981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "GeometryBinding.h" 3181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "GraphicsContext.h" 3381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "GraphicsContext3D.h" 3481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "LayerRendererChromium.h" 3581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochnamespace WebCore { 3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochGeometryBinding::GeometryBinding(GraphicsContext3D* context) 3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch : m_context(context) 4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_quadVerticesVbo(0) 4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_quadElementsVbo(0) 4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_initialized(false) 4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Vertex positions and texture coordinates for the 4 corners of a 1x1 quad. 4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch float vertices[] = { -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 0.5f, 0.5f, 0.0f, 1.0f, 1.0f }; 4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch uint16_t indices[] = { 0, 1, 2, 0, 2, 3, // The two triangles that make up the layer quad. 5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 0, 1, 2, 3}; // A line path for drawing the layer border. 5181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_quadVerticesVbo = m_context->createBuffer()); 5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_quadElementsVbo = m_context->createBuffer()); 5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_quadVerticesVbo)); 5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->bufferData(GraphicsContext3D::ARRAY_BUFFER, sizeof(vertices), vertices, GraphicsContext3D::STATIC_DRAW)); 5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->bindBuffer(GraphicsContext3D::ELEMENT_ARRAY_BUFFER, m_quadElementsVbo)); 5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->bufferData(GraphicsContext3D::ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GraphicsContext3D::STATIC_DRAW)); 5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_initialized = true; 6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochGeometryBinding::~GeometryBinding() 6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->deleteBuffer(m_quadVerticesVbo)); 6581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->deleteBuffer(m_quadElementsVbo)); 6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 6881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid GeometryBinding::prepareForDraw() 6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, quadVerticesVbo())); 7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->bindBuffer(GraphicsContext3D::ELEMENT_ARRAY_BUFFER, quadElementsVbo())); 7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch unsigned offset = 0; 7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->vertexAttribPointer(positionAttribLocation(), 3, GraphicsContext3D::FLOAT, false, 5 * sizeof(float), offset)); 7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch offset += 3 * sizeof(float); 7581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->vertexAttribPointer(texCoordAttribLocation(), 2, GraphicsContext3D::FLOAT, false, 5 * sizeof(float), offset)); 7681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->enableVertexAttribArray(positionAttribLocation())); 7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch GLC(m_context, m_context->enableVertexAttribArray(texCoordAttribLocation())); 7881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 8081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} // namespace WebCore 8181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 8281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif // USE(ACCELERATED_COMPOSITING) 83