mirror of
https://github.com/love2d/love.git
synced 2026-08-18 11:44:15 +02:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -1599,7 +1599,7 @@ void Graphics::releaseBufferMapMemory(void *mem)
|
||||
free(mem);
|
||||
}
|
||||
|
||||
Graphics::Renderer Graphics::getRenderer() const
|
||||
Renderer Graphics::getRenderer() const
|
||||
{
|
||||
return RENDERER_OPENGL;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user