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;
|
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
|
// Transforms
|
||||||
|
|
||||||
int lovrGraphicsPush() {
|
int lovrGraphicsPush() {
|
||||||
|
@ -426,14 +393,6 @@ void lovrGraphicsMatrixTransform(mat4 transform) {
|
||||||
mat4_multiply(state.transforms[state.transform], 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
|
// Primitives
|
||||||
|
|
||||||
static void lovrGraphicsSetShapeData(float* data, int length) {
|
static void lovrGraphicsSetShapeData(float* data, int length) {
|
||||||
|
@ -968,6 +927,47 @@ void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAl
|
||||||
}
|
}
|
||||||
|
|
||||||
// Internal State
|
// 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() {
|
Texture* lovrGraphicsGetTexture() {
|
||||||
return state.texture;
|
return state.texture;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,9 +72,7 @@ typedef struct {
|
||||||
Font* defaultFont;
|
Font* defaultFont;
|
||||||
Texture* defaultTexture;
|
Texture* defaultTexture;
|
||||||
float transforms[MAX_TRANSFORMS + INTERNAL_TRANSFORMS][16];
|
float transforms[MAX_TRANSFORMS + INTERNAL_TRANSFORMS][16];
|
||||||
CanvasState canvases[MAX_CANVASES];
|
|
||||||
int transform;
|
int transform;
|
||||||
int canvas;
|
|
||||||
|
|
||||||
Color backgroundColor;
|
Color backgroundColor;
|
||||||
BlendMode blendMode;
|
BlendMode blendMode;
|
||||||
|
@ -99,6 +97,8 @@ typedef struct {
|
||||||
vec_uint_t indices;
|
vec_uint_t indices;
|
||||||
} buffer;
|
} buffer;
|
||||||
|
|
||||||
|
CanvasState canvases[MAX_CANVASES];
|
||||||
|
int canvas;
|
||||||
Texture* texture;
|
Texture* texture;
|
||||||
uint32_t vertexArray;
|
uint32_t vertexArray;
|
||||||
uint32_t vertexBuffer;
|
uint32_t vertexBuffer;
|
||||||
|
@ -141,10 +141,6 @@ int lovrGraphicsIsWireframe();
|
||||||
void lovrGraphicsSetWireframe(int wireframe);
|
void lovrGraphicsSetWireframe(int wireframe);
|
||||||
int lovrGraphicsGetWidth();
|
int lovrGraphicsGetWidth();
|
||||||
int lovrGraphicsGetHeight();
|
int lovrGraphicsGetHeight();
|
||||||
void lovrGraphicsPushCanvas();
|
|
||||||
void lovrGraphicsPopCanvas();
|
|
||||||
void lovrGraphicsSetViewport(int x, int y, int w, int h);
|
|
||||||
void lovrGraphicsBindFramebuffer(int framebuffer);
|
|
||||||
|
|
||||||
// Transforms
|
// Transforms
|
||||||
int lovrGraphicsPush();
|
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 lovrGraphicsRotate(float angle, float ax, float ay, float az);
|
||||||
void lovrGraphicsScale(float x, float y, float z);
|
void lovrGraphicsScale(float x, float y, float z);
|
||||||
void lovrGraphicsMatrixTransform(mat4 transform);
|
void lovrGraphicsMatrixTransform(mat4 transform);
|
||||||
mat4 lovrGraphicsGetProjection();
|
|
||||||
void lovrGraphicsSetProjection(mat4 projection);
|
|
||||||
|
|
||||||
// Primitives
|
// Primitives
|
||||||
void lovrGraphicsPoints(float* points, int count);
|
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);
|
void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign);
|
||||||
|
|
||||||
// Internal State
|
// 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();
|
Texture* lovrGraphicsGetTexture();
|
||||||
void lovrGraphicsBindTexture(Texture* texture);
|
void lovrGraphicsBindTexture(Texture* texture);
|
||||||
void lovrGraphicsBindVertexArray(uint32_t vao);
|
void lovrGraphicsBindVertexArray(uint32_t vao);
|
||||||
|
|
Loading…
Reference in New Issue