From 1b7261de5c69c473cf93263bfccab2b6265f60a5 Mon Sep 17 00:00:00 2001 From: bjorn Date: Fri, 3 Aug 2018 11:43:15 -0700 Subject: [PATCH] lovr.graphics.getSupported; --- src/api/graphics.c | 9 +++++++++ src/graphics/graphics.h | 5 +++++ src/graphics/opengl.c | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/api/graphics.c b/src/api/graphics.c index 57bb8a7f..644c99ba 100644 --- a/src/api/graphics.c +++ b/src/api/graphics.c @@ -327,6 +327,14 @@ int l_lovrGraphicsGetDimensions(lua_State* L) { return 2; } +int l_lovrGraphicsGetSupported(lua_State* L) { + GraphicsFeatures features = lovrGraphicsGetSupported(); + lua_newtable(L); + lua_pushboolean(L, features.writableBlocks); + lua_setfield(L, -2, "writableBlocks"); + return 1; +} + int l_lovrGraphicsGetSystemLimits(lua_State* L) { GraphicsLimits limits = lovrGraphicsGetLimits(); lua_newtable(L); @@ -1202,6 +1210,7 @@ const luaL_Reg lovrGraphics[] = { { "getWidth", l_lovrGraphicsGetWidth }, { "getHeight", l_lovrGraphicsGetHeight }, { "getDimensions", l_lovrGraphicsGetDimensions }, + { "getSupported", l_lovrGraphicsGetSupported }, { "getSystemLimits", l_lovrGraphicsGetSystemLimits }, { "getStats", l_lovrGraphicsGetStats }, diff --git a/src/graphics/graphics.h b/src/graphics/graphics.h index f8868601..9ca8cf88 100644 --- a/src/graphics/graphics.h +++ b/src/graphics/graphics.h @@ -67,6 +67,10 @@ typedef enum { WINDING_COUNTERCLOCKWISE } Winding; +typedef struct { + bool writableBlocks; +} GraphicsFeatures; + typedef struct { bool initialized; float pointSizes[2]; @@ -165,6 +169,7 @@ void lovrGraphicsCreateWindow(int w, int h, bool fullscreen, int msaa, const cha void lovrGraphicsGetDimensions(int* width, int* height); int lovrGraphicsGetMSAA(); void lovrGraphicsSetCamera(Camera* camera, bool clear); +GraphicsFeatures lovrGraphicsGetSupported(); GraphicsLimits lovrGraphicsGetLimits(); GraphicsStats lovrGraphicsGetStats(); diff --git a/src/graphics/opengl.c b/src/graphics/opengl.c index 3f35a2ca..542cfc64 100644 --- a/src/graphics/opengl.c +++ b/src/graphics/opengl.c @@ -801,6 +801,16 @@ void lovrGpuPresent() { #endif } +GraphicsFeatures lovrGraphicsGetSupported() { + return (GraphicsFeatures) { +#ifdef EMSCRIPTEN + .writableBlocks = GLAD_GL_ARB_shader_storage_blocks +#else + .writableBlocks = false +#endif + }; +} + GraphicsLimits lovrGraphicsGetLimits() { if (!state.limits.initialized) { #ifdef EMSCRIPTEN