diff --git a/QtMeshViewer/Form Files/SettingsWindow.ui b/QtMeshViewer/Form Files/SettingsWindow.ui
index 4dd2cf2..454d889 100644
--- a/QtMeshViewer/Form Files/SettingsWindow.ui
+++ b/QtMeshViewer/Form Files/SettingsWindow.ui
@@ -530,9 +530,6 @@
Backface Culling
-
- true
-
diff --git a/QtMeshViewer/Header/GeometryEngine.h b/QtMeshViewer/Header/GeometryEngine.h
index b2556b2..7464662 100644
--- a/QtMeshViewer/Header/GeometryEngine.h
+++ b/QtMeshViewer/Header/GeometryEngine.h
@@ -36,7 +36,7 @@ private:
void clearData();
public:
- void drawGeometry(QOpenGLShaderProgram *program, bool wireframe);
+ void drawGeometry(QOpenGLShaderProgram *program);
void loadFile(QString filePath);
// signals
diff --git a/QtMeshViewer/Header/OglViewerWidget.h b/QtMeshViewer/Header/OglViewerWidget.h
index 0eb3398..0a61d1a 100644
--- a/QtMeshViewer/Header/OglViewerWidget.h
+++ b/QtMeshViewer/Header/OglViewerWidget.h
@@ -27,6 +27,7 @@ private:
bool m_wireframe = false;
bool m_lightOn = false;
+ bool m_backfaceCulling = false;
struct {
QVector4D position = { 1,1,1,0 };
diff --git a/QtMeshViewer/Source/GeometryEngine.cpp b/QtMeshViewer/Source/GeometryEngine.cpp
index b8c41f6..331eaae 100644
--- a/QtMeshViewer/Source/GeometryEngine.cpp
+++ b/QtMeshViewer/Source/GeometryEngine.cpp
@@ -51,7 +51,7 @@ void GeometryEngine::clearData()
m_drawList.clear();
}
-void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program, bool wireframe)
+void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program)
{
if (!m_arrayBuf.isCreated() || !m_indexBuf.isCreated())
return;
@@ -133,12 +133,8 @@ void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program, bool wireframe)
program->setUniformValue("materialSpecularColor", specularColor);
// Draw cube geometry using indices from VBO 1
- if (wireframe)
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
-
glDrawElements(GL_TRIANGLES, it.size, GL_UNSIGNED_INT, (void*)(it.offset * sizeof(GLuint)));
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
}
diff --git a/QtMeshViewer/Source/OglViewerWidget.cpp b/QtMeshViewer/Source/OglViewerWidget.cpp
index 85bf2f6..7e2f3d7 100644
--- a/QtMeshViewer/Source/OglViewerWidget.cpp
+++ b/QtMeshViewer/Source/OglViewerWidget.cpp
@@ -94,7 +94,7 @@ void OglViewerWidget::initializeGL()
//TODO: does not work
// Enable back face culling
- glEnable(GL_CULL_FACE);
+ //glEnable(GL_CULL_FACE);
// Enable transparency
glEnable(GL_BLEND);
@@ -164,7 +164,16 @@ void OglViewerWidget::paintGL()
m_program.setUniformValue("cameraPosition", rotateBack * (-m_translation));
// Draw cube geometry
- m_dataEngine->drawGeometry(&m_program, m_wireframe);
+ if (m_backfaceCulling)
+ glEnable(GL_CULL_FACE);
+
+ if (m_wireframe)
+ glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+
+ m_dataEngine->drawGeometry(&m_program);
+
+ glDisable(GL_CULL_FACE);
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
// Inputs ///////////////////////////////////////////////////////////////
@@ -410,11 +419,7 @@ void OglViewerWidget::setAmbCoef(double value)
void OglViewerWidget::setBackfaceCulling(bool value)
{
- if (value)
- glCullFace(GL_FRONT_AND_BACK);
- else if(!value)
- glCullFace(GL_FRONT);
-
+ m_backfaceCulling = value;
update();
}