mirror of https://github.com/bjornbytes/lovr.git
Rename internal canvas to view;
This commit is contained in:
parent
5498a4e13e
commit
d5b3a2243e
|
@ -45,12 +45,12 @@ int l_lovrTextureGetWrap(lua_State* L) {
|
||||||
|
|
||||||
int l_lovrTextureRenderTo(lua_State* L) {
|
int l_lovrTextureRenderTo(lua_State* L) {
|
||||||
Texture* texture = luax_checktype(L, 1, Texture);
|
Texture* texture = luax_checktype(L, 1, Texture);
|
||||||
lovrGraphicsPushCanvas();
|
lovrGraphicsPushView();
|
||||||
lovrTextureBindFramebuffer(texture);
|
lovrTextureBindFramebuffer(texture);
|
||||||
lua_settop(L, 2);
|
lua_settop(L, 2);
|
||||||
lua_call(L, 0, 0);
|
lua_call(L, 0, 0);
|
||||||
lovrTextureResolveMSAA(texture);
|
lovrTextureResolveMSAA(texture);
|
||||||
lovrGraphicsPopCanvas();
|
lovrGraphicsPopView();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ void lovrGraphicsReset() {
|
||||||
int h = lovrGraphicsGetHeight();
|
int h = lovrGraphicsGetHeight();
|
||||||
float projection[16];
|
float projection[16];
|
||||||
state.transform = 0;
|
state.transform = 0;
|
||||||
state.canvas = 0;
|
state.view = 0;
|
||||||
state.defaultShader = -1;
|
state.defaultShader = -1;
|
||||||
lovrGraphicsSetBackgroundColor((Color) { 0, 0, 0, 255 });
|
lovrGraphicsSetBackgroundColor((Color) { 0, 0, 0, 255 });
|
||||||
lovrGraphicsSetBlendMode(BLEND_ALPHA, BLEND_ALPHA_MULTIPLY);
|
lovrGraphicsSetBlendMode(BLEND_ALPHA, BLEND_ALPHA_MULTIPLY);
|
||||||
|
@ -88,7 +88,7 @@ void lovrGraphicsPrepare() {
|
||||||
|
|
||||||
mat4 model = state.transforms[state.transform][MATRIX_MODEL];
|
mat4 model = state.transforms[state.transform][MATRIX_MODEL];
|
||||||
mat4 view = state.transforms[state.transform][MATRIX_VIEW];
|
mat4 view = state.transforms[state.transform][MATRIX_VIEW];
|
||||||
mat4 projection = state.canvases[state.canvas].projection;
|
mat4 projection = state.views[state.view].projection;
|
||||||
lovrShaderSetMatrix(shader, "lovrModel", model, 16);
|
lovrShaderSetMatrix(shader, "lovrModel", model, 16);
|
||||||
lovrShaderSetMatrix(shader, "lovrView", view, 16);
|
lovrShaderSetMatrix(shader, "lovrView", view, 16);
|
||||||
lovrShaderSetMatrix(shader, "lovrProjection", projection, 16);
|
lovrShaderSetMatrix(shader, "lovrProjection", projection, 16);
|
||||||
|
@ -945,42 +945,42 @@ void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAl
|
||||||
}
|
}
|
||||||
|
|
||||||
// Internal State
|
// Internal State
|
||||||
void lovrGraphicsPushCanvas() {
|
void lovrGraphicsPushView() {
|
||||||
if (++state.canvas >= MAX_CANVASES) {
|
if (++state.view >= MAX_VIEWS) {
|
||||||
lovrThrow("Canvas overflow");
|
lovrThrow("View overflow");
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&state.canvases[state.canvas], &state.canvases[state.canvas - 1], sizeof(CanvasState));
|
memcpy(&state.views[state.view], &state.views[state.view - 1], sizeof(View));
|
||||||
}
|
}
|
||||||
|
|
||||||
void lovrGraphicsPopCanvas() {
|
void lovrGraphicsPopView() {
|
||||||
if (--state.canvas < 0) {
|
if (--state.view < 0) {
|
||||||
lovrThrow("Canvas underflow");
|
lovrThrow("View underflow");
|
||||||
}
|
}
|
||||||
|
|
||||||
int* viewport = state.canvases[state.canvas].viewport;
|
int* viewport = state.views[state.view].viewport;
|
||||||
lovrGraphicsSetViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
|
lovrGraphicsSetViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
|
||||||
lovrGraphicsBindFramebuffer(state.canvases[state.canvas].framebuffer);
|
lovrGraphicsBindFramebuffer(state.views[state.view].framebuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
mat4 lovrGraphicsGetProjection() {
|
mat4 lovrGraphicsGetProjection() {
|
||||||
return state.canvases[state.canvas].projection;
|
return state.views[state.view].projection;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lovrGraphicsSetProjection(mat4 projection) {
|
void lovrGraphicsSetProjection(mat4 projection) {
|
||||||
memcpy(state.canvases[state.canvas].projection, projection, 16 * sizeof(float));
|
memcpy(state.views[state.view].projection, projection, 16 * sizeof(float));
|
||||||
}
|
}
|
||||||
|
|
||||||
void lovrGraphicsSetViewport(int x, int y, int w, int h) {
|
void lovrGraphicsSetViewport(int x, int y, int w, int h) {
|
||||||
state.canvases[state.canvas].viewport[0] = x;
|
state.views[state.view].viewport[0] = x;
|
||||||
state.canvases[state.canvas].viewport[1] = y;
|
state.views[state.view].viewport[1] = y;
|
||||||
state.canvases[state.canvas].viewport[2] = w;
|
state.views[state.view].viewport[2] = w;
|
||||||
state.canvases[state.canvas].viewport[3] = h;
|
state.views[state.view].viewport[3] = h;
|
||||||
glViewport(x, y, w, h);
|
glViewport(x, y, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lovrGraphicsBindFramebuffer(int framebuffer) {
|
void lovrGraphicsBindFramebuffer(int framebuffer) {
|
||||||
state.canvases[state.canvas].framebuffer = framebuffer;
|
state.views[state.view].framebuffer = framebuffer;
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
|
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define MAX_CANVASES 4
|
#define MAX_VIEWS 4
|
||||||
#define MAX_TRANSFORMS 60
|
#define MAX_TRANSFORMS 60
|
||||||
#define INTERNAL_TRANSFORMS 4
|
#define INTERNAL_TRANSFORMS 4
|
||||||
#define DEFAULT_SHADER_COUNT 4
|
#define DEFAULT_SHADER_COUNT 4
|
||||||
|
@ -49,6 +49,11 @@ typedef enum {
|
||||||
COMPARE_GREATER = GL_GREATER
|
COMPARE_GREATER = GL_GREATER
|
||||||
} CompareMode;
|
} CompareMode;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MATRIX_MODEL,
|
||||||
|
MATRIX_VIEW
|
||||||
|
} MatrixType;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int initialized;
|
int initialized;
|
||||||
float pointSizes[2];
|
float pointSizes[2];
|
||||||
|
@ -61,12 +66,7 @@ typedef struct {
|
||||||
int framebuffer;
|
int framebuffer;
|
||||||
float projection[16];
|
float projection[16];
|
||||||
int viewport[4];
|
int viewport[4];
|
||||||
} CanvasState;
|
} View;
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
MATRIX_MODEL,
|
|
||||||
MATRIX_VIEW
|
|
||||||
} MatrixType;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GLFWwindow* window;
|
GLFWwindow* window;
|
||||||
|
@ -97,8 +97,8 @@ typedef struct {
|
||||||
uint32_t streamIBO;
|
uint32_t streamIBO;
|
||||||
vec_float_t streamData;
|
vec_float_t streamData;
|
||||||
vec_uint_t streamIndices;
|
vec_uint_t streamIndices;
|
||||||
CanvasState canvases[MAX_CANVASES];
|
View views[MAX_VIEWS];
|
||||||
int canvas;
|
int view;
|
||||||
Texture* textures[MAX_TEXTURES];
|
Texture* textures[MAX_TEXTURES];
|
||||||
uint32_t program;
|
uint32_t program;
|
||||||
uint32_t vertexArray;
|
uint32_t vertexArray;
|
||||||
|
@ -168,8 +168,8 @@ void lovrGraphicsSkybox(Texture* texture, float angle, float ax, float ay, float
|
||||||
void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign);
|
void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign);
|
||||||
|
|
||||||
// Internal State
|
// Internal State
|
||||||
void lovrGraphicsPushCanvas();
|
void lovrGraphicsPushView();
|
||||||
void lovrGraphicsPopCanvas();
|
void lovrGraphicsPopView();
|
||||||
mat4 lovrGraphicsGetProjection();
|
mat4 lovrGraphicsGetProjection();
|
||||||
void lovrGraphicsSetProjection(mat4 projection);
|
void lovrGraphicsSetProjection(mat4 projection);
|
||||||
void lovrGraphicsSetViewport(int x, int y, int w, int h);
|
void lovrGraphicsSetViewport(int x, int y, int w, int h);
|
||||||
|
|
|
@ -691,7 +691,7 @@ void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata) {
|
||||||
float head[16], transform[16], projection[16];
|
float head[16], transform[16], projection[16];
|
||||||
float (*matrix)[4];
|
float (*matrix)[4];
|
||||||
|
|
||||||
lovrGraphicsPushCanvas();
|
lovrGraphicsPushView();
|
||||||
state.isRendering = 1;
|
state.isRendering = 1;
|
||||||
state.compositor->WaitGetPoses(state.renderPoses, 16, NULL, 0);
|
state.compositor->WaitGetPoses(state.renderPoses, 16, NULL, 0);
|
||||||
|
|
||||||
|
@ -737,7 +737,7 @@ void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata) {
|
||||||
}
|
}
|
||||||
|
|
||||||
state.isRendering = 0;
|
state.isRendering = 0;
|
||||||
lovrGraphicsPopCanvas();
|
lovrGraphicsPopView();
|
||||||
|
|
||||||
if (state.isMirrored) {
|
if (state.isMirrored) {
|
||||||
Color oldColor = lovrGraphicsGetColor();
|
Color oldColor = lovrGraphicsGetColor();
|
||||||
|
|
Loading…
Reference in New Issue