From 3a63055324eff52eed6ac638be9b82690d83540a Mon Sep 17 00:00:00 2001 From: Joakim Kilby Date: Tue, 19 Sep 2023 13:08:15 +0200 Subject: [PATCH] enable wireframe rendering of models --- modules/base/rendering/renderablemodel.cpp | 21 +++++++++++++++++++++ modules/base/rendering/renderablemodel.h | 1 + 2 files changed, 22 insertions(+) diff --git a/modules/base/rendering/renderablemodel.cpp b/modules/base/rendering/renderablemodel.cpp index 7881a8ddf5..8e1beb2938 100644 --- a/modules/base/rendering/renderablemodel.cpp +++ b/modules/base/rendering/renderablemodel.cpp @@ -160,6 +160,13 @@ namespace { openspace::properties::Property::Visibility::AdvancedUser }; + constexpr openspace::properties::Property::PropertyInfo RenderWireframeInfo = { + "RenderWireframe", + "Enable Wireframe Rendering", + "Enable Wireframe rendering for the Model", + openspace::properties::Property::Visibility::AdvancedUser + }; + constexpr openspace::properties::Property::PropertyInfo BlendingOptionInfo = { "BlendingOption", "Blending Options", @@ -271,6 +278,9 @@ namespace { // [[codegen::verbatim(EnableDepthTestInfo.description)]] std::optional enableDepthTest; + // [[codegen::verbatim(RenderWireframeInfo.description)]] + std::optional renderWireframe; + // [[codegen::verbatim(BlendingOptionInfo.description)]] std::optional blendingOption; @@ -312,6 +322,7 @@ RenderableModel::RenderableModel(const ghoul::Dictionary& dictionary) , _modelScale(ModelScaleInfo, 1.0, std::numeric_limits::epsilon(), 4e+27) , _rotationVec(RotationVecInfo, glm::dvec3(0.0), glm::dvec3(0.0), glm::dvec3(360.0)) , _enableDepthTest(EnableDepthTestInfo, true) + , _renderWireframe(RenderWireframeInfo, false) , _blendingFuncOption( BlendingOptionInfo, properties::OptionProperty::DisplayType::Dropdown @@ -410,6 +421,7 @@ RenderableModel::RenderableModel(const ghoul::Dictionary& dictionary) _performShading = p.performShading.value_or(_performShading); _enableDepthTest = p.enableDepthTest.value_or(_enableDepthTest); _enableFaceCulling = p.enableFaceCulling.value_or(_enableFaceCulling); + _renderWireframe = p.renderWireframe.value_or(_renderWireframe); if (p.vertexShader.has_value()) { _vertexShaderPath = p.vertexShader->string(); @@ -437,6 +449,7 @@ RenderableModel::RenderableModel(const ghoul::Dictionary& dictionary) addProperty(_performShading); addProperty(_enableFaceCulling); addProperty(_enableDepthTest); + addProperty(_renderWireframe); addProperty(_modelTransform); addProperty(_pivot); addProperty(_rotationVec); @@ -840,6 +853,10 @@ void RenderableModel::render(const RenderData& data, RendererTasks&) { glDisable(GL_DEPTH_TEST); } + if (_renderWireframe) { + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + } + if (!_shouldRenderTwice) { // Reset manual depth test @@ -984,6 +1001,10 @@ void RenderableModel::render(const RenderData& data, RendererTasks&) { glEnable(GL_DEPTH_TEST); } + if (_renderWireframe) { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + } + global::renderEngine->openglStateCache().resetBlendState(); global::renderEngine->openglStateCache().resetDepthState(); glActiveTexture(GL_TEXTURE0); diff --git a/modules/base/rendering/renderablemodel.h b/modules/base/rendering/renderablemodel.h index 74c1d3ff57..dba7847f0f 100644 --- a/modules/base/rendering/renderablemodel.h +++ b/modules/base/rendering/renderablemodel.h @@ -102,6 +102,7 @@ private: properties::BoolProperty _enableDepthTest; properties::OptionProperty _blendingFuncOption; + properties::BoolProperty _renderWireframe; std::string _vertexShaderPath; std::string _fragmentShaderPath;