| /* |
| * Copyright 2017 Google Inc. All Rights Reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef COBALT_RENDERER_RASTERIZER_SKIA_HARDWARE_MESH_H_ |
| #define COBALT_RENDERER_RASTERIZER_SKIA_HARDWARE_MESH_H_ |
| |
| #include <vector> |
| |
| #include "base/threading/thread_checker.h" |
| #include "cobalt/render_tree/resource_provider.h" |
| #include "cobalt/renderer/rasterizer/skia/vertex_buffer_object.h" |
| #include "third_party/glm/glm/vec2.hpp" |
| #include "third_party/glm/glm/vec3.hpp" |
| |
| namespace cobalt { |
| namespace renderer { |
| namespace rasterizer { |
| namespace skia { |
| |
| class HardwareMesh : public render_tree::Mesh { |
| public: |
| HardwareMesh(scoped_ptr<std::vector<render_tree::Mesh::Vertex> > vertices, |
| DrawMode draw_mode) |
| : vertices_(vertices.Pass()), draw_mode_(CheckDrawMode(draw_mode)) { |
| DCHECK(vertices_); |
| thread_checker_.DetachFromThread(); |
| } |
| |
| uint32 GetEstimatedSizeInBytes() const OVERRIDE; |
| |
| // Obtains a vertex buffer object from this mesh. Called right before first |
| // rendering it so that the graphics context has already been made current. |
| const VertexBufferObject* GetVBO() const; |
| |
| private: |
| static GLenum CheckDrawMode(DrawMode mode) { |
| switch (mode) { |
| case kDrawModeTriangles: |
| return GL_TRIANGLES; |
| case kDrawModeTriangleStrip: |
| return GL_TRIANGLE_STRIP; |
| case kDrawModeTriangleFan: |
| return GL_TRIANGLE_FAN; |
| default: |
| NOTREACHED() << "Unsupported Mesh DrawMode detected, " |
| "defaulting to GL_TRIANGLE_STRIP"; |
| return GL_TRIANGLE_STRIP; |
| } |
| } |
| |
| // Logically the mesh is the same, but internally upon fetching the VBO, |
| // the vertex list has been copied from CPU to GPU memory. |
| mutable scoped_ptr<std::vector<render_tree::Mesh::Vertex> > vertices_; |
| mutable scoped_ptr<VertexBufferObject> vbo_; |
| const GLenum draw_mode_; |
| |
| base::ThreadChecker thread_checker_; |
| }; |
| |
| } // namespace skia |
| } // namespace rasterizer |
| } // namespace renderer |
| } // namespace cobalt |
| |
| #endif // COBALT_RENDERER_RASTERIZER_SKIA_HARDWARE_MESH_H_ |