mirror of https://github.com/bjornbytes/lovr.git
lovr.graphics.getSystemLimits;
This commit is contained in:
parent
49a63bb084
commit
a04e5013ad
|
@ -406,6 +406,17 @@ int l_lovrGraphicsGetDimensions(lua_State* L) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int l_lovrGraphicsGetSystemLimits(lua_State* L) {
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_pushnumber(L, lovrGraphicsGetSystemLimit(LIMIT_POINT_SIZE));
|
||||||
|
lua_setfield(L, -2, "pointsize");
|
||||||
|
lua_pushinteger(L, lovrGraphicsGetSystemLimit(LIMIT_TEXTURE_SIZE));
|
||||||
|
lua_setfield(L, -2, "texturesize");
|
||||||
|
lua_pushinteger(L, lovrGraphicsGetSystemLimit(LIMIT_TEXTURE_MSAA));
|
||||||
|
lua_setfield(L, -2, "texturemsaa");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Transforms
|
// Transforms
|
||||||
|
|
||||||
int l_lovrGraphicsPush(lua_State* L) {
|
int l_lovrGraphicsPush(lua_State* L) {
|
||||||
|
@ -800,6 +811,7 @@ const luaL_Reg lovrGraphics[] = {
|
||||||
{ "getWidth", l_lovrGraphicsGetWidth },
|
{ "getWidth", l_lovrGraphicsGetWidth },
|
||||||
{ "getHeight", l_lovrGraphicsGetHeight },
|
{ "getHeight", l_lovrGraphicsGetHeight },
|
||||||
{ "getDimensions", l_lovrGraphicsGetDimensions },
|
{ "getDimensions", l_lovrGraphicsGetDimensions },
|
||||||
|
{ "getSystemLimits", l_lovrGraphicsGetSystemLimits },
|
||||||
{ "newFont", l_lovrGraphicsNewFont },
|
{ "newFont", l_lovrGraphicsNewFont },
|
||||||
{ "newMesh", l_lovrGraphicsNewMesh },
|
{ "newMesh", l_lovrGraphicsNewMesh },
|
||||||
{ "newModel", l_lovrGraphicsNewModel },
|
{ "newModel", l_lovrGraphicsNewModel },
|
||||||
|
|
|
@ -14,23 +14,36 @@ static GraphicsState state;
|
||||||
// Base
|
// Base
|
||||||
|
|
||||||
void lovrGraphicsInit() {
|
void lovrGraphicsInit() {
|
||||||
for (int i = 0; i < MAX_CANVASES; i++) {
|
|
||||||
state.canvases[i] = malloc(sizeof(CanvasState));
|
// Allocations
|
||||||
}
|
|
||||||
state.defaultShader = lovrShaderCreate(lovrDefaultVertexShader, lovrDefaultFragmentShader);
|
|
||||||
state.skyboxShader = lovrShaderCreate(lovrSkyboxVertexShader, lovrSkyboxFragmentShader);
|
|
||||||
int uniformId = lovrShaderGetUniformId(state.skyboxShader, "cube");
|
|
||||||
lovrShaderSendInt(state.skyboxShader, uniformId, 1);
|
|
||||||
state.fullscreenShader = lovrShaderCreate(lovrNoopVertexShader, lovrDefaultFragmentShader);
|
|
||||||
state.activeFont = NULL;
|
state.activeFont = NULL;
|
||||||
state.defaultFont = NULL;
|
state.defaultFont = NULL;
|
||||||
state.activeTexture = NULL;
|
state.activeTexture = NULL;
|
||||||
state.defaultTexture = lovrTextureCreate(lovrTextureDataGetBlank(1, 1, 0xff, FORMAT_RGBA));
|
|
||||||
glGenBuffers(1, &state.shapeBuffer);
|
glGenBuffers(1, &state.shapeBuffer);
|
||||||
glGenBuffers(1, &state.shapeIndexBuffer);
|
glGenBuffers(1, &state.shapeIndexBuffer);
|
||||||
glGenVertexArrays(1, &state.shapeArray);
|
glGenVertexArrays(1, &state.shapeArray);
|
||||||
vec_init(&state.shapeData);
|
vec_init(&state.shapeData);
|
||||||
vec_init(&state.shapeIndices);
|
vec_init(&state.shapeIndices);
|
||||||
|
for (int i = 0; i < MAX_CANVASES; i++) {
|
||||||
|
state.canvases[i] = malloc(sizeof(CanvasState));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Objects
|
||||||
|
state.defaultShader = lovrShaderCreate(lovrDefaultVertexShader, lovrDefaultFragmentShader);
|
||||||
|
state.skyboxShader = lovrShaderCreate(lovrSkyboxVertexShader, lovrSkyboxFragmentShader);
|
||||||
|
int uniformId = lovrShaderGetUniformId(state.skyboxShader, "cube");
|
||||||
|
lovrShaderSendInt(state.skyboxShader, uniformId, 1);
|
||||||
|
state.fullscreenShader = lovrShaderCreate(lovrNoopVertexShader, lovrDefaultFragmentShader);
|
||||||
|
state.defaultTexture = lovrTextureCreate(lovrTextureDataGetBlank(1, 1, 0xff, FORMAT_RGBA));
|
||||||
|
|
||||||
|
// System Limits
|
||||||
|
float pointSizes[2];
|
||||||
|
glGetFloatv(GL_POINT_SIZE_RANGE, pointSizes);
|
||||||
|
state.maxPointSize = pointSizes[1];
|
||||||
|
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &state.maxTextureSize);
|
||||||
|
glGetIntegerv(GL_MAX_SAMPLES, &state.maxTextureMSAA);
|
||||||
|
|
||||||
|
// State
|
||||||
state.depthTest = -1;
|
state.depthTest = -1;
|
||||||
lovrGraphicsReset();
|
lovrGraphicsReset();
|
||||||
atexit(lovrGraphicsDestroy);
|
atexit(lovrGraphicsDestroy);
|
||||||
|
@ -378,6 +391,15 @@ int lovrGraphicsGetHeight() {
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float lovrGraphicsGetSystemLimit(GraphicsLimit limit) {
|
||||||
|
switch (limit) {
|
||||||
|
case LIMIT_POINT_SIZE: return state.maxPointSize;
|
||||||
|
case LIMIT_TEXTURE_SIZE: return state.maxTextureSize;
|
||||||
|
case LIMIT_TEXTURE_MSAA: return state.maxTextureMSAA;
|
||||||
|
default: error("Unknown limit %d\n", limit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void lovrGraphicsPushCanvas() {
|
void lovrGraphicsPushCanvas() {
|
||||||
if (++state.canvas >= MAX_CANVASES) {
|
if (++state.canvas >= MAX_CANVASES) {
|
||||||
error("Canvas overflow");
|
error("Canvas overflow");
|
||||||
|
|
|
@ -47,6 +47,12 @@ typedef enum {
|
||||||
COMPARE_GREATER = GL_GREATER
|
COMPARE_GREATER = GL_GREATER
|
||||||
} CompareMode;
|
} CompareMode;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
LIMIT_POINT_SIZE,
|
||||||
|
LIMIT_TEXTURE_SIZE,
|
||||||
|
LIMIT_TEXTURE_MSAA
|
||||||
|
} GraphicsLimit;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
@ -90,6 +96,9 @@ typedef struct {
|
||||||
PolygonWinding polygonWinding;
|
PolygonWinding polygonWinding;
|
||||||
CompareMode depthTest;
|
CompareMode depthTest;
|
||||||
int isWireframe;
|
int isWireframe;
|
||||||
|
float maxPointSize;
|
||||||
|
int maxTextureSize;
|
||||||
|
int maxTextureMSAA;
|
||||||
} GraphicsState;
|
} GraphicsState;
|
||||||
|
|
||||||
// Base
|
// Base
|
||||||
|
@ -137,6 +146,7 @@ int lovrGraphicsIsWireframe();
|
||||||
void lovrGraphicsSetWireframe(int wireframe);
|
void lovrGraphicsSetWireframe(int wireframe);
|
||||||
int lovrGraphicsGetWidth();
|
int lovrGraphicsGetWidth();
|
||||||
int lovrGraphicsGetHeight();
|
int lovrGraphicsGetHeight();
|
||||||
|
float lovrGraphicsGetSystemLimit(GraphicsLimit limit);
|
||||||
void lovrGraphicsPushCanvas();
|
void lovrGraphicsPushCanvas();
|
||||||
void lovrGraphicsPopCanvas();
|
void lovrGraphicsPopCanvas();
|
||||||
void lovrGraphicsSetViewport(int x, int y, int w, int h);
|
void lovrGraphicsSetViewport(int x, int y, int w, int h);
|
||||||
|
|
Loading…
Reference in New Issue