--- a/src/gl/partrenderer.h Sun Apr 09 01:12:00 2023 +0300 +++ b/src/gl/partrenderer.h Sun Apr 09 12:23:32 2023 +0300 @@ -71,10 +71,35 @@ void updateViewMatrix(); void updateModelMatrix(); Q_SLOT void build(); - void renderVao(const gl::ArrayClass arrayClass); + void renderVao(const gl::ArrayClass arrayClass, const GLenum glType); + template<gl::ArrayClass arrayClass> + void renderVao(); void checkForGLErrors(); }; +inline constexpr opt<GLenum> getGlTypeForArrayClass(const gl::ArrayClass vboClass) +{ + switch (vboClass) + { + case gl::ArrayClass::Lines: + case gl::ArrayClass::ConditionalLines: + return GL_LINES; + case gl::ArrayClass::Triangles: + return GL_TRIANGLES; + case gl::ArrayClass::Quads: + return GL_QUADS; + } + return {}; +} + +template<gl::ArrayClass arrayClass> +void PartRenderer::renderVao() +{ + constexpr opt<GLenum> glType = getGlTypeForArrayClass(arrayClass); + static_assert(glType.has_value()); + this->renderVao(arrayClass, *glType); +} + inline QVector<QPointF> convertWorldPointsToScreenPoints( const std::vector<glm::vec3> &worldPoints, const PartRenderer* renderer)