mirror of https://github.com/bjornbytes/lovr.git
Improve Vive rendering;
This commit is contained in:
parent
93f007f329
commit
8ab7c06612
|
@ -226,6 +226,10 @@ void lovrGraphicsScale(float x, float y, float z) {
|
||||||
mat4_scale(vec_last(&state.transforms), x, y, 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) {
|
void lovrGraphicsGetDimensions(int* width, int* height) {
|
||||||
glfwGetFramebufferSize(window, width, height);
|
glfwGetFramebufferSize(window, width, height);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ void lovrGraphicsOrigin();
|
||||||
void lovrGraphicsTranslate(float x, float y, float z);
|
void lovrGraphicsTranslate(float x, float y, float z);
|
||||||
void lovrGraphicsRotate(float w, 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 lovrGraphicsScale(float x, float y, float z);
|
||||||
|
void lovrGraphicsTransform(mat4 transform);
|
||||||
void lovrGraphicsGetDimensions(int* width, int* height);
|
void lovrGraphicsGetDimensions(int* width, int* height);
|
||||||
void lovrGraphicsSetShapeData(float* data, int count);
|
void lovrGraphicsSetShapeData(float* data, int count);
|
||||||
void lovrGraphicsDrawShape();
|
void lovrGraphicsDrawShape();
|
||||||
|
|
|
@ -209,26 +209,24 @@ void viveRenderTo(void* headset, headsetRenderCallback callback, void* userdata)
|
||||||
|
|
||||||
matrix = state->vrSystem->GetEyeToHeadTransform(eye).m;
|
matrix = state->vrSystem->GetEyeToHeadTransform(eye).m;
|
||||||
mat4_invert(mat4_fromMat34(eyeMatrix, matrix));
|
mat4_invert(mat4_fromMat34(eyeMatrix, matrix));
|
||||||
|
mat4 transformMatrix = mat4_multiply(eyeMatrix, headMatrix);
|
||||||
|
|
||||||
float near = state->clipNear;
|
float near = state->clipNear;
|
||||||
float far = state->clipFar;
|
float far = state->clipFar;
|
||||||
matrix = state->vrSystem->GetProjectionMatrix(eye, near, far, graphicsConvention).m;
|
matrix = state->vrSystem->GetProjectionMatrix(eye, near, far, graphicsConvention).m;
|
||||||
mat4_fromMat44(projectionMatrix, matrix);
|
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);
|
glEnable(GL_MULTISAMPLE);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, state->framebuffer);
|
glBindFramebuffer(GL_FRAMEBUFFER, state->framebuffer);
|
||||||
glViewport(0, 0, state->renderWidth, state->renderHeight);
|
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);
|
callback(i, userdata);
|
||||||
|
lovrGraphicsPop();
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
glDisable(GL_MULTISAMPLE);
|
glDisable(GL_MULTISAMPLE);
|
||||||
|
|
Loading…
Reference in New Issue