]> git.lizzy.rs Git - shadowclad.git/blobdiff - src/engine/render.c
Set things up for testing a mingw-w64 crossbuild
[shadowclad.git] / src / engine / render.c
index 121fe7d38893c208ce73476adf91d6603892f067..8e5133a9182f319e638785d3d552fde6df456dd1 100644 (file)
@@ -1,7 +1,7 @@
 #include "render.h"
 
 #include <stdbool.h>
-#include <GL/glut.h>
+#include <GL/freeglut_std.h>
 
 #include "geometry.h"
 #include "performance.h"
@@ -11,7 +11,7 @@ const Scene* cameraAnchor;
 
 static const float AXIS_RADIUS = 5.0f;
 
-static void renderScene(const Scene*);
+static void renderScene(const Scene*, const Transform baseTransform);
 static void setupCamera();
 static void moveCameraTo(const Scene* scene);
 static void drawAxes();
@@ -47,7 +47,7 @@ void renderFrame() {
        setupCamera();
        moveCameraTo(cameraAnchor);
 
-       renderScene(currentScene);
+       renderScene(currentScene, identity());
 
        glFlush();
        glutSwapBuffers();
@@ -55,13 +55,15 @@ void renderFrame() {
        glutPostRedisplay();
 }
 
-void renderScene(const Scene* scene) {
+static void renderScene(const Scene* scene, const Transform baseTransform) {
        if (!scene) {
                return;
        }
 
+       Transform transform = multiply(scene->transform, baseTransform);
+
        glMatrixMode(GL_MODELVIEW);
-       glLoadTransposeMatrixf((const GLfloat*) &scene->transform);
+       glLoadTransposeMatrixf((const GLfloat*) &transform);
 
        glDisable(GL_LIGHTING);
        drawAxes();
@@ -76,7 +78,7 @@ void renderScene(const Scene* scene) {
        }
 
        for (size_t i = 0; i < scene->numChildren; ++i) {
-               renderScene(scene->children[i]);
+               renderScene(scene->children[i], transform);
        }
 }
 
@@ -95,8 +97,7 @@ static void setupCamera() {
 
 static void moveCameraTo(const Scene* anchor) {
        glMatrixMode(GL_PROJECTION);
-       // TODO This needs to account for parent nodes as well
-       Vector3D pos = translationOf(anchor->transform);
+       Vector3D pos = translationOf(worldTransform(anchor));
        glTranslatef(-pos.x, -pos.y, -pos.z);
 }