src/gl/partrenderer.h

changeset 360
41b38b9e05a2
parent 359
73b6c478378e
child 372
b2914aaeec1a
--- 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)

mercurial