#include "MetaCoreRender/MetaCoreDebugGeometry.h" #include #include namespace MetaCore { namespace { MetaCoreVertex MetaCoreMakeVertex(const glm::vec3& position, const glm::vec3& normal, const glm::vec4& color) { return MetaCoreVertex{position, normal, color}; } } // namespace bool MetaCoreDebugGeometry::Initialize() { std::vector gridVertices; std::vector gridIndices; std::uint32_t gridIndex = 0; constexpr int gridHalfExtent = 10; for (int step = -gridHalfExtent; step <= gridHalfExtent; ++step) { const bool isCenterLine = step == 0; const glm::vec4 lineColor = isCenterLine ? glm::vec4(0.34F, 0.38F, 0.42F, 1.0F) : glm::vec4(0.22F, 0.24F, 0.28F, 1.0F); gridVertices.push_back(MetaCoreMakeVertex(glm::vec3(static_cast(step), 0.0F, -static_cast(gridHalfExtent)), glm::vec3(0.0F), lineColor)); gridVertices.push_back(MetaCoreMakeVertex(glm::vec3(static_cast(step), 0.0F, static_cast(gridHalfExtent)), glm::vec3(0.0F), lineColor)); gridIndices.push_back(gridIndex++); gridIndices.push_back(gridIndex++); gridVertices.push_back(MetaCoreMakeVertex(glm::vec3(-static_cast(gridHalfExtent), 0.0F, static_cast(step)), glm::vec3(0.0F), lineColor)); gridVertices.push_back(MetaCoreMakeVertex(glm::vec3(static_cast(gridHalfExtent), 0.0F, static_cast(step)), glm::vec3(0.0F), lineColor)); gridIndices.push_back(gridIndex++); gridIndices.push_back(gridIndex++); } std::vector axesVertices{ MetaCoreMakeVertex(glm::vec3(0.0F), glm::vec3(0.0F), glm::vec4(0.95F, 0.28F, 0.24F, 1.0F)), MetaCoreMakeVertex(glm::vec3(1.5F, 0.0F, 0.0F), glm::vec3(0.0F), glm::vec4(0.95F, 0.28F, 0.24F, 1.0F)), MetaCoreMakeVertex(glm::vec3(0.0F), glm::vec3(0.0F), glm::vec4(0.30F, 0.78F, 0.32F, 1.0F)), MetaCoreMakeVertex(glm::vec3(0.0F, 1.5F, 0.0F), glm::vec3(0.0F), glm::vec4(0.30F, 0.78F, 0.32F, 1.0F)), MetaCoreMakeVertex(glm::vec3(0.0F), glm::vec3(0.0F), glm::vec4(0.28F, 0.53F, 0.95F, 1.0F)), MetaCoreMakeVertex(glm::vec3(0.0F, 0.0F, 1.5F), glm::vec3(0.0F), glm::vec4(0.28F, 0.53F, 0.95F, 1.0F)) }; std::vector axesIndices{0, 1, 2, 3, 4, 5}; const glm::vec4 cubeColor(1.0F, 1.0F, 1.0F, 1.0F); std::vector cubeVertices{ MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, 0.5F), glm::vec3(0.0F, 0.0F, 1.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, 0.5F), glm::vec3(0.0F, 0.0F, 1.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, 0.5F), glm::vec3(0.0F, 0.0F, 1.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, 0.5F), glm::vec3(0.0F, 0.0F, 1.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, -0.5F), glm::vec3(0.0F, 0.0F, -1.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, -0.5F), glm::vec3(0.0F, 0.0F, -1.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, -0.5F), glm::vec3(0.0F, 0.0F, -1.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, -0.5F), glm::vec3(0.0F, 0.0F, -1.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, 0.5F), glm::vec3(-1.0F, 0.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, -0.5F), glm::vec3(-1.0F, 0.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, -0.5F), glm::vec3(-1.0F, 0.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, 0.5F), glm::vec3(-1.0F, 0.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, 0.5F), glm::vec3(1.0F, 0.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, -0.5F), glm::vec3(1.0F, 0.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, -0.5F), glm::vec3(1.0F, 0.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, 0.5F), glm::vec3(1.0F, 0.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, -0.5F), glm::vec3(0.0F, 1.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, -0.5F), glm::vec3(0.0F, 1.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, 0.5F), glm::vec3(0.0F, 1.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, 0.5F), glm::vec3(0.0F, 1.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, -0.5F), glm::vec3(0.0F, -1.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, -0.5F), glm::vec3(0.0F, -1.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, 0.5F), glm::vec3(0.0F, -1.0F, 0.0F), cubeColor), MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, 0.5F), glm::vec3(0.0F, -1.0F, 0.0F), cubeColor) }; std::vector cubeIndices{ 0, 1, 2, 0, 2, 3, 4, 6, 5, 4, 7, 6, 8, 9, 10, 8, 10, 11, 12, 14, 13, 12, 15, 14, 16, 17, 18, 16, 18, 19, 20, 22, 21, 20, 23, 22 }; return GridMesh_.Build(gridVertices, gridIndices, MetaCorePrimitiveType::Lines) && AxesMesh_.Build(axesVertices, axesIndices, MetaCorePrimitiveType::Lines) && CubeMesh_.Build(cubeVertices, cubeIndices, MetaCorePrimitiveType::Triangles); } void MetaCoreDebugGeometry::Shutdown() { GridMesh_.Shutdown(); AxesMesh_.Shutdown(); CubeMesh_.Shutdown(); } const MetaCoreMesh& MetaCoreDebugGeometry::GetGridMesh() const { return GridMesh_; } const MetaCoreMesh& MetaCoreDebugGeometry::GetAxesMesh() const { return AxesMesh_; } const MetaCoreMesh& MetaCoreDebugGeometry::GetCubeMesh() const { return CubeMesh_; } } // namespace MetaCore