[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