From 6da26dc4bc46400cd0302b698a3f85a702901665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 7 Dec 2011 21:40:41 +0100 Subject: [PATCH] Added Cube primitive. --- src/Primitives/CMakeLists.txt | 1 + src/Primitives/Cube.cpp | 56 +++++++++++++++++++++++++++++++++++ src/Primitives/Cube.h | 42 ++++++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 src/Primitives/Cube.cpp create mode 100644 src/Primitives/Cube.h diff --git a/src/Primitives/CMakeLists.txt b/src/Primitives/CMakeLists.txt index b44294797..f2869e0a7 100644 --- a/src/Primitives/CMakeLists.txt +++ b/src/Primitives/CMakeLists.txt @@ -1,4 +1,5 @@ set(MagnumPrimitives_SRCS + Cube.cpp ) add_library(MagnumPrimitives STATIC ${MagnumPrimitives_SRCS}) diff --git a/src/Primitives/Cube.cpp b/src/Primitives/Cube.cpp new file mode 100644 index 000000000..81faad0dc --- /dev/null +++ b/src/Primitives/Cube.cpp @@ -0,0 +1,56 @@ +/* + Copyright © 2010, 2011 Vladimír Vondruš + + This file is part of Magnum. + + Magnum is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + Magnum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License version 3 for more details. +*/ + +#include "Cube.h" + +#include "Buffer.h" +#include "IndexedMesh.h" + +namespace Magnum { namespace Primitives { + +const Vector4 Cube::_vertices[] = { + Vector4(-1.0f, -1.0f, -1.0f), + Vector4( 1.0f, -1.0f, -1.0f), + Vector4(-1.0f, 1.0f, -1.0f), + Vector4( 1.0f, 1.0f, -1.0f), + Vector4(-1.0f, -1.0f, 1.0f), + Vector4( 1.0f, -1.0f, 1.0f), + Vector4(-1.0f, 1.0f, 1.0f), + Vector4( 1.0f, 1.0f, 1.0f) +}; + +const GLubyte Cube::_indices[] = { + 0, 1, 2, + 2, 1, 3, + 1, 5, 3, + 3, 5, 7, + 5, 4, 7, + 7, 4, 6, + 4, 0, 6, + 6, 0, 2, + 2, 3, 7, + 2, 7, 6, + 4, 5, 1, + 4, 1, 0 +}; + +void Cube::build(IndexedMesh* mesh, Buffer* vertexBuffer) { + prepareMesh(mesh); + + vertexBuffer->setData(sizeof(_vertices), _vertices, Buffer::DrawStatic); + mesh->indexBuffer()->setData(sizeof(_indices), _indices, Buffer::DrawStatic); +} + +}} diff --git a/src/Primitives/Cube.h b/src/Primitives/Cube.h new file mode 100644 index 000000000..181859895 --- /dev/null +++ b/src/Primitives/Cube.h @@ -0,0 +1,42 @@ +#ifndef Magnum_Primitives_Cube_h +#define Magnum_Primitives_Cube_h +/* + Copyright © 2010, 2011 Vladimír Vondruš + + This file is part of Magnum. + + Magnum is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + Magnum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License version 3 for more details. +*/ + +/** @file + * @brief Class Magnum::Primitives::Cube + */ + +#include "AbstractPrimitive.h" + +namespace Magnum { namespace Primitives { + +/** @brief Cube primitive */ +class Cube: public AbstractPrimitive { + public: + inline Mesh::Primitive primitive() const { return Mesh::Triangles; } + inline size_t vertexCount() const { return 8; } + inline size_t indexCount() const { return 36; } + + void build(IndexedMesh* mesh, Buffer* vertexBuffer); + + private: + static const Vector4 _vertices[]; + static const IndexType _indices[]; +}; + +}} + +#endif