diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index 12c48c75..3e6cf5e5 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -226,6 +226,10 @@ void lovrGraphicsScale(float x, float y, float z) { mat4_scale(vec_last(&state.transforms), x, y, z); } +void lovrGraphicsTransform(mat4 transform) { + mat4_multiply(vec_last(&state.transforms), transform); +} + void lovrGraphicsGetDimensions(int* width, int* height) { glfwGetFramebufferSize(window, width, height); } diff --git a/src/graphics/graphics.h b/src/graphics/graphics.h index 3362c4c8..0af9ca00 100644 --- a/src/graphics/graphics.h +++ b/src/graphics/graphics.h @@ -63,6 +63,7 @@ void lovrGraphicsOrigin(); void lovrGraphicsTranslate(float x, float y, float z); void lovrGraphicsRotate(float w, float x, float y, float z); void lovrGraphicsScale(float x, float y, float z); +void lovrGraphicsTransform(mat4 transform); void lovrGraphicsGetDimensions(int* width, int* height); void lovrGraphicsSetShapeData(float* data, int count); void lovrGraphicsDrawShape(); diff --git a/src/headset/vive.c b/src/headset/vive.c index 28edd42d..20ad1835 100644 --- a/src/headset/vive.c +++ b/src/headset/vive.c @@ -209,26 +209,24 @@ void viveRenderTo(void* headset, headsetRenderCallback callback, void* userdata) matrix = state->vrSystem->GetEyeToHeadTransform(eye).m; mat4_invert(mat4_fromMat34(eyeMatrix, matrix)); + mat4 transformMatrix = mat4_multiply(eyeMatrix, headMatrix); float near = state->clipNear; float far = state->clipFar; matrix = state->vrSystem->GetProjectionMatrix(eye, near, far, graphicsConvention).m; mat4_fromMat44(projectionMatrix, matrix); - lovrGraphicsSetProjectionRaw(projectionMatrix); - - Shader* shader = lovrGraphicsGetShader(); - if (shader) { - int lovrTransformId = lovrShaderGetUniformId(shader, "lovrTransform"); - mat4 transformMatrix = mat4_multiply(eyeMatrix, headMatrix); - lovrShaderSendFloatMat4(shader, lovrTransformId, transformMatrix); - } glEnable(GL_MULTISAMPLE); glBindFramebuffer(GL_FRAMEBUFFER, state->framebuffer); glViewport(0, 0, state->renderWidth, state->renderHeight); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + lovrGraphicsClear(1, 1); + lovrGraphicsPush(); + lovrGraphicsOrigin(); + lovrGraphicsTransform(transformMatrix); + lovrGraphicsSetProjectionRaw(projectionMatrix); callback(i, userdata); + lovrGraphicsPop(); glBindFramebuffer(GL_FRAMEBUFFER, 0); glDisable(GL_MULTISAMPLE);