1 /* 2 * Copyright (C) 2011 Adobe Systems Incorporated. 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 9 * copyright notice, this list of conditions and the following 10 * disclaimer. 11 * 2. Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following 13 * disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AS IS AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 21 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 25 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 26 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30 #include "config.h" 31 32 #include "core/platform/graphics/GraphicsContext3D.h" 33 #include "core/platform/graphics/filters/custom/CustomFilterMesh.h" 34 #include "core/platform/graphics/filters/custom/CustomFilterMeshGenerator.h" 35 36 namespace WebCore { 37 38 CustomFilterMesh::CustomFilterMesh(GraphicsContext3D* context, unsigned columns, unsigned rows, 39 const FloatRect& meshBox, CustomFilterMeshType meshType) 40 : m_context(context) 41 , m_verticesBufferObject(0) 42 , m_elementsBufferObject(0) 43 , m_meshBox(meshBox) 44 , m_meshType(meshType) 45 { 46 CustomFilterMeshGenerator generator(columns, rows, meshBox, meshType); 47 m_indicesCount = generator.indicesCount(); 48 m_bytesPerVertex = generator.floatsPerVertex() * sizeof(float); 49 50 m_context->makeContextCurrent(); 51 52 m_verticesBufferObject = m_context->createBuffer(); 53 m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_verticesBufferObject); 54 m_context->bufferData(GraphicsContext3D::ARRAY_BUFFER, generator.vertices().size() * sizeof(float), generator.vertices().data(), GraphicsContext3D::STATIC_DRAW); 55 56 m_elementsBufferObject = m_context->createBuffer(); 57 m_context->bindBuffer(GraphicsContext3D::ELEMENT_ARRAY_BUFFER, m_elementsBufferObject); 58 m_context->bufferData(GraphicsContext3D::ELEMENT_ARRAY_BUFFER, generator.indices().size() * sizeof(uint16_t), generator.indices().data(), GraphicsContext3D::STATIC_DRAW); 59 } 60 61 CustomFilterMesh::~CustomFilterMesh() 62 { 63 m_context->makeContextCurrent(); 64 m_context->deleteBuffer(m_verticesBufferObject); 65 m_context->deleteBuffer(m_elementsBufferObject); 66 } 67 68 } // namespace WebCore 69