In particular this makes the OpenGL procedure stuff work.
fixes https://github.com/minetest/minetest/issues/12265
#include <emscripten.h>\r
#endif\r
\r
+#ifdef _IRR_COMPILE_WITH_OPENGL_\r
+#include "CSDLManager.h"\r
+#endif\r
+\r
static int SDLDeviceInstances = 0;\r
\r
namespace irr\r
{\r
namespace video\r
{\r
- #ifdef _IRR_COMPILE_WITH_DIRECT3D_9_\r
- IVideoDriver* createDirectX9Driver(const irr::SIrrlichtCreationParameters& params,\r
- io::IFileSystem* io, HWND window);\r
- #endif\r
-\r
#ifdef _IRR_COMPILE_WITH_OPENGL_\r
- IVideoDriver* createOpenGLDriver(const SIrrlichtCreationParameters& params,\r
- io::IFileSystem* io, CIrrDeviceSDL* device);\r
+ IVideoDriver* createOpenGLDriver(const SIrrlichtCreationParameters& params, io::IFileSystem* io, IContextManager* contextManager);\r
#endif\r
\r
- #if defined(_IRR_COMPILE_WITH_OGLES2_) && defined(_IRR_EMSCRIPTEN_PLATFORM_)\r
- IVideoDriver* createOGLES2Driver(const irr::SIrrlichtCreationParameters& params, io::IFileSystem* io, IContextManager* contextManager);\r
+ #ifdef _IRR_COMPILE_WITH_OGLES2_\r
+ IVideoDriver* createOGLES2Driver(const SIrrlichtCreationParameters& params, io::IFileSystem* io, IContextManager* contextManager);\r
#endif\r
\r
- #if defined(_IRR_COMPILE_WITH_WEBGL1_) && defined(_IRR_EMSCRIPTEN_PLATFORM_)\r
- IVideoDriver* createWebGL1Driver(const irr::SIrrlichtCreationParameters& params, io::IFileSystem* io, IContextManager* contextManager);\r
+ #ifdef _IRR_COMPILE_WITH_WEBGL1_\r
+ IVideoDriver* createWebGL1Driver(const SIrrlichtCreationParameters& params, io::IFileSystem* io, IContextManager* contextManager);\r
#endif\r
} // end namespace video\r
\r
\r
case video::EDT_OPENGL:\r
#ifdef _IRR_COMPILE_WITH_OPENGL_\r
- VideoDriver = video::createOpenGLDriver(CreationParams, FileSystem, this);\r
+ ContextManager = new video::CSDLManager(this);\r
+ VideoDriver = video::createOpenGLDriver(CreationParams, FileSystem, ContextManager);\r
#else\r
os::Printer::log("No OpenGL support compiled in.", ELL_ERROR);\r
#endif\r
CGLXManager.cpp
CWGLManager.cpp
CEGLManager.cpp
+ CSDLManager.cpp
mt_opengl_loader.cpp
)
\r
#include "mt_opengl.h"\r
\r
-#ifdef _IRR_COMPILE_WITH_SDL_DEVICE_\r
-#include "CIrrDeviceSDL.h"\r
-#endif\r
-\r
namespace irr\r
{\r
namespace video\r
// Statics variables\r
const u16 COpenGLDriver::Quad2DIndices[4] = { 0, 1, 2, 3 };\r
\r
-#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) || defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
COpenGLDriver::COpenGLDriver(const SIrrlichtCreationParameters& params, io::IFileSystem* io, IContextManager* contextManager)\r
: CNullDriver(io, params.WindowSize), COpenGLExtensionHandler(), CacheHandler(0), CurrentRenderMode(ERM_NONE), ResetRenderStates(true),\r
Transformation3DChanged(true), AntiAlias(params.AntiAlias), ColorFormat(ECF_R8G8B8), FixedPipelineState(EOFPS_ENABLE), Params(params),\r
setDebugName("COpenGLDriver");\r
#endif\r
}\r
-#endif\r
-\r
-#ifdef _IRR_COMPILE_WITH_SDL_DEVICE_\r
-COpenGLDriver::COpenGLDriver(const SIrrlichtCreationParameters& params, io::IFileSystem* io, CIrrDeviceSDL* device)\r
- : CNullDriver(io, params.WindowSize), COpenGLExtensionHandler(), CacheHandler(0),\r
- CurrentRenderMode(ERM_NONE), ResetRenderStates(true), Transformation3DChanged(true),\r
- AntiAlias(params.AntiAlias), ColorFormat(ECF_R8G8B8), FixedPipelineState(EOFPS_ENABLE),\r
- Params(params), SDLDevice(device), ContextManager(0)\r
-{\r
-#ifdef _DEBUG\r
- setDebugName("COpenGLDriver");\r
-#endif\r
-\r
- genericDriverInit();\r
-}\r
-\r
-#endif\r
\r
bool COpenGLDriver::initDriver()\r
{\r
if (ContextManager)\r
ContextManager->activateContext(videoData, true);\r
\r
-#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
- if (SDLDevice)\r
- glFrontFace(GL_CW);\r
-#endif\r
-\r
clearBuffers(clearFlag, clearColor, clearDepth, clearStencil);\r
\r
return true;\r
if (ContextManager)\r
status = ContextManager->swapBuffers();\r
\r
-#ifdef _IRR_COMPILE_WITH_SDL_DEVICE_\r
- if (SDLDevice)\r
- {\r
- SDLDevice->SwapWindow();\r
- status = true;\r
- }\r
-#endif\r
-\r
// todo: console device present\r
\r
return status;\r
namespace video\r
{\r
\r
-#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) || defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
IVideoDriver* createOpenGLDriver(const SIrrlichtCreationParameters& params, io::IFileSystem* io, IContextManager* contextManager)\r
{\r
#ifdef _IRR_COMPILE_WITH_OPENGL_\r
return 0;\r
#endif\r
}\r
-#endif\r
-\r
-// -----------------------------------\r
-// SDL VERSION\r
-// -----------------------------------\r
-#ifdef _IRR_COMPILE_WITH_SDL_DEVICE_\r
-IVideoDriver* createOpenGLDriver(const SIrrlichtCreationParameters& params,\r
- io::IFileSystem* io, CIrrDeviceSDL* device)\r
-{\r
-#ifdef _IRR_COMPILE_WITH_OPENGL_\r
- return new COpenGLDriver(params, io, device);\r
-#else\r
- return 0;\r
-#endif // _IRR_COMPILE_WITH_OPENGL_\r
-}\r
-#endif // _IRR_COMPILE_WITH_SDL_DEVICE_\r
\r
} // end namespace\r
} // end namespace\r
EOFPS_DISABLE_TO_ENABLE // switch from programmable to fixed pipeline.\r
};\r
\r
-#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) || defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
COpenGLDriver(const SIrrlichtCreationParameters& params, io::IFileSystem* io, IContextManager* contextManager);\r
-#endif\r
-\r
-#ifdef _IRR_COMPILE_WITH_SDL_DEVICE_\r
- COpenGLDriver(const SIrrlichtCreationParameters& params, io::IFileSystem* io, CIrrDeviceSDL* device);\r
-#endif\r
\r
bool initDriver();\r
\r
S3DVertex Quad2DVertices[4];\r
static const u16 Quad2DIndices[4];\r
\r
- #ifdef _IRR_COMPILE_WITH_SDL_DEVICE_\r
- CIrrDeviceSDL *SDLDevice;\r
- #endif\r
-\r
IContextManager* ContextManager;\r
};\r
\r
--- /dev/null
+// Copyright (C) 2022 sfan5
+// This file is part of the "Irrlicht Engine".
+// For conditions of distribution and use, see copyright notice in Irrlicht.h
+
+#include "CSDLManager.h"
+
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_) && defined(_IRR_COMPILE_WITH_OPENGL_)
+
+#include "CIrrDeviceSDL.h"
+#include "COpenGLCommon.h"
+
+namespace irr
+{
+namespace video
+{
+
+CSDLManager::CSDLManager(CIrrDeviceSDL* device) : IContextManager(), SDLDevice(device)
+{
+ #ifdef _DEBUG
+ setDebugName("CSDLManager");
+ #endif
+}
+
+bool CSDLManager::initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data)
+{
+ Data = data;
+ return true;
+}
+
+const SExposedVideoData& CSDLManager::getContext() const
+{
+ return Data;
+}
+
+bool CSDLManager::activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero)
+{
+ // unclear if this is still needed:
+ glFrontFace(GL_CW);
+ return true;
+}
+
+void* CSDLManager::getProcAddress(const std::string &procName)
+{
+ return SDL_GL_GetProcAddress(procName.c_str());
+}
+
+bool CSDLManager::swapBuffers()
+{
+ SDLDevice->SwapWindow();
+ return true;
+}
+
+}
+}
+
+#endif
--- /dev/null
+// Copyright (C) 2022 sfan5
+// This file is part of the "Irrlicht Engine".
+// For conditions of distribution and use, see copyright notice in Irrlicht.h
+
+#ifndef __C_SDL_MANAGER_H_INCLUDED__
+#define __C_SDL_MANAGER_H_INCLUDED__
+
+#include "IrrCompileConfig.h"
+
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_) && defined(_IRR_COMPILE_WITH_OPENGL_)
+
+#include "IContextManager.h"
+
+namespace irr
+{
+ class CIrrDeviceSDL;
+
+namespace video
+{
+
+ // Manager for SDL with OpenGL
+ class CSDLManager : public IContextManager
+ {
+ public:
+ CSDLManager(CIrrDeviceSDL* device);
+
+ virtual ~CSDLManager() {}
+
+ virtual bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) _IRR_OVERRIDE_;
+
+ virtual void terminate() _IRR_OVERRIDE_ {};
+ virtual bool generateSurface() _IRR_OVERRIDE_ { return true; };
+ virtual void destroySurface() _IRR_OVERRIDE_ {};
+ virtual bool generateContext() _IRR_OVERRIDE_ { return true; };
+ virtual void destroyContext() _IRR_OVERRIDE_ {};
+
+ virtual const SExposedVideoData& getContext() const _IRR_OVERRIDE_;
+
+ virtual bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero=false) _IRR_OVERRIDE_;
+
+ virtual void* getProcAddress(const std::string &procName) _IRR_OVERRIDE_;
+
+ virtual bool swapBuffers() _IRR_OVERRIDE_;
+
+ private:
+ SExposedVideoData Data;
+ CIrrDeviceSDL *SDLDevice;
+ };
+}
+}
+
+#endif
+#endif