Add ability to configure which renderers are used by love.graphics.

- Add t.renderers and t.excluderenderers love.conf fields. They can be an array of renderer names.
- Add --renderers a,list,of,renderernames and --excluderenderers more,renderers argument options.
This commit is contained in:
Alex Szpakowski
2022-01-04 21:29:56 -04:00
parent 9709f95194
commit 5864d83c31
10 changed files with 184 additions and 36 deletions
+32 -2
View File
@@ -110,7 +110,30 @@ namespace opengl { extern love::graphics::Graphics *createInstance(); }
namespace metal { extern love::graphics::Graphics *createInstance(); }
#endif
Graphics *Graphics::createInstance(const std::vector<Renderer> &renderers)
static std::vector<Renderer> defaultRenderers =
{
RENDERER_METAL,
RENDERER_OPENGL,
};
static std::vector<Renderer> _renderers = defaultRenderers;
const std::vector<Renderer> &getDefaultRenderers()
{
return defaultRenderers;
}
const std::vector<Renderer> &getRenderers()
{
return _renderers;
}
void setRenderers(const std::vector<Renderer> &renderers)
{
_renderers = renderers;
}
Graphics *Graphics::createInstance()
{
Graphics *instance = Module::getInstance<Graphics>(M_GRAPHICS);
@@ -118,7 +141,7 @@ Graphics *Graphics::createInstance(const std::vector<Renderer> &renderers)
instance->retain();
else
{
for (auto renderer : renderers)
for (auto renderer : _renderers)
{
if (renderer == RENDERER_OPENGL)
instance = opengl::createInstance();
@@ -2147,5 +2170,12 @@ STRINGMAP_CLASS_BEGIN(Graphics, Graphics::StackType, Graphics::STACK_MAX_ENUM, s
}
STRINGMAP_CLASS_END(Graphics, Graphics::StackType, Graphics::STACK_MAX_ENUM, stackType)
STRINGMAP_BEGIN(Renderer, RENDERER_MAX_ENUM, renderer)
{
{ "opengl", RENDERER_OPENGL },
{ "metal", RENDERER_METAL },
}
STRINGMAP_END(Renderer, RENDERER_MAX_ENUM, renderer)
} // graphics
} // love
+15 -9
View File
@@ -65,6 +65,14 @@ typedef Optional<ColorD> OptionalColorD;
const int MAX_COLOR_RENDER_TARGETS = 8;
enum Renderer
{
RENDERER_NONE,
RENDERER_OPENGL,
RENDERER_METAL,
RENDERER_MAX_ENUM
};
/**
* Globally sets whether gamma correction is enabled. Ideally this should be set
* prior to using any Graphics module function.
@@ -95,6 +103,10 @@ Colorf unGammaCorrectColor(const Colorf &c);
bool isDebugEnabled();
const std::vector<Renderer> &getDefaultRenderers();
const std::vector<Renderer> &getRenderers();
void setRenderers(const std::vector<Renderer> &renderers);
class Graphics : public Module
{
public:
@@ -151,14 +163,6 @@ public:
FEATURE_MAX_ENUM
};
enum Renderer
{
RENDERER_NONE,
RENDERER_OPENGL,
RENDERER_METAL,
RENDERER_MAX_ENUM
};
enum SystemLimit
{
LIMIT_POINT_SIZE,
@@ -860,7 +864,7 @@ public:
return (T *) scratchBuffer.data();
}
static Graphics *createInstance(const std::vector<Renderer> &renderers);
static Graphics *createInstance();
STRINGMAP_CLASS_DECLARE(DrawMode);
STRINGMAP_CLASS_DECLARE(ArcMode);
@@ -1016,6 +1020,8 @@ private:
}; // Graphics
STRINGMAP_DECLARE(Renderer);
} // graphics
} // love
+1 -1
View File
@@ -2016,7 +2016,7 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags
return (usage & flags) == usage;
}
Graphics::Renderer Graphics::getRenderer() const
Renderer Graphics::getRenderer() const
{
return RENDERER_METAL;
}
+1 -1
View File
@@ -1599,7 +1599,7 @@ void Graphics::releaseBufferMapMemory(void *mem)
free(mem);
}
Graphics::Renderer Graphics::getRenderer() const
Renderer Graphics::getRenderer() const
{
return RENDERER_OPENGL;
}
+1 -10
View File
@@ -3697,16 +3697,7 @@ static const lua_CFunction types[] =
extern "C" int luaopen_love_graphics(lua_State *L)
{
Graphics *instance = nullptr;
{
std::vector<Graphics::Renderer> renderers;
#if defined(LOVE_MACOS) || defined(LOVE_IOS)
renderers.push_back(Graphics::RENDERER_METAL);
#endif
renderers.push_back(Graphics::RENDERER_OPENGL);
instance = Graphics::createInstance(renderers);
}
Graphics *instance = Graphics::createInstance();
if (instance == nullptr)
{