// SwiftShader Software Renderer | |
// | |
// Copyright(c) 2005-2012 TransGaming Inc. | |
// | |
// All rights reserved. No part of this software may be copied, distributed, transmitted, | |
// transcribed, stored in a retrieval system, translated into any human or computer | |
// language by any means, or disclosed to third parties without the explicit written | |
// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express | |
// or implied, including but not limited to any patent rights, are granted to you. | |
// | |
#include "FrameBufferWin.hpp" | |
namespace sw | |
{ | |
FrameBufferWin::FrameBufferWin(HWND windowHandle, int width, int height, bool fullscreen, bool topLeftOrigin) : FrameBuffer(width, height, fullscreen, topLeftOrigin), windowHandle(windowHandle) | |
{ | |
if(!windowed) | |
{ | |
// Force fullscreen window style (no borders) | |
originalWindowStyle = GetWindowLong(windowHandle, GWL_STYLE); | |
SetWindowLong(windowHandle, GWL_STYLE, WS_POPUP); | |
} | |
} | |
FrameBufferWin::~FrameBufferWin() | |
{ | |
if(!windowed && GetWindowLong(windowHandle, GWL_STYLE) == WS_POPUP) | |
{ | |
SetWindowLong(windowHandle, GWL_STYLE, originalWindowStyle); | |
} | |
} | |
void FrameBufferWin::updateBounds(HWND windowOverride) | |
{ | |
HWND window = windowOverride ? windowOverride : windowHandle; | |
if(windowed) | |
{ | |
GetClientRect(window, &bounds); | |
ClientToScreen(window, (POINT*)&bounds); | |
ClientToScreen(window, (POINT*)&bounds + 1); | |
} | |
else | |
{ | |
SetRect(&bounds, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); | |
} | |
} | |
} | |
#include "FrameBufferDD.hpp" | |
#include "FrameBufferGDI.hpp" | |
#include "Common/Configurator.hpp" | |
sw::FrameBufferWin *createFrameBufferWin(HWND windowHandle, int width, int height, bool fullscreen, bool topLeftOrigin) | |
{ | |
sw::Configurator ini("SwiftShader.ini"); | |
int api = ini.getInteger("Testing", "FrameBufferAPI", 0); | |
if(api == 0 && topLeftOrigin) | |
{ | |
return new sw::FrameBufferDD(windowHandle, width, height, fullscreen, topLeftOrigin); | |
} | |
else | |
{ | |
return new sw::FrameBufferGDI(windowHandle, width, height, fullscreen, topLeftOrigin); | |
} | |
return 0; | |
} | |
sw::FrameBuffer *createFrameBuffer(void *display, HWND window, int width, int height) | |
{ | |
return createFrameBufferWin(window, width, height, false, false); | |
} |