Improve Vive rendering;

This commit is contained in:
bjorn 2016-09-29 00:21:38 -07:00
parent 93f007f329
commit 8ab7c06612
3 changed files with 12 additions and 9 deletions

View File

@ -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);
}

View File

@ -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();

View File

@ -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);