From 654b894ded76ccf596a845b9850e021e58799e96 Mon Sep 17 00:00:00 2001 From: bjorn Date: Fri, 26 Oct 2018 17:17:18 -0700 Subject: [PATCH] Add lovr.graphics.setProjection; It's not very good. It only takes Transforms and sets the projection for both eyes. And the projection gets reset at the beginning and end of lovr.headset.renderTo. It's meant to be a backdoor. --- src/api/graphics.c | 8 ++++++++ src/graphics/graphics.c | 5 +++++ src/graphics/graphics.h | 1 + 3 files changed, 14 insertions(+) diff --git a/src/api/graphics.c b/src/api/graphics.c index db4f8a3a..18dda691 100644 --- a/src/api/graphics.c +++ b/src/api/graphics.c @@ -13,6 +13,7 @@ #include "data/textureData.h" #include "data/vertexData.h" #include "filesystem/filesystem.h" +#include "math/transform.h" #include "util.h" #define _USE_MATH_DEFINES #include @@ -584,6 +585,12 @@ static int l_lovrGraphicsTransform(lua_State* L) { return 0; } +static int l_lovrGraphicsSetProjection(lua_State* L) { + Transform* transform = luax_checktype(L, 1, Transform); + lovrGraphicsSetProjection(transform->matrix); + return 0; +} + // Rendering static int l_lovrGraphicsClear(lua_State* L) { @@ -1302,6 +1309,7 @@ static const luaL_Reg lovrGraphics[] = { { "rotate", l_lovrGraphicsRotate }, { "scale", l_lovrGraphicsScale }, { "transform", l_lovrGraphicsTransform }, + { "setProjection", l_lovrGraphicsSetProjection }, // Rendering { "clear", l_lovrGraphicsClear }, diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index 1ecede0f..4fda8bcf 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -361,6 +361,11 @@ void lovrGraphicsMatrixTransform(mat4 transform) { mat4_multiply(state.transforms[state.transform], transform); } +void lovrGraphicsSetProjection(mat4 projection) { + mat4_set(state.camera.projection[0], projection); + mat4_set(state.camera.projection[1], projection); +} + // Rendering VertexPointer lovrGraphicsGetVertexPointer(uint32_t count) { diff --git a/src/graphics/graphics.h b/src/graphics/graphics.h index 7c57538e..73c70c0d 100644 --- a/src/graphics/graphics.h +++ b/src/graphics/graphics.h @@ -206,6 +206,7 @@ void lovrGraphicsTranslate(float x, float y, float z); void lovrGraphicsRotate(float angle, float ax, float ay, float az); void lovrGraphicsScale(float x, float y, float z); void lovrGraphicsMatrixTransform(mat4 transform); +void lovrGraphicsSetProjection(mat4 projection); // Rendering VertexPointer lovrGraphicsGetVertexPointer(uint32_t capacity);