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) {
|
||||
Texture* texture = luax_checktype(L, 1, Texture);
|
||||
lovrGraphicsPushCanvas();
|
||||
lovrGraphicsPushView();
|
||||
lovrTextureBindFramebuffer(texture);
|
||||
lua_settop(L, 2);
|
||||
lua_call(L, 0, 0);
|
||||
lovrTextureResolveMSAA(texture);
|
||||
lovrGraphicsPopCanvas();
|
||||
lovrGraphicsPopView();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ void lovrGraphicsReset() {
|
|||
int h = lovrGraphicsGetHeight();
|
||||
float projection[16];
|
||||
state.transform = 0;
|
||||
state.canvas = 0;
|
||||
state.view = 0;
|
||||
state.defaultShader = -1;
|
||||
lovrGraphicsSetBackgroundColor((Color) { 0, 0, 0, 255 });
|
||||
lovrGraphicsSetBlendMode(BLEND_ALPHA, BLEND_ALPHA_MULTIPLY);
|
||||
|
@ -88,7 +88,7 @@ void lovrGraphicsPrepare() {
|
|||
|
||||
mat4 model = state.transforms[state.transform][MATRIX_MODEL];
|
||||
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, "lovrView", view, 16);
|
||||
lovrShaderSetMatrix(shader, "lovrProjection", projection, 16);
|
||||
|
@ -945,42 +945,42 @@ void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAl
|
|||
}
|
||||
|
||||
// Internal State
|
||||
void lovrGraphicsPushCanvas() {
|
||||
if (++state.canvas >= MAX_CANVASES) {
|
||||
lovrThrow("Canvas overflow");
|
||||
void lovrGraphicsPushView() {
|
||||
if (++state.view >= MAX_VIEWS) {
|
||||
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() {
|
||||
if (--state.canvas < 0) {
|
||||
lovrThrow("Canvas underflow");
|
||||
void lovrGraphicsPopView() {
|
||||
if (--state.view < 0) {
|
||||
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]);
|
||||
lovrGraphicsBindFramebuffer(state.canvases[state.canvas].framebuffer);
|
||||
lovrGraphicsBindFramebuffer(state.views[state.view].framebuffer);
|
||||
}
|
||||
|
||||
mat4 lovrGraphicsGetProjection() {
|
||||
return state.canvases[state.canvas].projection;
|
||||
return state.views[state.view].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) {
|
||||
state.canvases[state.canvas].viewport[0] = x;
|
||||
state.canvases[state.canvas].viewport[1] = y;
|
||||
state.canvases[state.canvas].viewport[2] = w;
|
||||
state.canvases[state.canvas].viewport[3] = h;
|
||||
state.views[state.view].viewport[0] = x;
|
||||
state.views[state.view].viewport[1] = y;
|
||||
state.views[state.view].viewport[2] = w;
|
||||
state.views[state.view].viewport[3] = h;
|
||||
glViewport(x, y, w, h);
|
||||
}
|
||||
|
||||
void lovrGraphicsBindFramebuffer(int framebuffer) {
|
||||
state.canvases[state.canvas].framebuffer = framebuffer;
|
||||
state.views[state.view].framebuffer = framebuffer;
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#define MAX_CANVASES 4
|
||||
#define MAX_VIEWS 4
|
||||
#define MAX_TRANSFORMS 60
|
||||
#define INTERNAL_TRANSFORMS 4
|
||||
#define DEFAULT_SHADER_COUNT 4
|
||||
|
@ -49,6 +49,11 @@ typedef enum {
|
|||
COMPARE_GREATER = GL_GREATER
|
||||
} CompareMode;
|
||||
|
||||
typedef enum {
|
||||
MATRIX_MODEL,
|
||||
MATRIX_VIEW
|
||||
} MatrixType;
|
||||
|
||||
typedef struct {
|
||||
int initialized;
|
||||
float pointSizes[2];
|
||||
|
@ -61,12 +66,7 @@ typedef struct {
|
|||
int framebuffer;
|
||||
float projection[16];
|
||||
int viewport[4];
|
||||
} CanvasState;
|
||||
|
||||
typedef enum {
|
||||
MATRIX_MODEL,
|
||||
MATRIX_VIEW
|
||||
} MatrixType;
|
||||
} View;
|
||||
|
||||
typedef struct {
|
||||
GLFWwindow* window;
|
||||
|
@ -97,8 +97,8 @@ typedef struct {
|
|||
uint32_t streamIBO;
|
||||
vec_float_t streamData;
|
||||
vec_uint_t streamIndices;
|
||||
CanvasState canvases[MAX_CANVASES];
|
||||
int canvas;
|
||||
View views[MAX_VIEWS];
|
||||
int view;
|
||||
Texture* textures[MAX_TEXTURES];
|
||||
uint32_t program;
|
||||
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);
|
||||
|
||||
// Internal State
|
||||
void lovrGraphicsPushCanvas();
|
||||
void lovrGraphicsPopCanvas();
|
||||
void lovrGraphicsPushView();
|
||||
void lovrGraphicsPopView();
|
||||
mat4 lovrGraphicsGetProjection();
|
||||
void lovrGraphicsSetProjection(mat4 projection);
|
||||
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 (*matrix)[4];
|
||||
|
||||
lovrGraphicsPushCanvas();
|
||||
lovrGraphicsPushView();
|
||||
state.isRendering = 1;
|
||||
state.compositor->WaitGetPoses(state.renderPoses, 16, NULL, 0);
|
||||
|
||||
|
@ -737,7 +737,7 @@ void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata) {
|
|||
}
|
||||
|
||||
state.isRendering = 0;
|
||||
lovrGraphicsPopCanvas();
|
||||
lovrGraphicsPopView();
|
||||
|
||||
if (state.isMirrored) {
|
||||
Color oldColor = lovrGraphicsGetColor();
|
||||
|
|
Loading…
Reference in New Issue