Home | History | Annotate | Download | only in custom
      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