aboutsummaryrefslogtreecommitdiffstats
path: root/examples/cube_view.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-04-17 21:20:05 -0400
committerDavid Robillard <d@drobilla.net>2021-04-18 11:32:39 -0400
commite315b35531e070846f8613c34ee0776435c7bdd9 (patch)
tree9dec869c16c00de83f62ec33a4a3c510ea0aecfb /examples/cube_view.h
parent51371e25da2a4930e525fb662ac5dc5cc2b115af (diff)
downloadpugl-e315b35531e070846f8613c34ee0776435c7bdd9.tar.gz
pugl-e315b35531e070846f8613c34ee0776435c7bdd9.tar.bz2
pugl-e315b35531e070846f8613c34ee0776435c7bdd9.zip
Improve cube rendering in example programs
Diffstat (limited to 'examples/cube_view.h')
-rw-r--r--examples/cube_view.h106
1 files changed, 80 insertions, 26 deletions
diff --git a/examples/cube_view.h b/examples/cube_view.h
index 71ae88d..bdef1f1 100644
--- a/examples/cube_view.h
+++ b/examples/cube_view.h
@@ -30,35 +30,66 @@
static const float cubeStripVertices[] = {
-1.0f, 1.0f, 1.0f, // Front top left
- 1.0f, 1.0f, 1.0f, // Front top right
+ 1.0f, 1.0f, 1.0f, // Front top right
-1.0f, -1.0f, 1.0f, // Front bottom left
- 1.0f, -1.0f, 1.0f, // Front bottom right
- 1.0f, -1.0f, -1.0f, // Back bottom right
- 1.0f, 1.0f, 1.0f, // Front top right
- 1.0f, 1.0f, -1.0f, // Back top right
+ 1.0f, -1.0f, 1.0f, // Front bottom right
+ 1.0f, -1.0f, -1.0f, // Back bottom right
+ 1.0f, 1.0f, 1.0f, // Front top right
+ 1.0f, 1.0f, -1.0f, // Back top right
-1.0f, 1.0f, 1.0f, // Front top left
-1.0f, 1.0f, -1.0f, // Back top left
-1.0f, -1.0f, 1.0f, // Front bottom left
-1.0f, -1.0f, -1.0f, // Back bottom left
- 1.0f, -1.0f, -1.0f, // Back bottom right
+ 1.0f, -1.0f, -1.0f, // Back bottom right
-1.0f, 1.0f, -1.0f, // Back top left
- 1.0f, 1.0f, -1.0f // Back top right
+ 1.0f, 1.0f, -1.0f // Back top right
+};
+
+static const float cubeStripColorVertices[] = {
+ 0.25f, 0.75f, 0.75f, // Front top left
+ 0.75f, 0.75f, 0.75f, // Front top right
+ 0.25f, 0.25f, 0.75f, // Front bottom left
+ 0.75f, 0.25f, 0.75f, // Front bottom right
+ 0.75f, 0.25f, 0.25f, // Back bottom right
+ 0.75f, 0.75f, 0.75f, // Front top right
+ 0.75f, 0.75f, 0.25f, // Back top right
+ 0.25f, 0.75f, 0.75f, // Front top left
+ 0.25f, 0.75f, 0.25f, // Back top left
+ 0.25f, 0.25f, 0.75f, // Front bottom left
+ 0.25f, 0.25f, 0.25f, // Back bottom left
+ 0.75f, 0.25f, 0.25f, // Back bottom right
+ 0.25f, 0.75f, 0.25f, // Back top left
+ 0.75f, 0.75f, 0.25f // Back top right
};
static const float cubeFrontLineLoop[] = {
-1.0f, 1.0f, 1.0f, // Front top left
- 1.0f, 1.0f, 1.0f, // Front top right
- 1.0f, -1.0f, 1.0f, // Front bottom right
+ 1.0f, 1.0f, 1.0f, // Front top right
+ 1.0f, -1.0f, 1.0f, // Front bottom right
-1.0f, -1.0f, 1.0f, // Front bottom left
};
+static const float cubeFrontLineLoopColors[] = {
+ 0.25f, 0.75f, 0.75f, // Front top left
+ 0.75f, 0.75f, 0.75f, // Front top right
+ 0.75f, 0.25f, 0.75f, // Front bottom right
+ 0.25f, 0.25f, 0.75f, // Front bottom left
+};
+
static const float cubeBackLineLoop[] = {
-1.0f, 1.0f, -1.0f, // Back top left
- 1.0f, 1.0f, -1.0f, // Back top right
- 1.0f, -1.0f, -1.0f, // Back bottom right
+ 1.0f, 1.0f, -1.0f, // Back top right
+ 1.0f, -1.0f, -1.0f, // Back bottom right
-1.0f, -1.0f, -1.0f, // Back bottom left
};
+static const float cubeBackLineLoopColors[] = {
+ 0.25f, 0.75f, 0.25f, // Back top left
+ 0.75f, 0.75f, 0.25f, // Back top right
+ 0.75f, 0.25f, 0.25f, // Back bottom right
+ 0.25f, 0.25f, 0.25f // Back bottom left
+};
+
static const float cubeSideLines[] = {
-1.0f, 1.0f, 1.0f, // Front top left
-1.0f, 1.0f, -1.0f, // Back top left
@@ -73,6 +104,20 @@ static const float cubeSideLines[] = {
1.0f, -1.0f, -1.0f, // Back bottom right
};
+static const float cubeSideLineColors[] = {
+ 0.25f, 0.75f, 0.75f, // Front top left
+ 0.25f, 0.75f, 0.25f, // Back top left
+
+ 0.25f, 0.25f, 0.75f, // Front bottom left
+ 0.25f, 0.25f, 0.25f, // Back bottom left
+
+ 0.75f, 0.75f, 0.75f, // Front top right
+ 0.75f, 0.75f, 0.25f, // Back top right
+
+ 0.75f, 0.25f, 0.75f, // Front bottom right
+ 0.75f, 0.25f, 0.25f, // Back bottom right
+};
+
// clang-format on
static inline void
@@ -80,9 +125,12 @@ reshapeCube(const float width, const float height)
{
const float aspect = width / height;
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+ glFrontFace(GL_CW);
+
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
- glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
@@ -106,8 +154,12 @@ displayCube(PuglView* const view,
glRotatef(xAngle, 0.0f, 1.0f, 0.0f);
glRotatef(yAngle, 1.0f, 0.0f, 0.0f);
- const float bg = entered ? 0.2f : 0.0f;
- glClearColor(bg, bg, bg, 1.0f);
+ if (entered) {
+ glClearColor(0.13f, 0.14f, 0.14f, 1.0f);
+ } else {
+ glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
+ }
+
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (puglHasFocus(view)) {
@@ -115,25 +167,27 @@ displayCube(PuglView* const view,
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, cubeStripVertices);
- glColorPointer(3, GL_FLOAT, 0, cubeStripVertices);
+ glColorPointer(3, GL_FLOAT, 0, cubeStripColorVertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 14);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glColor3f(0.0f, 0.0f, 0.0f);
} else {
- glColor3f(1.0f, 1.0f, 1.0f);
+ // Draw cube wireframe
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_COLOR_ARRAY);
+ glVertexPointer(3, GL_FLOAT, 0, cubeFrontLineLoop);
+ glColorPointer(3, GL_FLOAT, 0, cubeFrontLineLoopColors);
+ glDrawArrays(GL_LINE_LOOP, 0, 4);
+ glVertexPointer(3, GL_FLOAT, 0, cubeBackLineLoop);
+ glColorPointer(3, GL_FLOAT, 0, cubeBackLineLoopColors);
+ glDrawArrays(GL_LINE_LOOP, 0, 4);
+ glVertexPointer(3, GL_FLOAT, 0, cubeSideLines);
+ glColorPointer(3, GL_FLOAT, 0, cubeSideLineColors);
+ glDrawArrays(GL_LINES, 0, 8);
+ glDisableClientState(GL_VERTEX_ARRAY);
}
-
- // Draw cube wireframe
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, cubeFrontLineLoop);
- glDrawArrays(GL_LINE_LOOP, 0, 4);
- glVertexPointer(3, GL_FLOAT, 0, cubeBackLineLoop);
- glDrawArrays(GL_LINE_LOOP, 0, 4);
- glVertexPointer(3, GL_FLOAT, 0, cubeSideLines);
- glDrawArrays(GL_LINES, 0, 8);
- glDisableClientState(GL_VERTEX_ARRAY);
}
#endif // EXAMPLES_CUBE_VIEW_H