Remove leftover code from software rendering

This commit is contained in:
sfan5 2023-01-02 21:21:53 +01:00
parent a9230e5f49
commit 7d3142b969
15 changed files with 9 additions and 454 deletions

@ -180,11 +180,6 @@ void CIrrDeviceAndroid::setWindowCaption(const wchar_t* text)
{ {
} }
bool CIrrDeviceAndroid::present(video::IImage* surface, void* windowId, core::rect<s32>* srcClip)
{
return true;
}
bool CIrrDeviceAndroid::isWindowActive() const bool CIrrDeviceAndroid::isWindowActive() const
{ {
return (Focused && !Paused); return (Focused && !Paused);

@ -11,7 +11,6 @@
#include "CIrrDeviceStub.h" #include "CIrrDeviceStub.h"
#include "IrrlichtDevice.h" #include "IrrlichtDevice.h"
#include "IImagePresenter.h"
#include "ICursorControl.h" #include "ICursorControl.h"
#include <android/sensor.h> #include <android/sensor.h>
@ -19,7 +18,7 @@
namespace irr namespace irr
{ {
class CIrrDeviceAndroid : public CIrrDeviceStub, video::IImagePresenter class CIrrDeviceAndroid : public CIrrDeviceStub
{ {
public: public:
CIrrDeviceAndroid(const SIrrlichtCreationParameters& param); CIrrDeviceAndroid(const SIrrlichtCreationParameters& param);
@ -34,8 +33,6 @@ namespace irr
virtual void setWindowCaption(const wchar_t* text); virtual void setWindowCaption(const wchar_t* text);
virtual bool present(video::IImage* surface, void* windowId, core::rect<s32>* srcClip);
virtual bool isWindowActive() const; virtual bool isWindowActive() const;
virtual bool isWindowFocused() const; virtual bool isWindowFocused() const;

@ -110,7 +110,7 @@ namespace irr
CIrrDeviceLinux::CIrrDeviceLinux(const SIrrlichtCreationParameters& param) CIrrDeviceLinux::CIrrDeviceLinux(const SIrrlichtCreationParameters& param)
: CIrrDeviceStub(param), : CIrrDeviceStub(param),
#ifdef _IRR_COMPILE_WITH_X11_ #ifdef _IRR_COMPILE_WITH_X11_
XDisplay(0), VisualInfo(0), Screennr(0), XWindow(0), StdHints(0), SoftwareImage(0), XDisplay(0), VisualInfo(0), Screennr(0), XWindow(0), StdHints(0),
XInputMethod(0), XInputContext(0), XInputMethod(0), XInputContext(0),
HasNetWM(false), HasNetWM(false),
#endif #endif
@ -211,9 +211,6 @@ CIrrDeviceLinux::~CIrrDeviceLinux()
ContextManager->destroySurface(); ContextManager->destroySurface();
} }
if (SoftwareImage)
XDestroyImage(SoftwareImage);
if (!ExternalWindow) if (!ExternalWindow)
{ {
XDestroyWindow(XDisplay,XWindow); XDestroyWindow(XDisplay,XWindow);
@ -487,21 +484,6 @@ bool CIrrDeviceLinux::createWindow()
long num; long num;
XGetWMNormalHints(XDisplay, XWindow, StdHints, &num); XGetWMNormalHints(XDisplay, XWindow, StdHints, &num);
// create an XImage for the software renderer
//(thx to Nadav for some clues on how to do that!)
if (CreationParams.DriverType == video::EDT_SOFTWARE || CreationParams.DriverType == video::EDT_BURNINGSVIDEO)
{
SoftwareImage = XCreateImage(XDisplay,
VisualInfo->visual, VisualInfo->depth,
ZPixmap, 0, 0, Width, Height,
BitmapPad(XDisplay), 0);
// use malloc because X will free it later on
if (SoftwareImage)
SoftwareImage->data = (char*) malloc(SoftwareImage->bytes_per_line * SoftwareImage->height * sizeof(char));
}
initXInput2(); initXInput2();
#endif // #ifdef _IRR_COMPILE_WITH_X11_ #endif // #ifdef _IRR_COMPILE_WITH_X11_
@ -515,20 +497,6 @@ void CIrrDeviceLinux::createDriver()
switch(CreationParams.DriverType) switch(CreationParams.DriverType)
{ {
#ifdef _IRR_COMPILE_WITH_X11_ #ifdef _IRR_COMPILE_WITH_X11_
case video::EDT_SOFTWARE:
#ifdef _IRR_COMPILE_WITH_SOFTWARE_
VideoDriver = video::createSoftwareDriver(CreationParams.WindowSize, CreationParams.Fullscreen, FileSystem, this);
#else
os::Printer::log("No Software driver support compiled in.", ELL_ERROR);
#endif
break;
case video::EDT_BURNINGSVIDEO:
#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_
VideoDriver = video::createBurningVideoDriver(CreationParams, FileSystem, this);
#else
os::Printer::log("Burning's video driver was not compiled in.", ELL_ERROR);
#endif
break;
case video::EDT_OPENGL: case video::EDT_OPENGL:
#ifdef _IRR_COMPILE_WITH_OPENGL_ #ifdef _IRR_COMPILE_WITH_OPENGL_
{ {
@ -765,21 +733,6 @@ bool CIrrDeviceLinux::run()
Width = event.xconfigure.width; Width = event.xconfigure.width;
Height = event.xconfigure.height; Height = event.xconfigure.height;
// resize image data
if (SoftwareImage)
{
XDestroyImage(SoftwareImage);
SoftwareImage = XCreateImage(XDisplay,
VisualInfo->visual, VisualInfo->depth,
ZPixmap, 0, 0, Width, Height,
BitmapPad(XDisplay), 0);
// use malloc because X will free it later on
if (SoftwareImage)
SoftwareImage->data = (char*) malloc(SoftwareImage->bytes_per_line * SoftwareImage->height * sizeof(char));
}
if (VideoDriver) if (VideoDriver)
VideoDriver->OnResize(core::dimension2d<u32>(Width, Height)); VideoDriver->OnResize(core::dimension2d<u32>(Width, Height));
} }
@ -1219,60 +1172,6 @@ void CIrrDeviceLinux::setWindowCaption(const wchar_t* text)
} }
//! presents a surface in the client area
bool CIrrDeviceLinux::present(video::IImage* image, void* windowId, core::rect<s32>* srcRect)
{
#ifdef _IRR_COMPILE_WITH_X11_
// this is only necessary for software drivers.
if (!SoftwareImage)
return true;
// thx to Nadav, who send me some clues of how to display the image
// to the X Server.
const u32 destwidth = SoftwareImage->width;
const u32 minWidth = core::min_(image->getDimension().Width, destwidth);
const u32 destPitch = SoftwareImage->bytes_per_line;
video::ECOLOR_FORMAT destColor;
switch (SoftwareImage->bits_per_pixel)
{
case 16:
if (SoftwareImage->depth==16)
destColor = video::ECF_R5G6B5;
else
destColor = video::ECF_A1R5G5B5;
break;
case 24: destColor = video::ECF_R8G8B8; break;
case 32: destColor = video::ECF_A8R8G8B8; break;
default:
os::Printer::log("Unsupported screen depth.");
return false;
}
u8* srcdata = reinterpret_cast<u8*>(image->getData());
u8* destData = reinterpret_cast<u8*>(SoftwareImage->data);
const u32 destheight = SoftwareImage->height;
const u32 srcheight = core::min_(image->getDimension().Height, destheight);
const u32 srcPitch = image->getPitch();
for (u32 y=0; y!=srcheight; ++y)
{
video::CColorConverter::convert_viaFormat(srcdata,image->getColorFormat(), minWidth, destData, destColor);
srcdata+=srcPitch;
destData+=destPitch;
}
GC gc = DefaultGC(XDisplay, DefaultScreen(XDisplay));
Window myWindow=XWindow;
if (windowId)
myWindow = reinterpret_cast<Window>(windowId);
XPutImage(XDisplay, myWindow, gc, SoftwareImage, 0, 0, 0, 0, destwidth, destheight);
#endif
return true;
}
//! notifies the device that it should close itself //! notifies the device that it should close itself
void CIrrDeviceLinux::closeDevice() void CIrrDeviceLinux::closeDevice()
{ {

@ -11,7 +11,6 @@
#include "CIrrDeviceStub.h" #include "CIrrDeviceStub.h"
#include "IrrlichtDevice.h" #include "IrrlichtDevice.h"
#include "IImagePresenter.h"
#include "ICursorControl.h" #include "ICursorControl.h"
#include "os.h" #include "os.h"
@ -33,7 +32,7 @@
namespace irr namespace irr
{ {
class CIrrDeviceLinux : public CIrrDeviceStub, public video::IImagePresenter class CIrrDeviceLinux : public CIrrDeviceStub
{ {
public: public:
@ -68,9 +67,6 @@ namespace irr
//! returns color format of the window. //! returns color format of the window.
video::ECOLOR_FORMAT getColorFormat() const override; video::ECOLOR_FORMAT getColorFormat() const override;
//! presents a surface in the client area
bool present(video::IImage* surface, void* windowId=0, core::rect<s32>* src=0 ) override;
//! notifies the device that it should close itself //! notifies the device that it should close itself
void closeDevice() override; void closeDevice() override;
@ -410,7 +406,6 @@ namespace irr
Window XWindow; Window XWindow;
XSetWindowAttributes WndAttributes; XSetWindowAttributes WndAttributes;
XSizeHints* StdHints; XSizeHints* StdHints;
XImage* SoftwareImage;
XIM XInputMethod; XIM XInputMethod;
XIC XInputContext; XIC XInputContext;
bool HasNetWM; bool HasNetWM;

@ -12,7 +12,6 @@
#include "CIrrDeviceStub.h" #include "CIrrDeviceStub.h"
#include "IrrlichtDevice.h" #include "IrrlichtDevice.h"
#include "IImagePresenter.h"
#include "IGUIEnvironment.h" #include "IGUIEnvironment.h"
#include "ICursorControl.h" #include "ICursorControl.h"
@ -36,7 +35,7 @@ namespace irr
namespace irr namespace irr
{ {
class CIrrDeviceMacOSX : public CIrrDeviceStub, video::IImagePresenter class CIrrDeviceMacOSX : public CIrrDeviceStub
{ {
public: public:
@ -68,9 +67,6 @@ namespace irr
//! Checks if the Irrlicht window is minimized //! Checks if the Irrlicht window is minimized
bool isWindowMinimized() const override; bool isWindowMinimized() const override;
//! presents a surface in the client area
bool present(video::IImage* surface, void* windowId=0, core::rect<s32>* src=0 ) override;
//! notifies the device that it should close itself //! notifies the device that it should close itself
void closeDevice() override; void closeDevice() override;
@ -237,14 +233,12 @@ namespace irr
NSWindow* Window; NSWindow* Window;
CGDirectDisplayID Display; CGDirectDisplayID Display;
NSBitmapImageRep* SoftwareDriverTarget;
std::map<int,int> KeyCodes; std::map<int,int> KeyCodes;
int DeviceWidth; int DeviceWidth;
int DeviceHeight; int DeviceHeight;
int ScreenWidth; int ScreenWidth;
int ScreenHeight; int ScreenHeight;
u32 MouseButtonStates; u32 MouseButtonStates;
u32 SoftwareRendererType;
bool IsFullscreen; bool IsFullscreen;
bool IsActive; bool IsActive;
bool IsShiftDown; bool IsShiftDown;

@ -547,8 +547,8 @@ namespace irr
//! constructor //! constructor
CIrrDeviceMacOSX::CIrrDeviceMacOSX(const SIrrlichtCreationParameters& param) CIrrDeviceMacOSX::CIrrDeviceMacOSX(const SIrrlichtCreationParameters& param)
: CIrrDeviceStub(param), Window(NULL), Display(NULL), : CIrrDeviceStub(param), Window(NULL), Display(NULL),
SoftwareDriverTarget(0), DeviceWidth(0), DeviceHeight(0), DeviceWidth(0), DeviceHeight(0),
ScreenWidth(0), ScreenHeight(0), MouseButtonStates(0), SoftwareRendererType(0), ScreenWidth(0), ScreenHeight(0), MouseButtonStates(0),
IsActive(true), IsFullscreen(false), IsShiftDown(false), IsControlDown(false), IsResizable(false) IsActive(true), IsFullscreen(false), IsShiftDown(false), IsControlDown(false), IsResizable(false)
{ {
struct utsname name; struct utsname name;
@ -617,7 +617,6 @@ CIrrDeviceMacOSX::CIrrDeviceMacOSX(const SIrrlichtCreationParameters& param)
CIrrDeviceMacOSX::~CIrrDeviceMacOSX() CIrrDeviceMacOSX::~CIrrDeviceMacOSX()
{ {
[SoftwareDriverTarget release];
[NSApp setPresentationOptions:(NSApplicationPresentationDefault)]; [NSApp setPresentationOptions:(NSApplicationPresentationDefault)];
closeDevice(); closeDevice();
#if defined(_IRR_COMPILE_WITH_JOYSTICK_EVENTS_) #if defined(_IRR_COMPILE_WITH_JOYSTICK_EVENTS_)
@ -731,24 +730,6 @@ void CIrrDeviceMacOSX::createDriver()
{ {
switch (CreationParams.DriverType) switch (CreationParams.DriverType)
{ {
case video::EDT_SOFTWARE:
#ifdef _IRR_COMPILE_WITH_SOFTWARE_
VideoDriver = video::createSoftwareDriver(CreationParams.WindowSize, CreationParams.Fullscreen, FileSystem, this);
SoftwareRendererType = 2;
#else
os::Printer::log("No Software driver support compiled in.", ELL_ERROR);
#endif
break;
case video::EDT_BURNINGSVIDEO:
#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_
VideoDriver = video::createBurningVideoDriver(CreationParams, FileSystem, this);
SoftwareRendererType = 1;
#else
os::Printer::log("Burning's video driver was not compiled in.", ELL_ERROR);
#endif
break;
case video::EDT_OPENGL: case video::EDT_OPENGL:
#ifdef _IRR_COMPILE_WITH_OPENGL_ #ifdef _IRR_COMPILE_WITH_OPENGL_
{ {
@ -1358,87 +1339,6 @@ core::position2di CIrrDeviceMacOSX::getWindowPosition()
} }
bool CIrrDeviceMacOSX::present(video::IImage* surface, void* windowId, core::rect<s32>* src )
{
// todo: implement window ID and src rectangle
if (!surface)
return false;
if (SoftwareRendererType > 0)
{
const u32 colorSamples=3;
// do we need to change the size?
const bool updateSize = !SoftwareDriverTarget ||
s32([SoftwareDriverTarget size].width) != surface->getDimension().Width ||
s32([SoftwareDriverTarget size].height) != surface->getDimension().Height;
NSRect areaRect = NSMakeRect(0.0, 0.0, surface->getDimension().Width, surface->getDimension().Height);
const u32 destPitch = (colorSamples * areaRect.size.width);
// create / update the target
if (updateSize)
{
[SoftwareDriverTarget release];
// allocate target for IImage
SoftwareDriverTarget = [[NSBitmapImageRep alloc]
initWithBitmapDataPlanes: nil
pixelsWide: areaRect.size.width
pixelsHigh: areaRect.size.height
bitsPerSample: 8
samplesPerPixel: colorSamples
hasAlpha: NO
isPlanar: NO
colorSpaceName: NSCalibratedRGBColorSpace
bytesPerRow: destPitch
bitsPerPixel: 8*colorSamples];
}
if (SoftwareDriverTarget==nil)
return false;
// get pointer to image data
unsigned char* imgData = (unsigned char*)surface->getData();
u8* srcdata = reinterpret_cast<u8*>(imgData);
u8* destData = reinterpret_cast<u8*>([SoftwareDriverTarget bitmapData]);
const u32 srcheight = core::min_(surface->getDimension().Height, (u32)areaRect.size.height);
const u32 srcPitch = surface->getPitch();
const u32 minWidth = core::min_(surface->getDimension().Width, (u32)areaRect.size.width);
for (u32 y=0; y!=srcheight; ++y)
{
if(SoftwareRendererType == 2)
{
if (surface->getColorFormat() == video::ECF_A8R8G8B8)
video::CColorConverter::convert_A8R8G8B8toB8G8R8(srcdata, minWidth, destData);
else if (surface->getColorFormat() == video::ECF_A1R5G5B5)
video::CColorConverter::convert_A1R5G5B5toB8G8R8(srcdata, minWidth, destData);
else
video::CColorConverter::convert_viaFormat(srcdata, surface->getColorFormat(), minWidth, destData, video::ECF_R8G8B8);
}
else
{
if (surface->getColorFormat() == video::ECF_A8R8G8B8)
video::CColorConverter::convert_A8R8G8B8toR8G8B8(srcdata, minWidth, destData);
else if (surface->getColorFormat() == video::ECF_A1R5G5B5)
video::CColorConverter::convert_A1R5G5B5toR8G8B8(srcdata, minWidth, destData);
else
video::CColorConverter::convert_viaFormat(srcdata, surface->getColorFormat(), minWidth, destData, video::ECF_R8G8B8);
}
srcdata += srcPitch;
destData += destPitch;
}
// todo: draw properly into a sub-view
[SoftwareDriverTarget draw];
}
return false;
}
#if defined (_IRR_COMPILE_WITH_JOYSTICK_EVENTS_) #if defined (_IRR_COMPILE_WITH_JOYSTICK_EVENTS_)
static void joystickRemovalCallback(void * target, static void joystickRemovalCallback(void * target,
IOReturn result, void * refcon, void * sender) IOReturn result, void * refcon, void * sender)

@ -372,22 +372,6 @@ void CIrrDeviceSDL::createDriver()
break; break;
case video::EDT_SOFTWARE:
#ifdef _IRR_COMPILE_WITH_SOFTWARE_
VideoDriver = video::createSoftwareDriver(CreationParams.WindowSize, CreationParams.Fullscreen, FileSystem, this);
#else
os::Printer::log("No Software driver support compiled in.", ELL_ERROR);
#endif
break;
case video::EDT_BURNINGSVIDEO:
#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_
VideoDriver = video::createBurningVideoDriver(CreationParams, FileSystem, this);
#else
os::Printer::log("Burning's video driver was not compiled in.", ELL_ERROR);
#endif
break;
case video::EDT_OPENGL: case video::EDT_OPENGL:
#ifdef _IRR_COMPILE_WITH_OPENGL_ #ifdef _IRR_COMPILE_WITH_OPENGL_
ContextManager = new video::CSDLManager(this); ContextManager = new video::CSDLManager(this);
@ -846,90 +830,6 @@ void CIrrDeviceSDL::setWindowCaption(const wchar_t* text)
} }
//! presents a surface in the client area
bool CIrrDeviceSDL::present(video::IImage* surface, void* windowId, core::rect<s32>* srcClip)
{
#ifdef _IRR_EMSCRIPTEN_PLATFORM_
return true;
#else // !_IRR_EMSCRIPTEN_PLATFORM_
SDL_Surface *sdlSurface = SDL_CreateRGBSurfaceFrom(
surface->getData(), surface->getDimension().Width, surface->getDimension().Height,
surface->getBitsPerPixel(), surface->getPitch(),
surface->getRedMask(), surface->getGreenMask(), surface->getBlueMask(), surface->getAlphaMask());
if (!sdlSurface)
return false;
SDL_SetSurfaceAlphaMod(sdlSurface, 0);
SDL_SetColorKey(sdlSurface, 0, 0);
sdlSurface->format->BitsPerPixel=surface->getBitsPerPixel();
sdlSurface->format->BytesPerPixel=surface->getBytesPerPixel();
if ((surface->getColorFormat()==video::ECF_R8G8B8) ||
(surface->getColorFormat()==video::ECF_A8R8G8B8))
{
sdlSurface->format->Rloss=0;
sdlSurface->format->Gloss=0;
sdlSurface->format->Bloss=0;
sdlSurface->format->Rshift=16;
sdlSurface->format->Gshift=8;
sdlSurface->format->Bshift=0;
if (surface->getColorFormat()==video::ECF_R8G8B8)
{
sdlSurface->format->Aloss=8;
sdlSurface->format->Ashift=32;
}
else
{
sdlSurface->format->Aloss=0;
sdlSurface->format->Ashift=24;
}
}
else if (surface->getColorFormat()==video::ECF_R5G6B5)
{
sdlSurface->format->Rloss=3;
sdlSurface->format->Gloss=2;
sdlSurface->format->Bloss=3;
sdlSurface->format->Aloss=8;
sdlSurface->format->Rshift=11;
sdlSurface->format->Gshift=5;
sdlSurface->format->Bshift=0;
sdlSurface->format->Ashift=16;
}
else if (surface->getColorFormat()==video::ECF_A1R5G5B5)
{
sdlSurface->format->Rloss=3;
sdlSurface->format->Gloss=3;
sdlSurface->format->Bloss=3;
sdlSurface->format->Aloss=7;
sdlSurface->format->Rshift=10;
sdlSurface->format->Gshift=5;
sdlSurface->format->Bshift=0;
sdlSurface->format->Ashift=15;
}
SDL_Surface* scr = (SDL_Surface* )windowId;
if (!scr)
scr = SDL_GetWindowSurface(Window);
if (scr)
{
if (srcClip)
{
SDL_Rect sdlsrcClip;
sdlsrcClip.x = srcClip->UpperLeftCorner.X;
sdlsrcClip.y = srcClip->UpperLeftCorner.Y;
sdlsrcClip.w = srcClip->getWidth();
sdlsrcClip.h = srcClip->getHeight();
SDL_BlitSurface(sdlSurface, &sdlsrcClip, scr, NULL);
}
else
SDL_BlitSurface(sdlSurface, NULL, scr, NULL);
SDL_RenderPresent(SDL_GetRenderer(Window));
}
SDL_FreeSurface(sdlSurface);
return (scr != 0);
#endif // !_IRR_EMSCRIPTEN_PLATFORM_
}
//! notifies the device that it should close itself //! notifies the device that it should close itself
void CIrrDeviceSDL::closeDevice() void CIrrDeviceSDL::closeDevice()
{ {

@ -13,7 +13,6 @@
#include "IrrlichtDevice.h" #include "IrrlichtDevice.h"
#include "CIrrDeviceStub.h" #include "CIrrDeviceStub.h"
#include "IImagePresenter.h"
#include "ICursorControl.h" #include "ICursorControl.h"
#ifdef _IRR_EMSCRIPTEN_PLATFORM_ #ifdef _IRR_EMSCRIPTEN_PLATFORM_
@ -28,7 +27,7 @@
namespace irr namespace irr
{ {
class CIrrDeviceSDL : public CIrrDeviceStub, video::IImagePresenter class CIrrDeviceSDL : public CIrrDeviceStub
{ {
public: public:
@ -62,9 +61,6 @@ namespace irr
//! returns color format of the window. //! returns color format of the window.
video::ECOLOR_FORMAT getColorFormat() const override; video::ECOLOR_FORMAT getColorFormat() const override;
//! presents a surface in the client area
bool present(video::IImage* surface, void* windowId=0, core::rect<s32>* src=0) override;
//! notifies the device that it should close itself //! notifies the device that it should close itself
void closeDevice() override; void closeDevice() override;

@ -6,7 +6,6 @@
#define __C_IRR_DEVICE_STUB_H_INCLUDED__ #define __C_IRR_DEVICE_STUB_H_INCLUDED__
#include "IrrlichtDevice.h" #include "IrrlichtDevice.h"
#include "IImagePresenter.h"
#include "SIrrCreationParameters.h" #include "SIrrCreationParameters.h"
#include "IContextManager.h" #include "IContextManager.h"
@ -36,11 +35,6 @@ namespace irr
namespace video namespace video
{ {
IVideoDriver* createSoftwareDriver(const core::dimension2d<u32>& windowSize,
bool fullscreen, io::IFileSystem* io,
video::IImagePresenter* presenter);
IVideoDriver* createBurningVideoDriver(const irr::SIrrlichtCreationParameters& params,
io::IFileSystem* io, video::IImagePresenter* presenter);
IVideoDriver* createNullDriver(io::IFileSystem* io, const core::dimension2d<u32>& screenSize); IVideoDriver* createNullDriver(io::IFileSystem* io, const core::dimension2d<u32>& screenSize);
} }

@ -1009,24 +1009,6 @@ void CIrrDeviceWin32::createDriver()
case video::EDT_WEBGL1: case video::EDT_WEBGL1:
os::Printer::log("WebGL1 driver not supported on Win32 device.", ELL_ERROR); os::Printer::log("WebGL1 driver not supported on Win32 device.", ELL_ERROR);
break; break;
case video::EDT_SOFTWARE:
#ifdef _IRR_COMPILE_WITH_SOFTWARE_
switchToFullScreen();
VideoDriver = video::createSoftwareDriver(CreationParams.WindowSize, CreationParams.Fullscreen, FileSystem, this);
#else
os::Printer::log("Software driver was not compiled in.", ELL_ERROR);
#endif
break;
case video::EDT_BURNINGSVIDEO:
#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_
switchToFullScreen();
VideoDriver = video::createBurningVideoDriver(CreationParams, FileSystem, this);
#else
os::Printer::log("Burning's Video driver was not compiled in.", ELL_ERROR);
#endif
break;
case video::EDT_NULL: case video::EDT_NULL:
VideoDriver = video::createNullDriver(FileSystem, CreationParams.WindowSize); VideoDriver = video::createNullDriver(FileSystem, CreationParams.WindowSize);
break; break;
@ -1127,54 +1109,6 @@ void CIrrDeviceWin32::setWindowCaption(const wchar_t* text)
} }
//! presents a surface in the client area
bool CIrrDeviceWin32::present(video::IImage* image, void* windowId, core::rect<s32>* src)
{
HWND hwnd = HWnd;
if ( windowId )
hwnd = static_cast<HWND>(windowId);
HDC dc = GetDC(hwnd);
if ( dc )
{
RECT rect;
GetClientRect(hwnd, &rect);
const void* memory = (const void *)image->getData();
BITMAPV4HEADER bi;
ZeroMemory (&bi, sizeof(bi));
bi.bV4Size = sizeof(BITMAPINFOHEADER);
bi.bV4BitCount = (WORD)image->getBitsPerPixel();
bi.bV4Planes = 1;
bi.bV4Width = image->getDimension().Width;
bi.bV4Height = -((s32)image->getDimension().Height);
bi.bV4V4Compression = BI_BITFIELDS;
bi.bV4AlphaMask = image->getAlphaMask();
bi.bV4RedMask = image->getRedMask();
bi.bV4GreenMask = image->getGreenMask();
bi.bV4BlueMask = image->getBlueMask();
if ( src )
{
StretchDIBits(dc, 0,0, rect.right, rect.bottom,
src->UpperLeftCorner.X, src->UpperLeftCorner.Y,
src->getWidth(), src->getHeight(),
memory, (const BITMAPINFO*)(&bi), DIB_RGB_COLORS, SRCCOPY);
}
else
{
StretchDIBits(dc, 0,0, rect.right, rect.bottom,
0, 0, image->getDimension().Width, image->getDimension().Height,
memory, (const BITMAPINFO*)(&bi), DIB_RGB_COLORS, SRCCOPY);
}
ReleaseDC(hwnd, dc);
}
return true;
}
//! notifies the device that it should close itself //! notifies the device that it should close itself
void CIrrDeviceWin32::closeDevice() void CIrrDeviceWin32::closeDevice()
{ {

@ -10,7 +10,6 @@
#include "CIrrDeviceStub.h" #include "CIrrDeviceStub.h"
#include "IrrlichtDevice.h" #include "IrrlichtDevice.h"
#include "IImagePresenter.h"
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
@ -25,7 +24,7 @@ namespace irr
{ {
struct SJoystickWin32Control; struct SJoystickWin32Control;
class CIrrDeviceWin32 : public CIrrDeviceStub, video::IImagePresenter class CIrrDeviceWin32 : public CIrrDeviceStub
{ {
friend struct SJoystickWin32Control; friend struct SJoystickWin32Control;
public: public:
@ -58,9 +57,6 @@ namespace irr
//! returns if window is minimized //! returns if window is minimized
bool isWindowMinimized() const override; bool isWindowMinimized() const override;
//! presents a surface in the client area
bool present(video::IImage* surface, void* windowId=0, core::rect<s32>* src=0) override;
//! notifies the device that it should close itself //! notifies the device that it should close itself
void closeDevice() override; void closeDevice() override;

@ -13,12 +13,11 @@
#include "CIrrDeviceStub.h" #include "CIrrDeviceStub.h"
#include "IrrlichtDevice.h" #include "IrrlichtDevice.h"
#include "IImagePresenter.h"
namespace irr namespace irr
{ {
class CIrrDeviceiOS : public CIrrDeviceStub, public video::IImagePresenter class CIrrDeviceiOS : public CIrrDeviceStub
{ {
public: public:
CIrrDeviceiOS(const SIrrlichtCreationParameters& params); CIrrDeviceiOS(const SIrrlichtCreationParameters& params);
@ -34,8 +33,6 @@ namespace irr
bool isWindowFocused() const override; bool isWindowFocused() const override;
bool isWindowMinimized() const override; bool isWindowMinimized() const override;
bool present(video::IImage* surface, void * windowId = 0, core::rect<s32>* src = 0) override;
void closeDevice() override; void closeDevice() override;
void setResizable(bool resize = false) override; void setResizable(bool resize = false) override;

@ -480,11 +480,6 @@ namespace irr
#endif #endif
} }
bool CIrrDeviceiOS::present(video::IImage* image, void * windowId, core::rect<s32>* src)
{
return false;
}
void CIrrDeviceiOS::closeDevice() void CIrrDeviceiOS::closeDevice()
{ {
CFRunLoopStop(CFRunLoopGetMain()); CFRunLoopStop(CFRunLoopGetMain());

@ -7,7 +7,6 @@
#include "IVideoDriver.h" #include "IVideoDriver.h"
#include "IFileSystem.h" #include "IFileSystem.h"
#include "IImagePresenter.h"
#include "IGPUProgrammingServices.h" #include "IGPUProgrammingServices.h"
#include "irrArray.h" #include "irrArray.h"
#include "irrString.h" #include "irrString.h"

@ -1,36 +0,0 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_IMAGE_PRESENTER_H_INCLUDED__
#define __I_IMAGE_PRESENTER_H_INCLUDED__
#include "IImage.h"
namespace irr
{
namespace video
{
/*!
Interface for a class which is able to present an IImage
an the Screen. Usually only implemented by an IrrDevice for
presenting Software Device Rendered images.
This class should be used only internally.
*/
class IImagePresenter
{
public:
virtual ~IImagePresenter() {};
//! presents a surface in the client area
virtual bool present(video::IImage* surface, void* windowId=0, core::rect<s32>* src=0 ) = 0;
};
} // end namespace video
} // end namespace irr
#endif