mirror of https://github.com/bjornbytes/lovr.git
Canvas state is internal;
This commit is contained in:
parent
c89301c284
commit
abbe5e36d0
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue