[vlc-devel] [PATCH] opengl: renderer: improve cube generation

Alexandre Janniaux ajanni at videolabs.io
Mon Jul 6 09:59:29 CEST 2020


The cube coordinates were defined one by one, giving little possibility
for readable refactoring or little explanation for those not knowing how
the cube is built.

Instead, provide a helper macro generating the coordinates and other
helper macros in order to select the correct face to generate. It will
ease future refactoring, in particular to rotate the cube.
---
 modules/video_output/opengl/renderer.c | 50 +++++++++++---------------
 1 file changed, 21 insertions(+), 29 deletions(-)

diff --git a/modules/video_output/opengl/renderer.c b/modules/video_output/opengl/renderer.c
index aa51f8b3a38..3a790671ce8 100644
--- a/modules/video_output/opengl/renderer.c
+++ b/modules/video_output/opengl/renderer.c
@@ -543,38 +543,30 @@ static int BuildCube(float padW, float padH,
         return VLC_ENOMEM;
     }
 
+#define CUBEFACE(swap, value) \
+    swap(value, -1.f,  1.f), \
+    swap(value, -1.f, -1.f), \
+    swap(value,  1.f,  1.f), \
+    swap(value,  1.f, -1.f)
+
+#define X_FACE(v, a, b) (v), (b), (a)
+#define Y_FACE(v, a, b) (a), (v), (b)
+#define Z_FACE(v, a, b) (a), (b), (v)
+
     static const GLfloat coord[] = {
-        -1.0,    1.0,    -1.0f, // front
-        -1.0,    -1.0,   -1.0f,
-        1.0,     1.0,    -1.0f,
-        1.0,     -1.0,   -1.0f,
-
-        -1.0,    1.0,    1.0f, // back
-        -1.0,    -1.0,   1.0f,
-        1.0,     1.0,    1.0f,
-        1.0,     -1.0,   1.0f,
-
-        -1.0,    1.0,    -1.0f, // left
-        -1.0,    -1.0,   -1.0f,
-        -1.0,     1.0,    1.0f,
-        -1.0,     -1.0,   1.0f,
-
-        1.0f,    1.0,    -1.0f, // right
-        1.0f,   -1.0,    -1.0f,
-        1.0f,   1.0,     1.0f,
-        1.0f,   -1.0,    1.0f,
-
-        -1.0,    -1.0,    1.0f, // bottom
-        -1.0,    -1.0,   -1.0f,
-        1.0,     -1.0,    1.0f,
-        1.0,     -1.0,   -1.0f,
-
-        -1.0,    1.0,    1.0f, // top
-        -1.0,    1.0,   -1.0f,
-        1.0,     1.0,    1.0f,
-        1.0,     1.0,   -1.0f,
+        CUBEFACE(Z_FACE, -1), // FRONT
+        CUBEFACE(Z_FACE, +1), // BACK
+        CUBEFACE(X_FACE, -1), // LEFT
+        CUBEFACE(X_FACE, +1), // RIGHT
+        CUBEFACE(Y_FACE, -1), // BOTTOM
+        CUBEFACE(Y_FACE, +1), // TOP
     };
 
+#undef X_FACE
+#undef Y_FACE
+#undef Z_FACE
+#undef CUBEFACE
+
     memcpy(*vertexCoord, coord, *nbVertices * 3 * sizeof(GLfloat));
 
     float col[] = {0.f, 1.f/3, 2.f/3, 1.f};
-- 
2.27.0



More information about the vlc-devel mailing list