Canvas state is internal;

This commit is contained in:
bjorn 2017-08-08 02:20:55 -07:00
parent c89301c284
commit abbe5e36d0
2 changed files with 49 additions and 49 deletions

View File

@ -361,39 +361,6 @@ int lovrGraphicsGetHeight() {
return height;
}
void lovrGraphicsPushCanvas() {
if (++state.canvas >= MAX_CANVASES) {
error("Canvas overflow");
}
memcpy(&state.canvases[state.canvas], &state.canvases[state.canvas - 1], sizeof(CanvasState));
}
void lovrGraphicsPopCanvas() {
if (--state.canvas < 0) {
error("Canvas underflow");
}
int* viewport = state.canvases[state.canvas].viewport;
lovrGraphicsSetViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
lovrGraphicsBindFramebuffer(state.canvases[state.canvas].framebuffer);
}
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;
glViewport(x, y, w, h);
}
void lovrGraphicsBindFramebuffer(int framebuffer) {
if (state.canvases[state.canvas].framebuffer != framebuffer) {
state.canvases[state.canvas].framebuffer = framebuffer;
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
}
}
// Transforms
int lovrGraphicsPush() {
@ -426,14 +393,6 @@ void lovrGraphicsMatrixTransform(mat4 transform) {
mat4_multiply(state.transforms[state.transform], transform);
}
mat4 lovrGraphicsGetProjection() {
return state.canvases[state.canvas].projection;
}
void lovrGraphicsSetProjection(mat4 projection) {
memcpy(state.canvases[state.canvas].projection, projection, 16 * sizeof(float));
}
// Primitives
static void lovrGraphicsSetShapeData(float* data, int length) {
@ -968,6 +927,47 @@ void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAl
}
// Internal State
void lovrGraphicsPushCanvas() {
if (++state.canvas >= MAX_CANVASES) {
error("Canvas overflow");
}
memcpy(&state.canvases[state.canvas], &state.canvases[state.canvas - 1], sizeof(CanvasState));
}
void lovrGraphicsPopCanvas() {
if (--state.canvas < 0) {
error("Canvas underflow");
}
int* viewport = state.canvases[state.canvas].viewport;
lovrGraphicsSetViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
lovrGraphicsBindFramebuffer(state.canvases[state.canvas].framebuffer);
}
mat4 lovrGraphicsGetProjection() {
return state.canvases[state.canvas].projection;
}
void lovrGraphicsSetProjection(mat4 projection) {
memcpy(state.canvases[state.canvas].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;
glViewport(x, y, w, h);
}
void lovrGraphicsBindFramebuffer(int framebuffer) {
if (state.canvases[state.canvas].framebuffer != framebuffer) {
state.canvases[state.canvas].framebuffer = framebuffer;
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
}
}
Texture* lovrGraphicsGetTexture() {
return state.texture;
}

View File

@ -72,9 +72,7 @@ typedef struct {
Font* defaultFont;
Texture* defaultTexture;
float transforms[MAX_TRANSFORMS + INTERNAL_TRANSFORMS][16];
CanvasState canvases[MAX_CANVASES];
int transform;
int canvas;
Color backgroundColor;
BlendMode blendMode;
@ -99,6 +97,8 @@ typedef struct {
vec_uint_t indices;
} buffer;
CanvasState canvases[MAX_CANVASES];
int canvas;
Texture* texture;
uint32_t vertexArray;
uint32_t vertexBuffer;
@ -141,10 +141,6 @@ int lovrGraphicsIsWireframe();
void lovrGraphicsSetWireframe(int wireframe);
int lovrGraphicsGetWidth();
int lovrGraphicsGetHeight();
void lovrGraphicsPushCanvas();
void lovrGraphicsPopCanvas();
void lovrGraphicsSetViewport(int x, int y, int w, int h);
void lovrGraphicsBindFramebuffer(int framebuffer);
// Transforms
int lovrGraphicsPush();
@ -154,8 +150,6 @@ void lovrGraphicsTranslate(float x, float y, float z);
void lovrGraphicsRotate(float angle, float ax, float ay, float az);
void lovrGraphicsScale(float x, float y, float z);
void lovrGraphicsMatrixTransform(mat4 transform);
mat4 lovrGraphicsGetProjection();
void lovrGraphicsSetProjection(mat4 projection);
// Primitives
void lovrGraphicsPoints(float* points, int count);
@ -170,6 +164,12 @@ void lovrGraphicsSkybox(Skybox* skybox, float angle, float ax, float ay, float a
void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign);
// Internal State
void lovrGraphicsPushCanvas();
void lovrGraphicsPopCanvas();
mat4 lovrGraphicsGetProjection();
void lovrGraphicsSetProjection(mat4 projection);
void lovrGraphicsSetViewport(int x, int y, int w, int h);
void lovrGraphicsBindFramebuffer(int framebuffer);
Texture* lovrGraphicsGetTexture();
void lovrGraphicsBindTexture(Texture* texture);
void lovrGraphicsBindVertexArray(uint32_t vao);