Clean up system limits;

This commit is contained in:
bjorn 2017-08-01 21:42:46 -07:00
parent fd176a608a
commit 1402213029
3 changed files with 23 additions and 35 deletions

View File

@ -367,14 +367,15 @@ int l_lovrGraphicsGetDimensions(lua_State* L) {
} }
int l_lovrGraphicsGetSystemLimits(lua_State* L) { int l_lovrGraphicsGetSystemLimits(lua_State* L) {
GraphicsLimits limits = lovrGraphicsGetLimits();
lua_newtable(L); lua_newtable(L);
lua_pushnumber(L, lovrGraphicsGetSystemLimit(LIMIT_POINT_SIZE)); lua_pushnumber(L, limits.pointSizes[1]);
lua_setfield(L, -2, "pointsize"); lua_setfield(L, -2, "pointsize");
lua_pushinteger(L, lovrGraphicsGetSystemLimit(LIMIT_TEXTURE_SIZE)); lua_pushinteger(L, limits.textureSize);
lua_setfield(L, -2, "texturesize"); lua_setfield(L, -2, "texturesize");
lua_pushinteger(L, lovrGraphicsGetSystemLimit(LIMIT_TEXTURE_MSAA)); lua_pushinteger(L, limits.textureMSAA);
lua_setfield(L, -2, "texturemsaa"); lua_setfield(L, -2, "texturemsaa");
lua_pushinteger(L, lovrGraphicsGetSystemLimit(LIMIT_TEXTURE_ANISOTROPY)); lua_pushinteger(L, limits.textureAnisotropy);
lua_setfield(L, -2, "anisotropy"); lua_setfield(L, -2, "anisotropy");
return 1; return 1;
} }

View File

@ -86,19 +86,6 @@ void lovrGraphicsInit() {
state.fullscreenShader = lovrShaderCreate(lovrNoopVertexShader, lovrDefaultFragmentShader); state.fullscreenShader = lovrShaderCreate(lovrNoopVertexShader, lovrDefaultFragmentShader);
state.defaultTexture = lovrTextureCreate(lovrTextureDataGetBlank(1, 1, 0xff, FORMAT_RGBA)); state.defaultTexture = lovrTextureCreate(lovrTextureDataGetBlank(1, 1, 0xff, FORMAT_RGBA));
// System Limits
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &state.maxTextureSize);
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &state.maxTextureAnisotropy);
#ifdef EMSCRIPTEN
state.maxPointSize = 1.f;
state.maxTextureMSAA = 1;
#else
float pointSizes[2];
glGetFloatv(GL_POINT_SIZE_RANGE, pointSizes);
state.maxPointSize = pointSizes[1];
glGetIntegerv(GL_MAX_SAMPLES, &state.maxTextureMSAA);
#endif
// State // State
lovrGraphicsReset(); lovrGraphicsReset();
atexit(lovrGraphicsDestroy); atexit(lovrGraphicsDestroy);
@ -411,14 +398,16 @@ int lovrGraphicsGetHeight() {
return height; return height;
} }
float lovrGraphicsGetSystemLimit(GraphicsLimit limit) { GraphicsLimits lovrGraphicsGetLimits() {
switch (limit) { if (!state.limits.initialized) {
case LIMIT_POINT_SIZE: return state.maxPointSize; glGetFloatv(GL_POINT_SIZE_RANGE, state.limits.pointSizes);
case LIMIT_TEXTURE_SIZE: return state.maxTextureSize; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &state.limits.textureSize);
case LIMIT_TEXTURE_MSAA: return state.maxTextureMSAA; glGetIntegerv(GL_MAX_SAMPLES, &state.limits.textureMSAA);
case LIMIT_TEXTURE_ANISOTROPY: return state.maxTextureAnisotropy; glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &state.limits.textureAnisotropy);
default: error("Unknown limit %d\n", limit); state.limits.initialized = 1;
} }
return state.limits;
} }
void lovrGraphicsPushCanvas() { void lovrGraphicsPushCanvas() {

View File

@ -49,12 +49,13 @@ typedef enum {
COMPARE_GREATER = GL_GREATER COMPARE_GREATER = GL_GREATER
} CompareMode; } CompareMode;
typedef enum { typedef struct {
LIMIT_POINT_SIZE, int initialized;
LIMIT_TEXTURE_SIZE, float pointSizes[2];
LIMIT_TEXTURE_MSAA, int textureSize;
LIMIT_TEXTURE_ANISOTROPY int textureMSAA;
} GraphicsLimit; float textureAnisotropy;
} GraphicsLimits;
typedef struct { typedef struct {
int framebuffer; int framebuffer;
@ -93,10 +94,7 @@ typedef struct {
int isWireframe; int isWireframe;
FilterMode defaultFilter; FilterMode defaultFilter;
float defaultAnisotropy; float defaultAnisotropy;
float maxPointSize; GraphicsLimits limits;
int maxTextureSize;
int maxTextureMSAA;
float maxTextureAnisotropy;
} GraphicsState; } GraphicsState;
// Base // Base
@ -140,7 +138,7 @@ void lovrGraphicsGetDefaultFilter(FilterMode* filter, float* anisotropy);
void lovrGraphicsSetDefaultFilter(FilterMode filter, float anisotropy); void lovrGraphicsSetDefaultFilter(FilterMode filter, float anisotropy);
int lovrGraphicsGetWidth(); int lovrGraphicsGetWidth();
int lovrGraphicsGetHeight(); int lovrGraphicsGetHeight();
float lovrGraphicsGetSystemLimit(GraphicsLimit limit); GraphicsLimits lovrGraphicsGetLimits();
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);