mirror of
https://github.com/love2d/love.git
synced 2026-08-16 00:02:12 +02:00
Cleaned up the love.graphics code that deals with love.window to be more consistent with the rest of the codebase.
This commit is contained in:
@@ -24,7 +24,6 @@
|
||||
#include "common/Vector.h"
|
||||
|
||||
#include "Graphics.h"
|
||||
#include "window/sdl/Window.h"
|
||||
#include "font/Font.h"
|
||||
#include "Polyline.h"
|
||||
|
||||
@@ -50,7 +49,8 @@ namespace opengl
|
||||
{
|
||||
|
||||
Graphics::Graphics()
|
||||
: quadIndices(nullptr)
|
||||
: currentWindow(Module::getInstance<love::window::Window>(Module::M_WINDOW))
|
||||
, quadIndices(nullptr)
|
||||
, width(0)
|
||||
, height(0)
|
||||
, created(false)
|
||||
@@ -62,20 +62,21 @@ Graphics::Graphics()
|
||||
states.reserve(10);
|
||||
states.push_back(DisplayState());
|
||||
|
||||
currentWindow = love::window::sdl::Window::createSingleton();
|
||||
if (currentWindow.get())
|
||||
{
|
||||
int w, h;
|
||||
love::window::WindowSettings wsettings;
|
||||
|
||||
int w, h;
|
||||
love::window::WindowSettings wsettings;
|
||||
currentWindow->getWindow(w, h, wsettings);
|
||||
|
||||
currentWindow->getWindow(w, h, wsettings);
|
||||
|
||||
if (currentWindow->isOpen())
|
||||
setMode(w, h, wsettings.sRGB);
|
||||
if (currentWindow->isOpen())
|
||||
setMode(w, h, wsettings.sRGB);
|
||||
}
|
||||
}
|
||||
|
||||
Graphics::~Graphics()
|
||||
{
|
||||
// We do this manually so the love objects get released before the window.
|
||||
// We do this manually so the graphics objects are released before the window.
|
||||
states.clear();
|
||||
defaultFont.set(nullptr);
|
||||
|
||||
@@ -87,8 +88,6 @@ Graphics::~Graphics()
|
||||
|
||||
if (quadIndices)
|
||||
delete quadIndices;
|
||||
|
||||
currentWindow->release();
|
||||
}
|
||||
|
||||
const char *Graphics::getName() const
|
||||
@@ -238,6 +237,8 @@ void Graphics::setViewportSize(int width, int height)
|
||||
|
||||
bool Graphics::setMode(int width, int height, bool &sRGB)
|
||||
{
|
||||
currentWindow.set(Module::getInstance<love::window::Window>(Module::M_WINDOW));
|
||||
|
||||
this->width = width;
|
||||
this->height = height;
|
||||
|
||||
@@ -355,7 +356,7 @@ bool Graphics::isActive() const
|
||||
{
|
||||
// The graphics module is only completely 'active' if there's a window, a
|
||||
// context, and the active variable is set.
|
||||
return active && isCreated() && currentWindow && currentWindow->isOpen();
|
||||
return active && isCreated() && currentWindow.get() && currentWindow->isOpen();
|
||||
}
|
||||
|
||||
static void APIENTRY debugCB(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei /*len*/, const GLchar *msg, const GLvoid* /*usr*/)
|
||||
@@ -538,7 +539,8 @@ void Graphics::present()
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, info.info.uikit.colorbuffer);
|
||||
#endif
|
||||
|
||||
currentWindow->swapBuffers();
|
||||
if (currentWindow.get())
|
||||
currentWindow->swapBuffers();
|
||||
|
||||
// Restore the currently active canvas, if there is one.
|
||||
setCanvas(canvases);
|
||||
|
||||
@@ -508,7 +508,7 @@ private:
|
||||
|
||||
void checkSetDefaultFont();
|
||||
|
||||
love::window::Window *currentWindow;
|
||||
StrongRef<love::window::Window> currentWindow;
|
||||
|
||||
StrongRef<Font> defaultFont;
|
||||
|
||||
|
||||
@@ -26,12 +26,8 @@ namespace love
|
||||
namespace window
|
||||
{
|
||||
|
||||
Window *Window::singleton = nullptr;
|
||||
|
||||
Window::~Window()
|
||||
{
|
||||
if (singleton == this)
|
||||
singleton = nullptr;
|
||||
}
|
||||
|
||||
void Window::swapBuffers()
|
||||
|
||||
@@ -175,9 +175,6 @@ public:
|
||||
|
||||
virtual void requestAttention(bool continuous) = 0;
|
||||
|
||||
//virtual static Window *createSingleton() = 0;
|
||||
// No virtual statics, of course, but you are supposed to implement this static.
|
||||
|
||||
static bool getConstant(const char *in, Setting &out);
|
||||
static bool getConstant(Setting in, const char *&out);
|
||||
|
||||
@@ -187,10 +184,6 @@ public:
|
||||
static bool getConstant(const char *in, MessageBoxType &out);
|
||||
static bool getConstant(MessageBoxType in, const char *&out);
|
||||
|
||||
protected:
|
||||
|
||||
static Window *singleton;
|
||||
|
||||
private:
|
||||
|
||||
static StringMap<Setting, SETTING_MAX_ENUM>::Entry settingEntries[];
|
||||
|
||||
@@ -994,16 +994,6 @@ void Window::requestAttention(bool continuous)
|
||||
// TODO: Linux?
|
||||
}
|
||||
|
||||
love::window::Window *Window::createSingleton()
|
||||
{
|
||||
if (!singleton)
|
||||
singleton = new Window();
|
||||
else
|
||||
singleton->retain();
|
||||
|
||||
return singleton;
|
||||
}
|
||||
|
||||
const char *Window::getName() const
|
||||
{
|
||||
return "love.window.sdl";
|
||||
|
||||
@@ -104,8 +104,6 @@ public:
|
||||
|
||||
void requestAttention(bool continuous);
|
||||
|
||||
static love::window::Window *createSingleton();
|
||||
|
||||
const char *getName() const;
|
||||
|
||||
private:
|
||||
|
||||
@@ -529,8 +529,11 @@ static const luaL_Reg functions[] =
|
||||
|
||||
extern "C" int luaopen_love_window(lua_State *L)
|
||||
{
|
||||
Window *instance = nullptr;
|
||||
luax_catchexcept(L, [&](){ instance = sdl::Window::createSingleton(); });
|
||||
Window *instance = instance();
|
||||
if (instance == nullptr)
|
||||
luax_catchexcept(L, [&](){ instance = new love::window::sdl::Window(); });
|
||||
else
|
||||
instance->retain();
|
||||
|
||||
WrappedModule w;
|
||||
w.module = instance;
|
||||
|
||||
Reference in New Issue
Block a user