From 8f9f943e2c9aebe83db3195e6152cd0bf5426060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sat, 20 Feb 2021 18:56:54 +0100 Subject: [PATCH] OpenGLRenderer: Implement primitive mode --- include/Nazara/OpenGLRenderer/Utils.hpp | 1 + include/Nazara/OpenGLRenderer/Utils.inl | 16 ++++++++++++++++ .../OpenGLRenderer/OpenGLCommandBuffer.cpp | 4 ++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/include/Nazara/OpenGLRenderer/Utils.hpp b/include/Nazara/OpenGLRenderer/Utils.hpp index 8c28d2419..46c5e2ed2 100644 --- a/include/Nazara/OpenGLRenderer/Utils.hpp +++ b/include/Nazara/OpenGLRenderer/Utils.hpp @@ -31,6 +31,7 @@ namespace Nz inline GLenum ToOpenGL(BlendFunc blendFunc); inline GLenum ToOpenGL(FaceSide filter); + inline GLenum ToOpenGL(PrimitiveMode primitiveMode); inline GLenum ToOpenGL(SamplerFilter filter); inline GLenum ToOpenGL(SamplerFilter minFilter, SamplerMipmapMode mipmapFilter); inline GLenum ToOpenGL(SamplerWrap wrapMode); diff --git a/include/Nazara/OpenGLRenderer/Utils.inl b/include/Nazara/OpenGLRenderer/Utils.inl index 0887b2e83..3ddffacf8 100644 --- a/include/Nazara/OpenGLRenderer/Utils.inl +++ b/include/Nazara/OpenGLRenderer/Utils.inl @@ -68,6 +68,22 @@ namespace Nz return {}; } + GLenum ToOpenGL(PrimitiveMode primitiveMode) + { + switch (primitiveMode) + { + case PrimitiveMode_LineList: return GL_LINES; + case PrimitiveMode_LineStrip: return GL_LINE_STRIP; + case PrimitiveMode_PointList: return GL_POINTS; + case PrimitiveMode_TriangleList: return GL_TRIANGLES; + case PrimitiveMode_TriangleStrip: return GL_TRIANGLE_STRIP; + case PrimitiveMode_TriangleFan: return GL_TRIANGLE_FAN; + } + + NazaraError("Unhandled PrimitiveMode 0x" + NumberToString(UnderlyingCast(primitiveMode), 16)); + return {}; + } + inline GLenum ToOpenGL(RendererComparison comparison) { switch (comparison) diff --git a/src/Nazara/OpenGLRenderer/OpenGLCommandBuffer.cpp b/src/Nazara/OpenGLRenderer/OpenGLCommandBuffer.cpp index 4c47d6a54..86f205cde 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLCommandBuffer.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLCommandBuffer.cpp @@ -81,12 +81,12 @@ namespace Nz else if constexpr (std::is_same_v) { ApplyStates(*context, command.states); - context->glDrawArraysInstanced(GL_TRIANGLES, command.firstVertex, command.vertexCount, command.instanceCount); + context->glDrawArraysInstanced(ToOpenGL(command.states.pipeline->GetPipelineInfo().primitiveMode), command.firstVertex, command.vertexCount, command.instanceCount); } else if constexpr (std::is_same_v) { ApplyStates(*context, command.states); - context->glDrawElementsInstanced(GL_TRIANGLES, command.indexCount, GL_UNSIGNED_SHORT, nullptr, command.instanceCount); + context->glDrawElementsInstanced(ToOpenGL(command.states.pipeline->GetPipelineInfo().primitiveMode), command.indexCount, GL_UNSIGNED_SHORT, nullptr, command.instanceCount); } else if constexpr (std::is_same_v) {