Add possibility to change render context for OpenGL with beginScene. Should work if the context is shared with the one from Irrlicht.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@3034 dfc29bdd-3216-0410-991c-e03cc46cb475
master
hybrid 2009-12-09 17:57:16 +00:00
parent e7afb972b8
commit f964cb3d60
2 changed files with 21 additions and 6 deletions

View File

@ -39,7 +39,8 @@ COpenGLDriver::COpenGLDriver(const irr::SIrrlichtCreationParameters& params,
CurrentRendertargetSize(0,0), ColorFormat(ECF_R8G8B8),
CurrentTarget(ERT_FRAME_BUFFER),
Doublebuffer(params.Doublebuffer), Stereo(params.Stereobuffer),
HDc(0), Window(static_cast<HWND>(params.WindowId)), DeviceType(EIDT_WIN32)
HDc(0), Device(device), Window(static_cast<HWND>(params.WindowId)),
DeviceType(EIDT_WIN32)
{
#ifdef _DEBUG
setDebugName("COpenGLDriver");
@ -457,7 +458,7 @@ COpenGLDriver::COpenGLDriver(const SIrrlichtCreationParameters& params,
CurrentRendertargetSize(0,0), ColorFormat(ECF_R8G8B8),
CurrentTarget(ERT_FRAME_BUFFER),
Doublebuffer(params.Doublebuffer), Stereo(params.Stereobuffer),
_device(device), DeviceType(EIDT_OSX)
Device(device), DeviceType(EIDT_OSX)
{
#ifdef _DEBUG
setDebugName("COpenGLDriver");
@ -479,7 +480,8 @@ COpenGLDriver::COpenGLDriver(const SIrrlichtCreationParameters& params,
Transformation3DChanged(true), AntiAlias(params.AntiAlias),
RenderTargetTexture(0), CurrentRendertargetSize(0,0), ColorFormat(ECF_R8G8B8),
CurrentTarget(ERT_FRAME_BUFFER),
Doublebuffer(params.Doublebuffer), Stereo(params.Stereobuffer), DeviceType(EIDT_X11)
Doublebuffer(params.Doublebuffer), Stereo(params.Stereobuffer),
Device(device), DeviceType(EIDT_X11)
{
#ifdef _DEBUG
setDebugName("COpenGLDriver");
@ -560,7 +562,8 @@ COpenGLDriver::COpenGLDriver(const SIrrlichtCreationParameters& params,
Transformation3DChanged(true), AntiAlias(params.AntiAlias),
RenderTargetTexture(0), CurrentRendertargetSize(0,0), ColorFormat(ECF_R8G8B8),
CurrentTarget(ERT_FRAME_BUFFER),
Doublebuffer(params.Doublebuffer), Stereo(params.Stereobuffer), DeviceType(EIDT_SDL)
Doublebuffer(params.Doublebuffer), Stereo(params.Stereobuffer),
Device(device), DeviceType(EIDT_SDL)
{
#ifdef _DEBUG
setDebugName("COpenGLDriver");
@ -770,7 +773,7 @@ bool COpenGLDriver::endScene()
#ifdef _IRR_COMPILE_WITH_OSX_DEVICE_
if (DeviceType == EIDT_OSX)
{
_device->flush();
Device->flush();
return true;
}
#endif
@ -822,6 +825,8 @@ bool COpenGLDriver::beginScene(bool backBuffer, bool zBuffer, SColor color,
{
CNullDriver::beginScene(backBuffer, zBuffer, color, videoData, sourceRect);
changeRenderContext(videoData, Device);
#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)
if (DeviceType == EIDT_SDL)
{

View File

@ -57,6 +57,9 @@ namespace video
COpenGLDriver(const SIrrlichtCreationParameters& params, io::IFileSystem* io, CIrrDeviceMacOSX *device);
#endif
//! generic version which overloads the unimplemented versions
bool changeRenderContext(const SExposedVideoData& videoData, void* device) {return false;}
//! destructor
virtual ~COpenGLDriver();
@ -460,13 +463,20 @@ namespace video
#ifdef _IRR_WINDOWS_API_
HDC HDc; // Private GDI Device Context
HWND Window;
#ifdef _IRR_COMPILE_WITH_WINDOWS_DEVICE_
CIrrDeviceWin32 *Device;
#endif
#endif
#ifdef _IRR_COMPILE_WITH_X11_DEVICE_
GLXDrawable Drawable;
Display* X11Display;
CIrrDeviceLinux *Device;
#endif
#ifdef _IRR_COMPILE_WITH_OSX_DEVICE_
CIrrDeviceMacOSX *_device;
CIrrDeviceMacOSX *Device;
#endif
#ifdef _IRR_COMPILE_WITH_SDL_DEVICE_
CIrrDeviceSDL *Device;
#endif
E_DEVICE_TYPE DeviceType;