mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Fix the video software backend. (closes issue 4269)
Some warning fixes and cleanup. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7361 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -23,9 +23,8 @@
|
|||||||
#include "../../../Plugins/Plugin_VideoDX11/Src/VideoBackend.h"
|
#include "../../../Plugins/Plugin_VideoDX11/Src/VideoBackend.h"
|
||||||
#endif
|
#endif
|
||||||
#include "../../../Plugins/Plugin_VideoOGL/Src/VideoBackend.h"
|
#include "../../../Plugins/Plugin_VideoOGL/Src/VideoBackend.h"
|
||||||
#ifndef _WIN32
|
|
||||||
#include "../../../Plugins/Plugin_VideoSoftware/Src/VideoBackend.h"
|
#include "../../../Plugins/Plugin_VideoSoftware/Src/VideoBackend.h"
|
||||||
#endif
|
|
||||||
std::vector<VideoBackend*> g_available_video_backends;
|
std::vector<VideoBackend*> g_available_video_backends;
|
||||||
VideoBackend* g_video_backend = NULL;
|
VideoBackend* g_video_backend = NULL;
|
||||||
|
|
||||||
@ -37,11 +36,9 @@ void VideoBackend::PopulateList()
|
|||||||
g_available_video_backends.push_back(new DX11::VideoBackend);
|
g_available_video_backends.push_back(new DX11::VideoBackend);
|
||||||
#endif
|
#endif
|
||||||
g_available_video_backends.push_back(new OGL::VideoBackend);
|
g_available_video_backends.push_back(new OGL::VideoBackend);
|
||||||
#ifndef _WIN32
|
g_available_video_backends.push_back(new SW::VideoSoftware);
|
||||||
g_available_video_backends.push_back(new SW::VideoBackend);
|
|
||||||
#endif
|
|
||||||
g_video_backend = g_available_video_backends.front();
|
|
||||||
|
|
||||||
|
g_video_backend = g_available_video_backends.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::ClearList()
|
void VideoBackend::ClearList()
|
||||||
|
@ -23,6 +23,11 @@
|
|||||||
|
|
||||||
#include "ChunkFile.h"
|
#include "ChunkFile.h"
|
||||||
|
|
||||||
|
typedef void (*writeFn16)(const u16,const u32);
|
||||||
|
typedef void (*writeFn32)(const u32,const u32);
|
||||||
|
typedef void (*readFn16)(u16&, const u32);
|
||||||
|
|
||||||
|
|
||||||
enum FieldType
|
enum FieldType
|
||||||
{
|
{
|
||||||
FIELD_PROGRESSIVE = 0,
|
FIELD_PROGRESSIVE = 0,
|
||||||
@ -97,7 +102,6 @@ public:
|
|||||||
virtual void ShowConfig(void*) {}
|
virtual void ShowConfig(void*) {}
|
||||||
|
|
||||||
virtual void Video_Prepare() = 0;
|
virtual void Video_Prepare() = 0;
|
||||||
|
|
||||||
virtual void Video_EnterLoop() = 0;
|
virtual void Video_EnterLoop() = 0;
|
||||||
virtual void Video_ExitLoop() = 0;
|
virtual void Video_ExitLoop() = 0;
|
||||||
|
|
||||||
@ -112,11 +116,17 @@ public:
|
|||||||
|
|
||||||
virtual void Video_SetRendering(bool bEnabled) = 0;
|
virtual void Video_SetRendering(bool bEnabled) = 0;
|
||||||
|
|
||||||
static void Video_GatherPipeBursted();
|
virtual void Video_GatherPipeBursted() = 0;
|
||||||
|
|
||||||
virtual bool Video_IsPossibleWaitingSetDrawDone() = 0;
|
virtual bool Video_IsPossibleWaitingSetDrawDone() = 0;
|
||||||
virtual void Video_AbortFrame() = 0;
|
virtual void Video_AbortFrame() = 0;
|
||||||
|
|
||||||
|
virtual readFn16 Video_CPRead16() = 0;
|
||||||
|
virtual writeFn16 Video_CPWrite16() = 0;
|
||||||
|
virtual readFn16 Video_PERead16() = 0;
|
||||||
|
virtual writeFn16 Video_PEWrite16() = 0;
|
||||||
|
virtual writeFn32 Video_PEWrite32() = 0;
|
||||||
|
|
||||||
static void PopulateList();
|
static void PopulateList();
|
||||||
static void ClearList();
|
static void ClearList();
|
||||||
static void ActivateBackend(const std::string& name);
|
static void ActivateBackend(const std::string& name);
|
||||||
@ -126,7 +136,7 @@ extern std::vector<VideoBackend*> g_available_video_backends;
|
|||||||
extern VideoBackend* g_video_backend;
|
extern VideoBackend* g_video_backend;
|
||||||
|
|
||||||
// inherited by dx9/dx11/ogl backends
|
// inherited by dx9/dx11/ogl backends
|
||||||
class VideoBackendHLE : public VideoBackend
|
class VideoBackendHardware : public VideoBackend
|
||||||
{
|
{
|
||||||
void DoState(PointerWrap &p);
|
void DoState(PointerWrap &p);
|
||||||
void RunLoop(bool enable);
|
void RunLoop(bool enable);
|
||||||
@ -145,14 +155,16 @@ class VideoBackendHLE : public VideoBackend
|
|||||||
|
|
||||||
void Video_SetRendering(bool bEnabled);
|
void Video_SetRendering(bool bEnabled);
|
||||||
|
|
||||||
|
void Video_GatherPipeBursted();
|
||||||
|
|
||||||
bool Video_IsPossibleWaitingSetDrawDone();
|
bool Video_IsPossibleWaitingSetDrawDone();
|
||||||
void Video_AbortFrame();
|
void Video_AbortFrame();
|
||||||
};
|
|
||||||
|
|
||||||
// inherited by software renderer
|
|
||||||
class VideoBackendLLE : public VideoBackend
|
|
||||||
{
|
|
||||||
|
|
||||||
|
readFn16 Video_CPRead16();
|
||||||
|
writeFn16 Video_CPWrite16();
|
||||||
|
readFn16 Video_PERead16();
|
||||||
|
writeFn16 Video_PEWrite16();
|
||||||
|
writeFn32 Video_PEWrite32();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -45,8 +45,7 @@ may be redirected here (for example to Read_U32()).
|
|||||||
#include "WII_IPC.h"
|
#include "WII_IPC.h"
|
||||||
#include "../ConfigManager.h"
|
#include "../ConfigManager.h"
|
||||||
#include "../Debugger/Debugger_SymbolMap.h"
|
#include "../Debugger/Debugger_SymbolMap.h"
|
||||||
#include "CommandProcessor.h"
|
#include "VideoBackendBase.h"
|
||||||
#include "PixelEngine.h"
|
|
||||||
|
|
||||||
namespace Memory
|
namespace Memory
|
||||||
{
|
{
|
||||||
@ -180,12 +179,12 @@ void InitHWMemFuncs()
|
|||||||
|
|
||||||
for (int i = 0; i < BLOCKSIZE; i++)
|
for (int i = 0; i < BLOCKSIZE; i++)
|
||||||
{
|
{
|
||||||
hwRead16 [CP_START+i] = CommandProcessor::Read16;
|
hwRead16 [CP_START+i] = g_video_backend->Video_CPRead16();
|
||||||
hwWrite16[CP_START+i] = CommandProcessor::Write16;
|
hwWrite16[CP_START+i] = g_video_backend->Video_CPWrite16();
|
||||||
|
|
||||||
hwRead16 [PE_START+i] = PixelEngine::Read16;
|
hwRead16 [PE_START+i] = g_video_backend->Video_PERead16();
|
||||||
hwWrite16[PE_START+i] = PixelEngine::Write16;
|
hwWrite16[PE_START+i] = g_video_backend->Video_PEWrite16();
|
||||||
hwWrite32[PE_START+i] = PixelEngine::Write32;
|
hwWrite32[PE_START+i] = g_video_backend->Video_PEWrite32();
|
||||||
|
|
||||||
hwRead8 [VI_START+i] = VideoInterface::Read8;
|
hwRead8 [VI_START+i] = VideoInterface::Read8;
|
||||||
hwRead16 [VI_START+i] = VideoInterface::Read16;
|
hwRead16 [VI_START+i] = VideoInterface::Read16;
|
||||||
@ -253,12 +252,12 @@ void InitHWMemFuncsWii()
|
|||||||
// MI, PI, DSP are still mapped to 0xCCxxxxxx
|
// MI, PI, DSP are still mapped to 0xCCxxxxxx
|
||||||
for (int i = 0; i < BLOCKSIZE; i++)
|
for (int i = 0; i < BLOCKSIZE; i++)
|
||||||
{
|
{
|
||||||
hwRead16 [CP_START+i] = CommandProcessor::Read16;
|
hwRead16 [CP_START+i] = g_video_backend->Video_CPRead16();
|
||||||
hwWrite16[CP_START+i] = CommandProcessor::Write16;
|
hwWrite16[CP_START+i] = g_video_backend->Video_CPWrite16();
|
||||||
|
|
||||||
hwRead16 [PE_START+i] = PixelEngine::Read16;
|
hwRead16 [PE_START+i] = g_video_backend->Video_PERead16();
|
||||||
hwWrite16[PE_START+i] = PixelEngine::Write16;
|
hwWrite16[PE_START+i] = g_video_backend->Video_PEWrite16();
|
||||||
hwWrite32[PE_START+i] = PixelEngine::Write32;
|
hwWrite32[PE_START+i] = g_video_backend->Video_PEWrite32();
|
||||||
|
|
||||||
hwRead16 [PI_START+i] = ProcessorInterface::Read16;
|
hwRead16 [PI_START+i] = ProcessorInterface::Read16;
|
||||||
hwRead32 [PI_START+i] = ProcessorInterface::Read32;
|
hwRead32 [PI_START+i] = ProcessorInterface::Read32;
|
||||||
|
@ -359,6 +359,9 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
|||||||
<ProjectReference Include="..\..\Plugins\Plugin_VideoOGL\Plugin_VideoOGL.vcxproj">
|
<ProjectReference Include="..\..\Plugins\Plugin_VideoOGL\Plugin_VideoOGL.vcxproj">
|
||||||
<Project>{1909cd2d-1707-456f-86ca-0df42a727c99}</Project>
|
<Project>{1909cd2d-1707-456f-86ca-0df42a727c99}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\Plugins\Plugin_VideoSoftware\Plugin_VideoSoftware.vcxproj">
|
||||||
|
<Project>{9e9da440-e9ad-413c-b648-91030e792211}</Project>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\AudioCommon\AudioCommon.vcxproj">
|
<ProjectReference Include="..\AudioCommon\AudioCommon.vcxproj">
|
||||||
<Project>{37d007bd-d66c-4eaf-b56c-bd1aac340a05}</Project>
|
<Project>{37d007bd-d66c-4eaf-b56c-bd1aac340a05}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
@ -384,4 +387,4 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
@ -199,7 +199,7 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
|
|||||||
if (wParam == WM_USER_KEYDOWN)
|
if (wParam == WM_USER_KEYDOWN)
|
||||||
{
|
{
|
||||||
OnKeyDown(lParam);
|
OnKeyDown(lParam);
|
||||||
FreeLookInput(wParam, lParam);
|
FreeLookInput((u32)wParam, lParam);
|
||||||
}
|
}
|
||||||
else if (wParam == WIIMOTE_DISCONNECT)
|
else if (wParam == WIIMOTE_DISCONNECT)
|
||||||
{
|
{
|
||||||
|
@ -143,7 +143,7 @@ void RunGpuLoop()
|
|||||||
if (!GpuRunningState) break;
|
if (!GpuRunningState) break;
|
||||||
|
|
||||||
fifo.isGpuReadingData = true;
|
fifo.isGpuReadingData = true;
|
||||||
CommandProcessor::isPossibleWaitingSetDrawDone = fifo.bFF_GPLinkEnable;
|
CommandProcessor::isPossibleWaitingSetDrawDone = fifo.bFF_GPLinkEnable ? true : false;
|
||||||
|
|
||||||
u32 readPtr = fifo.CPReadPointer;
|
u32 readPtr = fifo.CPReadPointer;
|
||||||
u8 *uData = Memory::GetPointer(readPtr);
|
u8 *uData = Memory::GetPointer(readPtr);
|
||||||
|
@ -39,24 +39,24 @@ static struct
|
|||||||
|
|
||||||
static u32 s_AccessEFBResult = 0;
|
static u32 s_AccessEFBResult = 0;
|
||||||
|
|
||||||
void VideoBackendHLE::EmuStateChange(EMUSTATE_CHANGE newState)
|
void VideoBackendHardware::EmuStateChange(EMUSTATE_CHANGE newState)
|
||||||
{
|
{
|
||||||
EmulatorState((newState == EMUSTATE_CHANGE_PLAY) ? true : false);
|
EmulatorState((newState == EMUSTATE_CHANGE_PLAY) ? true : false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enter and exit the video loop
|
// Enter and exit the video loop
|
||||||
void VideoBackendHLE::Video_EnterLoop()
|
void VideoBackendHardware::Video_EnterLoop()
|
||||||
{
|
{
|
||||||
RunGpuLoop();
|
RunGpuLoop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendHLE::Video_ExitLoop()
|
void VideoBackendHardware::Video_ExitLoop()
|
||||||
{
|
{
|
||||||
ExitGpuLoop();
|
ExitGpuLoop();
|
||||||
s_FifoShuttingDown = true;
|
s_FifoShuttingDown = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendHLE::Video_SetRendering(bool bEnabled)
|
void VideoBackendHardware::Video_SetRendering(bool bEnabled)
|
||||||
{
|
{
|
||||||
Fifo_SetRendering(bEnabled);
|
Fifo_SetRendering(bEnabled);
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ void VideoFifo_CheckSwapRequestAt(u32 xfbAddr, u32 fbWidth, u32 fbHeight)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run from the CPU thread (from VideoInterface.cpp)
|
// Run from the CPU thread (from VideoInterface.cpp)
|
||||||
void VideoBackendHLE::Video_BeginField(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight)
|
void VideoBackendHardware::Video_BeginField(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight)
|
||||||
{
|
{
|
||||||
if (s_BackendInitialized && g_ActiveConfig.bUseXFB)
|
if (s_BackendInitialized && g_ActiveConfig.bUseXFB)
|
||||||
{
|
{
|
||||||
@ -108,7 +108,7 @@ void VideoBackendHLE::Video_BeginField(u32 xfbAddr, FieldType field, u32 fbWidth
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run from the CPU thread (from VideoInterface.cpp)
|
// Run from the CPU thread (from VideoInterface.cpp)
|
||||||
void VideoBackendHLE::Video_EndField()
|
void VideoBackendHardware::Video_EndField()
|
||||||
{
|
{
|
||||||
if (s_BackendInitialized)
|
if (s_BackendInitialized)
|
||||||
{
|
{
|
||||||
@ -116,18 +116,18 @@ void VideoBackendHLE::Video_EndField()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendHLE::Video_AddMessage(const char* pstr, u32 milliseconds)
|
void VideoBackendHardware::Video_AddMessage(const char* pstr, u32 milliseconds)
|
||||||
{
|
{
|
||||||
OSD::AddMessage(pstr, milliseconds);
|
OSD::AddMessage(pstr, milliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendHLE::Video_ClearMessages()
|
void VideoBackendHardware::Video_ClearMessages()
|
||||||
{
|
{
|
||||||
OSD::ClearMessages();
|
OSD::ClearMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Screenshot
|
// Screenshot
|
||||||
bool VideoBackendHLE::Video_Screenshot(const char *_szFilename)
|
bool VideoBackendHardware::Video_Screenshot(const char *_szFilename)
|
||||||
{
|
{
|
||||||
Renderer::SetScreenshot(_szFilename);
|
Renderer::SetScreenshot(_szFilename);
|
||||||
return true;
|
return true;
|
||||||
@ -143,7 +143,7 @@ void VideoFifo_CheckEFBAccess()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 VideoBackendHLE::Video_AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputData)
|
u32 VideoBackendHardware::Video_AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputData)
|
||||||
{
|
{
|
||||||
if (s_BackendInitialized)
|
if (s_BackendInitialized)
|
||||||
{
|
{
|
||||||
@ -202,7 +202,7 @@ void VideoFifo_CheckStateRequest()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run from the CPU thread
|
// Run from the CPU thread
|
||||||
void VideoBackendHLE::DoState(PointerWrap& p)
|
void VideoBackendHardware::DoState(PointerWrap& p)
|
||||||
{
|
{
|
||||||
s_doStateArgs.ptr = p.ptr;
|
s_doStateArgs.ptr = p.ptr;
|
||||||
s_doStateArgs.mode = p.mode;
|
s_doStateArgs.mode = p.mode;
|
||||||
@ -217,7 +217,7 @@ void VideoBackendHLE::DoState(PointerWrap& p)
|
|||||||
VideoFifo_CheckStateRequest();
|
VideoFifo_CheckStateRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendHLE::RunLoop(bool enable)
|
void VideoBackendHardware::RunLoop(bool enable)
|
||||||
{
|
{
|
||||||
VideoCommon_RunLoop(enable);
|
VideoCommon_RunLoop(enable);
|
||||||
}
|
}
|
||||||
@ -228,17 +228,39 @@ void VideoFifo_CheckAsyncRequest()
|
|||||||
VideoFifo_CheckEFBAccess();
|
VideoFifo_CheckEFBAccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::Video_GatherPipeBursted()
|
void VideoBackendHardware::Video_GatherPipeBursted()
|
||||||
{
|
{
|
||||||
CommandProcessor::GatherPipeBursted();
|
CommandProcessor::GatherPipeBursted();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VideoBackendHLE::Video_IsPossibleWaitingSetDrawDone()
|
bool VideoBackendHardware::Video_IsPossibleWaitingSetDrawDone()
|
||||||
{
|
{
|
||||||
return CommandProcessor::isPossibleWaitingSetDrawDone;
|
return CommandProcessor::isPossibleWaitingSetDrawDone;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendHLE::Video_AbortFrame()
|
void VideoBackendHardware::Video_AbortFrame()
|
||||||
{
|
{
|
||||||
CommandProcessor::AbortFrame();
|
CommandProcessor::AbortFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
readFn16 VideoBackendHardware::Video_CPRead16()
|
||||||
|
{
|
||||||
|
return CommandProcessor::Read16;
|
||||||
|
}
|
||||||
|
writeFn16 VideoBackendHardware::Video_CPWrite16()
|
||||||
|
{
|
||||||
|
return CommandProcessor::Write16;
|
||||||
|
}
|
||||||
|
|
||||||
|
readFn16 VideoBackendHardware::Video_PERead16()
|
||||||
|
{
|
||||||
|
return PixelEngine::Read16;
|
||||||
|
}
|
||||||
|
writeFn16 VideoBackendHardware::Video_PEWrite16()
|
||||||
|
{
|
||||||
|
return PixelEngine::Write16;
|
||||||
|
}
|
||||||
|
writeFn32 VideoBackendHardware::Video_PEWrite32()
|
||||||
|
{
|
||||||
|
return PixelEngine::Write32;
|
||||||
|
}
|
||||||
|
@ -4,6 +4,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\D
|
|||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
{8C60E805-0DA5-4E25-8F84-038DB504BB0D} = {8C60E805-0DA5-4E25-8F84-038DB504BB0D}
|
{8C60E805-0DA5-4E25-8F84-038DB504BB0D} = {8C60E805-0DA5-4E25-8F84-038DB504BB0D}
|
||||||
{69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06}
|
{69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06}
|
||||||
|
{9E9DA440-E9AD-413C-B648-91030E792211} = {9E9DA440-E9AD-413C-B648-91030E792211}
|
||||||
{93D73454-2512-424E-9CDA-4BB357FE13DD} = {93D73454-2512-424E-9CDA-4BB357FE13DD}
|
{93D73454-2512-424E-9CDA-4BB357FE13DD} = {93D73454-2512-424E-9CDA-4BB357FE13DD}
|
||||||
{B6398059-EBB6-4C34-B547-95F365B71FF4} = {B6398059-EBB6-4C34-B547-95F365B71FF4}
|
{B6398059-EBB6-4C34-B547-95F365B71FF4} = {B6398059-EBB6-4C34-B547-95F365B71FF4}
|
||||||
{AA862E5E-A993-497A-B6A0-0E8E94B10050} = {AA862E5E-A993-497A-B6A0-0E8E94B10050}
|
{AA862E5E-A993-497A-B6A0-0E8E94B10050} = {AA862E5E-A993-497A-B6A0-0E8E94B10050}
|
||||||
@ -131,7 +132,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoOGL", "Plugins\Plugin_
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoSoftware", "Plugins\Plugin_VideoSoftware\Plugin_VideoSoftware.vcxproj", "{9E9DA440-E9AD-413C-B648-91030E792211}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoSoftware", "Plugins\Plugin_VideoSoftware\Plugin_VideoSoftware.vcxproj", "{9E9DA440-E9AD-413C-B648-91030E792211}"
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
{3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF} = {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}
|
|
||||||
{69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06}
|
{69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
namespace DX11
|
namespace DX11
|
||||||
{
|
{
|
||||||
|
|
||||||
class VideoBackend : public VideoBackendHLE
|
class VideoBackend : public VideoBackendHardware
|
||||||
{
|
{
|
||||||
bool Initialize(void *&);
|
bool Initialize(void *&);
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
namespace DX9
|
namespace DX9
|
||||||
{
|
{
|
||||||
|
|
||||||
class VideoBackend : public VideoBackendHLE
|
class VideoBackend : public VideoBackendHardware
|
||||||
{
|
{
|
||||||
bool Initialize(void *&);
|
bool Initialize(void *&);
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
@ -293,7 +293,7 @@ void GLVertexFormat::EnableComponents(u32 components)
|
|||||||
// TODO - Is this a good spot for this code?
|
// TODO - Is this a good spot for this code?
|
||||||
if (g_ActiveConfig.bDisableLighting)
|
if (g_ActiveConfig.bDisableLighting)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < xfregs.numChan.numColorChans; i++)
|
for (u32 i = 0; i < xfregs.numChan.numColorChans; i++)
|
||||||
{
|
{
|
||||||
xfregs.alpha[i].enablelighting = false;
|
xfregs.alpha[i].enablelighting = false;
|
||||||
xfregs.color[i].enablelighting = false;
|
xfregs.color[i].enablelighting = false;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
namespace OGL
|
namespace OGL
|
||||||
{
|
{
|
||||||
|
|
||||||
class VideoBackend : public VideoBackendHLE
|
class VideoBackend : public VideoBackendHardware
|
||||||
{
|
{
|
||||||
bool Initialize(void *&);
|
bool Initialize(void *&);
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
@ -203,7 +203,6 @@
|
|||||||
<ClCompile Include="Src\TransformUnit.cpp" />
|
<ClCompile Include="Src\TransformUnit.cpp" />
|
||||||
<ClCompile Include="Src\SWVertexLoader.cpp" />
|
<ClCompile Include="Src\SWVertexLoader.cpp" />
|
||||||
<ClCompile Include="Src\VideoConfigDialog.cpp" />
|
<ClCompile Include="Src\VideoConfigDialog.cpp" />
|
||||||
<ClCompile Include="Src\Win32.cpp" />
|
|
||||||
<ClCompile Include="Src\XFMemLoader.cpp" />
|
<ClCompile Include="Src\XFMemLoader.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -230,10 +229,8 @@
|
|||||||
<ClInclude Include="Src\TransformUnit.h" />
|
<ClInclude Include="Src\TransformUnit.h" />
|
||||||
<ClInclude Include="Src\Vec3.h" />
|
<ClInclude Include="Src\Vec3.h" />
|
||||||
<ClInclude Include="Src\SWVertexLoader.h" />
|
<ClInclude Include="Src\SWVertexLoader.h" />
|
||||||
<ClInclude Include="Src\VertexLoader_Position.h" />
|
|
||||||
<ClInclude Include="Src\VideoBackend.h" />
|
<ClInclude Include="Src\VideoBackend.h" />
|
||||||
<ClInclude Include="Src\VideoConfigDialog.h" />
|
<ClInclude Include="Src\VideoConfigDialog.h" />
|
||||||
<ClInclude Include="Src\Win32.h" />
|
|
||||||
<ClInclude Include="Src\XFMemLoader.h" />
|
<ClInclude Include="Src\XFMemLoader.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -25,9 +25,6 @@
|
|||||||
<ClCompile Include="Src\SWVertexLoader.cpp" />
|
<ClCompile Include="Src\SWVertexLoader.cpp" />
|
||||||
<ClCompile Include="Src\VideoConfigDialog.cpp" />
|
<ClCompile Include="Src\VideoConfigDialog.cpp" />
|
||||||
<ClCompile Include="Src\XFMemLoader.cpp" />
|
<ClCompile Include="Src\XFMemLoader.cpp" />
|
||||||
<ClCompile Include="Src\Win32.cpp">
|
|
||||||
<Filter>Win32</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Src\BPMemLoader.h" />
|
<ClInclude Include="Src\BPMemLoader.h" />
|
||||||
@ -56,12 +53,6 @@
|
|||||||
<ClInclude Include="Src\VideoBackend.h" />
|
<ClInclude Include="Src\VideoBackend.h" />
|
||||||
<ClInclude Include="Src\VideoConfigDialog.h" />
|
<ClInclude Include="Src\VideoConfigDialog.h" />
|
||||||
<ClInclude Include="Src\XFMemLoader.h" />
|
<ClInclude Include="Src\XFMemLoader.h" />
|
||||||
<ClInclude Include="Src\Win32.h">
|
|
||||||
<Filter>Win32</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="Src\VertexLoader_Position.h">
|
|
||||||
<Filter>Common</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="CMakeLists.txt" />
|
<None Include="CMakeLists.txt" />
|
||||||
@ -71,8 +62,5 @@
|
|||||||
<Filter Include="Win32">
|
<Filter Include="Win32">
|
||||||
<UniqueIdentifier>{081288cb-a63b-4ae9-93eb-e668568520b8}</UniqueIdentifier>
|
<UniqueIdentifier>{081288cb-a63b-4ae9-93eb-e668568520b8}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="Common">
|
|
||||||
<UniqueIdentifier>{80e30848-1174-4168-a8f7-da2553f872b1}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -15,18 +15,17 @@
|
|||||||
// Official SVN repository and contact information can be found at
|
// Official SVN repository and contact information can be found at
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
#include "../../../Core/VideoCommon/Src/VideoCommon.h"
|
#include "VideoCommon.h"
|
||||||
|
#include "TextureDecoder.h"
|
||||||
|
|
||||||
#include "BPMemLoader.h"
|
#include "BPMemLoader.h"
|
||||||
#include "EfbCopy.h"
|
#include "EfbCopy.h"
|
||||||
#include "Rasterizer.h"
|
#include "Rasterizer.h"
|
||||||
#include "SWPixelEngine.h"
|
#include "SWPixelEngine.h"
|
||||||
#include "Tev.h"
|
#include "Tev.h"
|
||||||
#include "../../../Core/VideoCommon/Src/TextureDecoder.h"
|
|
||||||
#include "HW/Memmap.h"
|
#include "HW/Memmap.h"
|
||||||
#include "Core.h"
|
#include "Core.h"
|
||||||
|
|
||||||
extern BPMemory bpmem;
|
|
||||||
|
|
||||||
void InitBPMemory()
|
void InitBPMemory()
|
||||||
{
|
{
|
||||||
|
@ -20,8 +20,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include "BPMemory.h"
|
||||||
#include "../../../Core/VideoCommon/Src/BPMemory.h"
|
|
||||||
|
|
||||||
void InitBPMemory();
|
void InitBPMemory();
|
||||||
void SWBPWritten(int address, int newvalue);
|
void SWBPWritten(int address, int newvalue);
|
||||||
|
@ -19,62 +19,52 @@
|
|||||||
#include "CPMemLoader.h"
|
#include "CPMemLoader.h"
|
||||||
#include "HW/Memmap.h"
|
#include "HW/Memmap.h"
|
||||||
|
|
||||||
// CP state
|
|
||||||
static u8 *_cached_arraybases[16];
|
|
||||||
|
|
||||||
// STATE_TO_SAVE
|
|
||||||
static u32 _arraybases[16];
|
|
||||||
static u32 _arraystrides[16];
|
|
||||||
static TMatrixIndexA _MatrixIndexA;
|
|
||||||
static TMatrixIndexB _MatrixIndexB;
|
|
||||||
static TVtxDesc _g_VtxDesc;
|
|
||||||
static VAT _g_VtxAttr[8];
|
|
||||||
|
|
||||||
void SWLoadCPReg(u32 sub_cmd, u32 value)
|
void SWLoadCPReg(u32 sub_cmd, u32 value)
|
||||||
{
|
{
|
||||||
switch (sub_cmd & 0xF0)
|
switch (sub_cmd & 0xF0)
|
||||||
{
|
{
|
||||||
case 0x30:
|
case 0x30:
|
||||||
_MatrixIndexA.Hex = value;
|
MatrixIndexA.Hex = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x40:
|
case 0x40:
|
||||||
_MatrixIndexB.Hex = value;
|
MatrixIndexB.Hex = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x50:
|
case 0x50:
|
||||||
_g_VtxDesc.Hex &= ~0x1FFFF; // keep the Upper bits
|
g_VtxDesc.Hex &= ~0x1FFFF; // keep the Upper bits
|
||||||
_g_VtxDesc.Hex |= value;
|
g_VtxDesc.Hex |= value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x60:
|
case 0x60:
|
||||||
_g_VtxDesc.Hex &= 0x1FFFF; // keep the lower 17Bits
|
g_VtxDesc.Hex &= 0x1FFFF; // keep the lower 17Bits
|
||||||
_g_VtxDesc.Hex |= (u64)value << 17;
|
g_VtxDesc.Hex |= (u64)value << 17;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x70:
|
case 0x70:
|
||||||
_assert_((sub_cmd & 0x0F) < 8);
|
_assert_((sub_cmd & 0x0F) < 8);
|
||||||
_g_VtxAttr[sub_cmd & 7].g0.Hex = value;
|
g_VtxAttr[sub_cmd & 7].g0.Hex = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x80:
|
case 0x80:
|
||||||
_assert_((sub_cmd & 0x0F) < 8);
|
_assert_((sub_cmd & 0x0F) < 8);
|
||||||
_g_VtxAttr[sub_cmd & 7].g1.Hex = value;
|
g_VtxAttr[sub_cmd & 7].g1.Hex = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x90:
|
case 0x90:
|
||||||
_assert_((sub_cmd & 0x0F) < 8);
|
_assert_((sub_cmd & 0x0F) < 8);
|
||||||
_g_VtxAttr[sub_cmd & 7].g2.Hex = value;
|
g_VtxAttr[sub_cmd & 7].g2.Hex = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Pointers to vertex arrays in GC RAM
|
// Pointers to vertex arrays in GC RAM
|
||||||
case 0xA0:
|
case 0xA0:
|
||||||
_arraybases[sub_cmd & 0xF] = value;
|
arraybases[sub_cmd & 0xF] = value;
|
||||||
_cached_arraybases[sub_cmd & 0xF] = Memory::GetPointer(value);
|
cached_arraybases[sub_cmd & 0xF] = Memory::GetPointer(value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xB0:
|
case 0xB0:
|
||||||
_arraystrides[sub_cmd & 0xF] = value & 0xFF;
|
arraystrides[sub_cmd & 0xF] = value & 0xFF;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include "CPMemory.h"
|
||||||
#include "../../../Core/VideoCommon/Src/CPMemory.h"
|
|
||||||
|
|
||||||
void SWLoadCPReg(u32 sub_cmd, u32 value);
|
void SWLoadCPReg(u32 sub_cmd, u32 value);
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
#include "HwRasterizer.h"
|
#include "HwRasterizer.h"
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
#include "SWCommandProcessor.h"
|
#include "SWCommandProcessor.h"
|
||||||
#include "../../../Core/VideoCommon/Src/ImageWrite.h"
|
#include "ImageWrite.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
|
|
||||||
namespace DebugUtil
|
namespace DebugUtil
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
#include "EfbInterface.h"
|
#include "EfbInterface.h"
|
||||||
#include "BPMemLoader.h"
|
#include "BPMemLoader.h"
|
||||||
#include "../../../Core/VideoCommon/Src/LookUpTables.h"
|
#include "LookUpTables.h"
|
||||||
#include "SWPixelEngine.h"
|
#include "SWPixelEngine.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
|
||||||
#include "../../../Core/VideoCommon/Src/DataReader.h"
|
#include "DataReader.h"
|
||||||
|
|
||||||
#include "OpcodeDecoder.h"
|
#include "OpcodeDecoder.h"
|
||||||
#include "BPMemLoader.h"
|
#include "BPMemLoader.h"
|
||||||
@ -32,20 +32,20 @@
|
|||||||
#include "HW/Memmap.h"
|
#include "HW/Memmap.h"
|
||||||
|
|
||||||
typedef void (*DecodingFunction)(u32);
|
typedef void (*DecodingFunction)(u32);
|
||||||
DecodingFunction currentFunction = NULL;
|
|
||||||
|
|
||||||
u32 minCommandSize;
|
|
||||||
u16 streamSize;
|
|
||||||
u16 streamAddress;
|
|
||||||
bool readOpcode;
|
|
||||||
SWVertexLoader vertexLoader;
|
|
||||||
bool inObjectStream;
|
|
||||||
u8 lastPrimCmd;
|
|
||||||
|
|
||||||
|
|
||||||
namespace OpcodeDecoder
|
namespace OpcodeDecoder
|
||||||
{
|
{
|
||||||
|
|
||||||
|
static DecodingFunction currentFunction = NULL;
|
||||||
|
static u32 minCommandSize;
|
||||||
|
static u16 streamSize;
|
||||||
|
static u16 streamAddress;
|
||||||
|
static bool readOpcode;
|
||||||
|
static SWVertexLoader vertexLoader;
|
||||||
|
static bool inObjectStream;
|
||||||
|
static u8 lastPrimCmd;
|
||||||
|
|
||||||
|
|
||||||
void DecodePrimitiveStream(u32 iBufferSize)
|
void DecodePrimitiveStream(u32 iBufferSize)
|
||||||
{
|
{
|
||||||
u32 vertexSize = vertexLoader.GetVertexSize();
|
u32 vertexSize = vertexLoader.GetVertexSize();
|
||||||
@ -106,7 +106,7 @@ void ExecuteDisplayList(u32 addr, u32 count)
|
|||||||
OpcodeDecoder::Run(count);
|
OpcodeDecoder::Run(count);
|
||||||
|
|
||||||
// if data was read by the opcode decoder then the video data pointer changed
|
// if data was read by the opcode decoder then the video data pointer changed
|
||||||
u32 readCount = g_pVideoData - dlStart;
|
u32 readCount = (u32)(g_pVideoData - dlStart);
|
||||||
dlStart = g_pVideoData;
|
dlStart = g_pVideoData;
|
||||||
|
|
||||||
_assert_msg_(VIDEO, count >= readCount, "Display list underrun");
|
_assert_msg_(VIDEO, count >= readCount, "Display list underrun");
|
||||||
|
@ -28,24 +28,8 @@
|
|||||||
#include "SWCommandProcessor.h"
|
#include "SWCommandProcessor.h"
|
||||||
#include "ChunkFile.h"
|
#include "ChunkFile.h"
|
||||||
#include "MathUtil.h"
|
#include "MathUtil.h"
|
||||||
|
|
||||||
bool fifoStateRun;
|
|
||||||
|
|
||||||
// set to 0 if using in video common
|
|
||||||
#define SW_BACKEND 1
|
|
||||||
|
|
||||||
#if (SW_BACKEND)
|
|
||||||
|
|
||||||
#include "OpcodeDecoder.h"
|
#include "OpcodeDecoder.h"
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#include "SWVideoConfig.h"
|
|
||||||
#include "OpcodeDecoding.h"
|
|
||||||
#include "VideoCommon.h"
|
|
||||||
extern u8* g_pVideoData;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace SWCommandProcessor
|
namespace SWCommandProcessor
|
||||||
{
|
{
|
||||||
@ -425,7 +409,6 @@ bool RunBuffer()
|
|||||||
|
|
||||||
u32 availableBytes = writePos - readPos;
|
u32 availableBytes = writePos - readPos;
|
||||||
|
|
||||||
#if (SW_BACKEND)
|
|
||||||
while (OpcodeDecoder::CommandRunnable(availableBytes))
|
while (OpcodeDecoder::CommandRunnable(availableBytes))
|
||||||
{
|
{
|
||||||
cpreg.status.CommandIdle = 0;
|
cpreg.status.CommandIdle = 0;
|
||||||
@ -437,15 +420,6 @@ bool RunBuffer()
|
|||||||
_dbg_assert_(VIDEO, writePos >= readPos);
|
_dbg_assert_(VIDEO, writePos >= readPos);
|
||||||
availableBytes = writePos - readPos;
|
availableBytes = writePos - readPos;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
cpreg.status.CommandIdle = 0;
|
|
||||||
OpcodeDecoder_Run(g_bSkipCurrentFrame);
|
|
||||||
|
|
||||||
// if data was read by the opcode decoder then the video data pointer changed
|
|
||||||
readPos = g_pVideoData - &commandBuffer[0];
|
|
||||||
_dbg_assert_(COMMANDPROCESSOR, writePos >= readPos);
|
|
||||||
availableBytes = writePos - readPos;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
cpreg.status.CommandIdle = 1;
|
cpreg.status.CommandIdle = 1;
|
||||||
|
|
||||||
@ -464,69 +438,10 @@ bool RunBuffer()
|
|||||||
return ranDecoder;
|
return ranDecoder;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end of namespace SWCommandProcessor
|
void SetRendering(bool enabled)
|
||||||
|
|
||||||
|
|
||||||
// fifo functions
|
|
||||||
#if (SW_BACKEND)
|
|
||||||
|
|
||||||
void SWFifo_EnterLoop()
|
|
||||||
{
|
|
||||||
fifoStateRun = true;
|
|
||||||
|
|
||||||
while (fifoStateRun)
|
|
||||||
{
|
|
||||||
g_video_backend->PeekMessages();
|
|
||||||
if (!SWCommandProcessor::RunBuffer()) {
|
|
||||||
Common::YieldCPU();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
void Fifo_EnterLoop(const SVideoInitialize &video_initialize)
|
|
||||||
{
|
|
||||||
fifoStateRun = true;
|
|
||||||
|
|
||||||
while (fifoStateRun)
|
|
||||||
{
|
|
||||||
g_VideoInitialize.pPeekMessages();
|
|
||||||
if (g_ActiveConfig.bEFBAccessEnable)
|
|
||||||
VideoFifo_CheckEFBAccess();
|
|
||||||
VideoFifo_CheckSwapRequest();
|
|
||||||
|
|
||||||
if (!CommandProcessor::RunBuffer()) {
|
|
||||||
Common::YieldCPU();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
void Fifo_ExitLoop()
|
|
||||||
{
|
|
||||||
fifoStateRun = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Fifo_SetRendering(bool enabled)
|
|
||||||
{
|
{
|
||||||
g_bSkipCurrentFrame = !enabled;
|
g_bSkipCurrentFrame = !enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
// for compatibility with video common
|
} // end of namespace SWCommandProcessor
|
||||||
void Fifo_Init() {}
|
|
||||||
void Fifo_Shutdown() {}
|
|
||||||
void Fifo_DoState(PointerWrap &p) {}
|
|
||||||
|
|
||||||
u8* FAKE_GetFifoStartPtr()
|
|
||||||
{
|
|
||||||
return SWCommandProcessor::commandBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
u8* FAKE_GetFifoEndPtr()
|
|
||||||
{
|
|
||||||
return &SWCommandProcessor::commandBuffer[SWCommandProcessor::writePos];
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -25,20 +25,6 @@ class PointerWrap;
|
|||||||
extern volatile bool g_bSkipCurrentFrame;
|
extern volatile bool g_bSkipCurrentFrame;
|
||||||
extern u8* g_pVideoData;
|
extern u8* g_pVideoData;
|
||||||
|
|
||||||
// for compatibility with video common
|
|
||||||
void Fifo_Init();
|
|
||||||
void Fifo_Shutdown();
|
|
||||||
void Fifo_DoState(PointerWrap &p);
|
|
||||||
|
|
||||||
void Fifo_EnterLoop();
|
|
||||||
void Fifo_ExitLoop();
|
|
||||||
void Fifo_SetRendering(bool bEnabled);
|
|
||||||
|
|
||||||
// Implemented by the Video Backend
|
|
||||||
void VideoFifo_CheckSwapRequest();
|
|
||||||
void VideoFifo_CheckSwapRequestAt(u32 xfbAddr, u32 fbWidth, u32 fbHeight);
|
|
||||||
void VideoFifo_CheckEFBAccess();
|
|
||||||
|
|
||||||
namespace SWCommandProcessor
|
namespace SWCommandProcessor
|
||||||
{
|
{
|
||||||
// internal hardware addresses
|
// internal hardware addresses
|
||||||
@ -164,6 +150,7 @@ namespace SWCommandProcessor
|
|||||||
void UpdateInterrupts(u64 userdata);
|
void UpdateInterrupts(u64 userdata);
|
||||||
void UpdateInterruptsFromVideoBackend(u64 userdata);
|
void UpdateInterruptsFromVideoBackend(u64 userdata);
|
||||||
|
|
||||||
|
void SetRendering(bool enabled);
|
||||||
|
|
||||||
} // end of namespace SWCommandProcessor
|
} // end of namespace SWCommandProcessor
|
||||||
|
|
||||||
|
@ -19,9 +19,9 @@
|
|||||||
|
|
||||||
#include "SWVertexLoader.h"
|
#include "SWVertexLoader.h"
|
||||||
#include "VertexLoader_Position.h"
|
#include "VertexLoader_Position.h"
|
||||||
#include "../../../Core/VideoCommon/Src/VertexLoader_Normal.h"
|
#include "VertexLoader_Normal.h"
|
||||||
#include "../../../Core/VideoCommon/Src/VertexLoader_Color.h"
|
#include "VertexLoader_Color.h"
|
||||||
#include "../../../Core/VideoCommon/Src/VertexLoader_TextCoord.h"
|
#include "VertexLoader_TextCoord.h"
|
||||||
|
|
||||||
#include "CPMemLoader.h"
|
#include "CPMemLoader.h"
|
||||||
#include "XFMemLoader.h"
|
#include "XFMemLoader.h"
|
||||||
@ -30,14 +30,15 @@
|
|||||||
#include "SetupUnit.h"
|
#include "SetupUnit.h"
|
||||||
#include "SWStatistics.h"
|
#include "SWStatistics.h"
|
||||||
#include "VertexManagerBase.h"
|
#include "VertexManagerBase.h"
|
||||||
#include "../../../Core/VideoCommon/Src/DataReader.h"
|
#include "DataReader.h"
|
||||||
|
|
||||||
// Vertex loaders read these
|
// Vertex loaders read these
|
||||||
static int tcIndex;
|
extern int tcIndex;
|
||||||
static int colIndex;
|
extern int colIndex;
|
||||||
static int colElements[2];
|
extern int colElements[2];
|
||||||
static float posScale;
|
extern float posScale;
|
||||||
static float tcScale[8];
|
extern float tcScale[8];
|
||||||
|
|
||||||
|
|
||||||
SWVertexLoader::SWVertexLoader() :
|
SWVertexLoader::SWVertexLoader() :
|
||||||
m_VertexSize(0),
|
m_VertexSize(0),
|
||||||
@ -165,7 +166,8 @@ void SWVertexLoader::SetFormat(u8 attributeIndex, u8 primitiveType)
|
|||||||
AddAttributeLoader(LoadPosition);
|
AddAttributeLoader(LoadPosition);
|
||||||
|
|
||||||
// Normals
|
// Normals
|
||||||
if (g_VtxDesc.Normal != NOT_PRESENT) {
|
if (g_VtxDesc.Normal != NOT_PRESENT)
|
||||||
|
{
|
||||||
m_VertexSize += VertexLoader_Normal::GetSize(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3);
|
m_VertexSize += VertexLoader_Normal::GetSize(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3);
|
||||||
m_normalLoader = VertexLoader_Normal::GetFunction(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3, true);
|
m_normalLoader = VertexLoader_Normal::GetFunction(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3, true);
|
||||||
if (m_normalLoader == 0)
|
if (m_normalLoader == 0)
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "VideoConfigDialog.h"
|
#include "VideoConfigDialog.h"
|
||||||
#endif // HAVE_WX
|
#endif // HAVE_WX
|
||||||
|
|
||||||
|
|
||||||
#include "SWCommandProcessor.h"
|
#include "SWCommandProcessor.h"
|
||||||
#include "OpcodeDecoder.h"
|
#include "OpcodeDecoder.h"
|
||||||
#include "SWVideoConfig.h"
|
#include "SWVideoConfig.h"
|
||||||
@ -31,20 +32,21 @@
|
|||||||
#include "Clipper.h"
|
#include "Clipper.h"
|
||||||
#include "Rasterizer.h"
|
#include "Rasterizer.h"
|
||||||
#include "SWRenderer.h"
|
#include "SWRenderer.h"
|
||||||
#include "../../../Core/VideoCommon/Src/LookUpTables.h"
|
|
||||||
#include "HwRasterizer.h"
|
#include "HwRasterizer.h"
|
||||||
#include "LogManager.h"
|
#include "LogManager.h"
|
||||||
#include "EfbInterface.h"
|
#include "EfbInterface.h"
|
||||||
#include "DebugUtil.h"
|
#include "DebugUtil.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
#include "VideoBackend.h"
|
#include "VideoBackend.h"
|
||||||
#include "../../../Core/VideoCommon/Src/Fifo.h"
|
|
||||||
#include "Core.h"
|
#include "Core.h"
|
||||||
|
|
||||||
namespace SW
|
namespace SW
|
||||||
{
|
{
|
||||||
|
|
||||||
std::string VideoBackend::GetName()
|
static bool fifoStateRun = false;
|
||||||
|
|
||||||
|
|
||||||
|
std::string VideoSoftware::GetName()
|
||||||
{
|
{
|
||||||
return "Software Renderer";
|
return "Software Renderer";
|
||||||
}
|
}
|
||||||
@ -54,7 +56,7 @@ void *DllDebugger(void *_hParent, bool Show)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::ShowConfig(void *_hParent)
|
void VideoSoftware::ShowConfig(void *_hParent)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_WX) && HAVE_WX
|
#if defined(HAVE_WX) && HAVE_WX
|
||||||
VideoConfigDialog diag((wxWindow*)_hParent, "Software", "gfx_software");
|
VideoConfigDialog diag((wxWindow*)_hParent, "Software", "gfx_software");
|
||||||
@ -62,7 +64,7 @@ void VideoBackend::ShowConfig(void *_hParent)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VideoBackend::Initialize(void *&window_handle)
|
bool VideoSoftware::Initialize(void *&window_handle)
|
||||||
{
|
{
|
||||||
g_SWVideoConfig.Load((File::GetUserPath(D_CONFIG_IDX) + "gfx_software.ini").c_str());
|
g_SWVideoConfig.Load((File::GetUserPath(D_CONFIG_IDX) + "gfx_software.ini").c_str());
|
||||||
|
|
||||||
@ -86,26 +88,27 @@ bool VideoBackend::Initialize(void *&window_handle)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::DoState(PointerWrap&)
|
void VideoSoftware::DoState(PointerWrap&)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::RunLoop(bool enable)
|
void VideoSoftware::RunLoop(bool enable)
|
||||||
|
{
|
||||||
|
//EmulatorState(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VideoSoftware::EmuStateChange(EMUSTATE_CHANGE newState)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::EmuStateChange(EMUSTATE_CHANGE newState)
|
void VideoSoftware::Shutdown()
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void VideoBackend::Shutdown()
|
|
||||||
{
|
{
|
||||||
SWRenderer::Shutdown();
|
SWRenderer::Shutdown();
|
||||||
OpenGL_Shutdown();
|
OpenGL_Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is called after Video_Initialize() from the Core
|
// This is called after Video_Initialize() from the Core
|
||||||
void VideoBackend::Video_Prepare()
|
void VideoSoftware::Video_Prepare()
|
||||||
{
|
{
|
||||||
SWRenderer::Prepare();
|
SWRenderer::Prepare();
|
||||||
|
|
||||||
@ -113,16 +116,16 @@ void VideoBackend::Video_Prepare()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run from the CPU thread (from VideoInterface.cpp)
|
// Run from the CPU thread (from VideoInterface.cpp)
|
||||||
void VideoBackend::Video_BeginField(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight)
|
void VideoSoftware::Video_BeginField(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run from the CPU thread (from VideoInterface.cpp)
|
// Run from the CPU thread (from VideoInterface.cpp)
|
||||||
void VideoBackend::Video_EndField()
|
void VideoSoftware::Video_EndField()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 VideoBackend::Video_AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputData)
|
u32 VideoSoftware::Video_AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputData)
|
||||||
{
|
{
|
||||||
u32 value = 0;
|
u32 value = 0;
|
||||||
|
|
||||||
@ -152,7 +155,7 @@ u32 VideoBackend::Video_AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputDat
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VideoBackend::Video_Screenshot(const char *_szFilename)
|
bool VideoSoftware::Video_Screenshot(const char *_szFilename)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -160,41 +163,77 @@ bool VideoBackend::Video_Screenshot(const char *_szFilename)
|
|||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Enter and exit the video loop
|
// Enter and exit the video loop
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
void VideoBackend::Video_EnterLoop()
|
void VideoSoftware::Video_EnterLoop()
|
||||||
{
|
{
|
||||||
EmulatorState(true);
|
fifoStateRun = true;
|
||||||
|
|
||||||
|
while (fifoStateRun)
|
||||||
|
{
|
||||||
|
g_video_backend->PeekMessages();
|
||||||
|
if (!SWCommandProcessor::RunBuffer()) {
|
||||||
|
Common::YieldCPU();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::Video_ExitLoop()
|
void VideoSoftware::Video_ExitLoop()
|
||||||
{
|
{
|
||||||
ExitGpuLoop();
|
fifoStateRun = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::Video_AddMessage(const char* pstr, u32 milliseconds)
|
// TODO : could use the OSD class in video common, we would need to implement the Renderer class
|
||||||
{
|
// however most of it is useless for the SW backend so we could as well move it to its own class
|
||||||
|
void VideoSoftware::Video_AddMessage(const char* pstr, u32 milliseconds)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
void VideoSoftware::Video_ClearMessages()
|
||||||
void VideoBackend::Video_ClearMessages()
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::Video_SetRendering(bool bEnabled)
|
void VideoSoftware::Video_SetRendering(bool bEnabled)
|
||||||
{
|
{
|
||||||
Fifo_SetRendering(bEnabled);
|
SWCommandProcessor::SetRendering(bEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VideoSoftware::Video_GatherPipeBursted()
|
||||||
|
{
|
||||||
|
SWCommandProcessor::GatherPipeBursted();
|
||||||
|
}
|
||||||
|
|
||||||
bool VideoBackend::Video_IsPossibleWaitingSetDrawDone(void)
|
bool VideoSoftware::Video_IsPossibleWaitingSetDrawDone(void)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::Video_AbortFrame(void)
|
void VideoSoftware::Video_AbortFrame(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
readFn16 VideoSoftware::Video_CPRead16()
|
||||||
|
{
|
||||||
|
return SWCommandProcessor::Read16;
|
||||||
|
}
|
||||||
|
writeFn16 VideoSoftware::Video_CPWrite16()
|
||||||
|
{
|
||||||
|
return SWCommandProcessor::Write16;
|
||||||
|
}
|
||||||
|
|
||||||
|
readFn16 VideoSoftware::Video_PERead16()
|
||||||
|
{
|
||||||
|
return SWPixelEngine::Read16;
|
||||||
|
}
|
||||||
|
writeFn16 VideoSoftware::Video_PEWrite16()
|
||||||
|
{
|
||||||
|
return SWPixelEngine::Write16;
|
||||||
|
}
|
||||||
|
writeFn32 VideoSoftware::Video_PEWrite32()
|
||||||
|
{
|
||||||
|
return SWPixelEngine::Write32;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Draw messages on top of the screen
|
// Draw messages on top of the screen
|
||||||
unsigned int VideoBackend::PeekMessages()
|
unsigned int VideoSoftware::PeekMessages()
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// TODO: peekmessage
|
// TODO: peekmessage
|
||||||
@ -213,11 +252,11 @@ unsigned int VideoBackend::PeekMessages()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Show the current FPS
|
// Show the current FPS
|
||||||
void VideoBackend::UpdateFPSDisplay(const char *text)
|
void VideoSoftware::UpdateFPSDisplay(const char *text)
|
||||||
{
|
{
|
||||||
char temp[100];
|
char temp[100];
|
||||||
snprintf(temp, sizeof temp, "%s | Software | %s", svn_rev_str, text);
|
snprintf(temp, sizeof temp, "%s | Software | %s", svn_rev_str, text);
|
||||||
OpenGL_SetWindowText(temp);
|
OpenGL_SetWindowText(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -17,11 +17,11 @@
|
|||||||
|
|
||||||
#include "TextureEncoder.h"
|
#include "TextureEncoder.h"
|
||||||
#include "EfbInterface.h"
|
#include "EfbInterface.h"
|
||||||
#include "../../../Core/VideoCommon/Src/LookUpTables.h"
|
|
||||||
|
|
||||||
#include "BPMemLoader.h"
|
#include "BPMemLoader.h"
|
||||||
|
|
||||||
#include "../../../Core/VideoCommon/Src/TextureDecoder.h"
|
#include "LookUpTables.h"
|
||||||
|
#include "TextureDecoder.h"
|
||||||
|
|
||||||
|
|
||||||
namespace TextureEncoder
|
namespace TextureEncoder
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include "TextureSampler.h"
|
#include "TextureSampler.h"
|
||||||
|
|
||||||
#include "BPMemLoader.h"
|
#include "BPMemLoader.h"
|
||||||
#include "../../../Core/VideoCommon/Src/TextureDecoder.h"
|
#include "TextureDecoder.h"
|
||||||
#include "HW/Memmap.h"
|
#include "HW/Memmap.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
// Copyright (C) 2003-2009 Dolphin Project.
|
|
||||||
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#include "NativeVertexFormat.h"
|
|
||||||
|
|
||||||
#include "../../../Core/VideoCommon/Src/VertexLoader_Position.h"
|
|
@ -7,7 +7,7 @@
|
|||||||
namespace SW
|
namespace SW
|
||||||
{
|
{
|
||||||
|
|
||||||
class VideoBackend : public VideoBackendLLE
|
class VideoSoftware : public VideoBackend
|
||||||
{
|
{
|
||||||
bool Initialize(void *&);
|
bool Initialize(void *&);
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
@ -35,9 +35,17 @@ class VideoBackend : public VideoBackendLLE
|
|||||||
|
|
||||||
void Video_SetRendering(bool bEnabled);
|
void Video_SetRendering(bool bEnabled);
|
||||||
|
|
||||||
|
void Video_GatherPipeBursted();
|
||||||
|
|
||||||
bool Video_IsPossibleWaitingSetDrawDone();
|
bool Video_IsPossibleWaitingSetDrawDone();
|
||||||
void Video_AbortFrame();
|
void Video_AbortFrame();
|
||||||
|
|
||||||
|
readFn16 Video_CPRead16();
|
||||||
|
writeFn16 Video_CPWrite16();
|
||||||
|
readFn16 Video_PERead16();
|
||||||
|
writeFn16 Video_PEWrite16();
|
||||||
|
writeFn32 Video_PEWrite32();
|
||||||
|
|
||||||
void UpdateFPSDisplay(const char*);
|
void UpdateFPSDisplay(const char*);
|
||||||
unsigned int PeekMessages();
|
unsigned int PeekMessages();
|
||||||
};
|
};
|
||||||
|
@ -1,313 +0,0 @@
|
|||||||
// Copyright (C) 2003-2009 Dolphin Project.
|
|
||||||
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
#include <wx/wx.h>
|
|
||||||
#include <wx/filepicker.h>
|
|
||||||
#include <wx/notebook.h>
|
|
||||||
#include <wx/dialog.h>
|
|
||||||
#include <wx/aboutdlg.h>
|
|
||||||
|
|
||||||
#include "ConfigManager.h"
|
|
||||||
#include "VideoBackend.h"
|
|
||||||
#include "SWVideoConfig.h"
|
|
||||||
#include "Win32.h"
|
|
||||||
|
|
||||||
#include "StringUtil.h"
|
|
||||||
|
|
||||||
// ----------------------
|
|
||||||
// The rendering window
|
|
||||||
// ----------------------
|
|
||||||
namespace EmuWindow
|
|
||||||
{
|
|
||||||
|
|
||||||
HWND m_hWnd = NULL; // The new window that is created here
|
|
||||||
HWND m_hParent = NULL;
|
|
||||||
|
|
||||||
WNDCLASSEX wndClass;
|
|
||||||
const TCHAR m_szClassName[] = _T("DolphinEmuWnd");
|
|
||||||
int g_winstyle;
|
|
||||||
|
|
||||||
// ------------------------------------------
|
|
||||||
/* Invisible cursor option. In the lack of a predefined IDC_BLANK we make
|
|
||||||
an empty transparent cursor */
|
|
||||||
// ------------------
|
|
||||||
HCURSOR hCursor = NULL, hCursorBlank = NULL;
|
|
||||||
void CreateCursors(HINSTANCE hInstance)
|
|
||||||
{
|
|
||||||
BYTE ANDmaskCursor[] = { 0xff };
|
|
||||||
BYTE XORmaskCursor[] = { 0x00 };
|
|
||||||
hCursorBlank = CreateCursor(hInstance, 0,0, 1,1, ANDmaskCursor,XORmaskCursor);
|
|
||||||
|
|
||||||
hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
||||||
}
|
|
||||||
|
|
||||||
HWND GetWnd()
|
|
||||||
{
|
|
||||||
return m_hWnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
HWND GetParentWnd()
|
|
||||||
{
|
|
||||||
return m_hParent;
|
|
||||||
}
|
|
||||||
|
|
||||||
LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
|
|
||||||
{
|
|
||||||
HDC hdc;
|
|
||||||
PAINTSTRUCT ps;
|
|
||||||
switch( iMsg )
|
|
||||||
{
|
|
||||||
case WM_CREATE:
|
|
||||||
PostMessage(m_hParent, WM_USER, WM_USER_CREATE, (int)m_hParent);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_PAINT:
|
|
||||||
hdc = BeginPaint( hWnd, &ps );
|
|
||||||
EndPaint( hWnd, &ps );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_SYSKEYDOWN:
|
|
||||||
switch( LOWORD( wParam ))
|
|
||||||
{
|
|
||||||
case VK_RETURN:
|
|
||||||
// Pressing Alt+Enter switch FullScreen/Windowed
|
|
||||||
if (m_hParent == NULL && !g_SWVideoConfig.renderToMainframe)
|
|
||||||
{
|
|
||||||
ToggleFullscreen(hWnd);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case VK_F5: case VK_F6: case VK_F7: case VK_F8:
|
|
||||||
PostMessage(m_hParent, WM_SYSKEYDOWN, wParam, lParam);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return DefWindowProc(hWnd, iMsg, wParam, lParam);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_KEYDOWN:
|
|
||||||
switch (LOWORD( wParam ))
|
|
||||||
{
|
|
||||||
case VK_ESCAPE:
|
|
||||||
if (g_SWVideoConfig.bFullscreen)
|
|
||||||
{
|
|
||||||
// Pressing Esc switches to Windowed mode from Fullscreen mode
|
|
||||||
ToggleFullscreen(hWnd);
|
|
||||||
}
|
|
||||||
// And pause the emulation when already in Windowed mode
|
|
||||||
PostMessage(m_hParent, WM_USER, WM_USER_PAUSE, 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* The reason we pick up the WM_MOUSEMOVE is to be able to change this option
|
|
||||||
during gameplay. The alternative is to load one of the cursors when the plugin
|
|
||||||
is loaded and go with that. This should only produce a minimal performance hit
|
|
||||||
because SetCursor is not supposed to actually change the cursor if it's the
|
|
||||||
same as the one before. */
|
|
||||||
case WM_MOUSEMOVE:
|
|
||||||
/* Check rendering mode; child or parent. Then post the mouse moves to the main window
|
|
||||||
it's nessesary for both the chil dwindow and separate rendering window because
|
|
||||||
moves over the rendering window do not reach the main program then. */
|
|
||||||
if (GetParentWnd() == NULL) // Separate rendering window
|
|
||||||
PostMessage(m_hParent, iMsg, wParam, -1);
|
|
||||||
else
|
|
||||||
PostMessage(GetParentWnd(), iMsg, wParam, lParam);
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* To support the separate window rendering we get the message back here. So we basically
|
|
||||||
only let it pass through Dolphin > Frame.cpp to determine if it should be on or off
|
|
||||||
and coordinate it with the other settings if necessary */
|
|
||||||
case WM_USER:
|
|
||||||
if (wParam == WM_USER_STOP)
|
|
||||||
SetCursor((lParam) ? hCursor : hCursorBlank);
|
|
||||||
else if (wParam == WIIMOTE_DISCONNECT)
|
|
||||||
PostMessage(m_hParent, WM_USER, wParam, lParam);
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Post these mouse events to the main window, it's nessesary becase in difference to the
|
|
||||||
keyboard inputs these events only appear here, not in the main WndProc() */
|
|
||||||
case WM_LBUTTONDOWN:
|
|
||||||
case WM_LBUTTONUP:
|
|
||||||
case WM_LBUTTONDBLCLK:
|
|
||||||
PostMessage(GetParentWnd(), iMsg, wParam, lParam);
|
|
||||||
break;
|
|
||||||
|
|
||||||
// This is called when we close the window when we render to a separate window
|
|
||||||
case WM_CLOSE:
|
|
||||||
if (m_hParent == NULL)
|
|
||||||
{
|
|
||||||
// Take it out of fullscreen and stop the game
|
|
||||||
if( g_SWVideoConfig.bFullscreen )
|
|
||||||
ToggleFullscreen(m_hParent);
|
|
||||||
PostMessage(m_hParent, WM_USER, WM_USER_STOP, 0);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Called when a screensaver wants to show up while this window is active
|
|
||||||
case WM_SYSCOMMAND:
|
|
||||||
switch (wParam)
|
|
||||||
{
|
|
||||||
case SC_SCREENSAVE:
|
|
||||||
case SC_MONITORPOWER:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return DefWindowProc(hWnd, iMsg, wParam, lParam);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return DefWindowProc(hWnd, iMsg, wParam, lParam);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// This is called from Create()
|
|
||||||
HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const TCHAR *title)
|
|
||||||
{
|
|
||||||
wndClass.cbSize = sizeof( wndClass );
|
|
||||||
wndClass.style = CS_HREDRAW | CS_VREDRAW;
|
|
||||||
wndClass.lpfnWndProc = WndProc;
|
|
||||||
wndClass.cbClsExtra = 0;
|
|
||||||
wndClass.cbWndExtra = 0;
|
|
||||||
wndClass.hInstance = hInstance;
|
|
||||||
wndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
|
|
||||||
// To interfer less with SetCursor() later we set this to NULL
|
|
||||||
//wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
|
|
||||||
wndClass.hCursor = NULL;
|
|
||||||
wndClass.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );
|
|
||||||
wndClass.lpszMenuName = NULL;
|
|
||||||
wndClass.lpszClassName = m_szClassName;
|
|
||||||
wndClass.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
|
|
||||||
|
|
||||||
//m_hInstance = hInstance;
|
|
||||||
RegisterClassEx( &wndClass );
|
|
||||||
|
|
||||||
CreateCursors(/*m_hInstance*/GetModuleHandle(0));
|
|
||||||
|
|
||||||
// Create child window
|
|
||||||
m_hParent = parent;
|
|
||||||
|
|
||||||
m_hWnd = CreateWindow(m_szClassName, title,
|
|
||||||
WS_CHILD,
|
|
||||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
|
||||||
parent, NULL, hInstance, NULL);
|
|
||||||
|
|
||||||
ShowWindow(m_hWnd, SW_SHOWMAXIMIZED);
|
|
||||||
|
|
||||||
return m_hWnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ToggleFullscreen(HWND hParent)
|
|
||||||
{
|
|
||||||
if (m_hParent == NULL)
|
|
||||||
{
|
|
||||||
int w_fs = 640, h_fs = 480;
|
|
||||||
if (g_SWVideoConfig.bFullscreen)
|
|
||||||
{
|
|
||||||
// Get out of fullscreen
|
|
||||||
g_SWVideoConfig.bFullscreen = false;
|
|
||||||
RECT rc = {0, 0, w_fs, h_fs};
|
|
||||||
|
|
||||||
// FullScreen -> Desktop
|
|
||||||
ChangeDisplaySettings(NULL, 0);
|
|
||||||
|
|
||||||
RECT rcdesktop; // Get desktop resolution
|
|
||||||
GetWindowRect(GetDesktopWindow(), &rcdesktop);
|
|
||||||
|
|
||||||
ShowCursor(TRUE);
|
|
||||||
|
|
||||||
int X = (rcdesktop.right-rcdesktop.left)/2 - (rc.right-rc.left)/2;
|
|
||||||
int Y = (rcdesktop.bottom-rcdesktop.top)/2 - (rc.bottom-rc.top)/2;
|
|
||||||
// SetWindowPos to the center of the screen
|
|
||||||
SetWindowPos(hParent, NULL, X, Y, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER);
|
|
||||||
|
|
||||||
// Set new window style FS -> Windowed
|
|
||||||
SetWindowLong(hParent, GWL_STYLE, WS_OVERLAPPEDWINDOW);
|
|
||||||
|
|
||||||
// Eventually show the window!
|
|
||||||
EmuWindow::Show();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Get into fullscreen
|
|
||||||
DEVMODE dmScreenSettings;
|
|
||||||
memset(&dmScreenSettings, 0, sizeof(dmScreenSettings));
|
|
||||||
|
|
||||||
// Desktop -> FullScreen
|
|
||||||
dmScreenSettings.dmSize = sizeof(dmScreenSettings);
|
|
||||||
dmScreenSettings.dmPelsWidth = w_fs;
|
|
||||||
dmScreenSettings.dmPelsHeight = h_fs;
|
|
||||||
dmScreenSettings.dmBitsPerPel = 32;
|
|
||||||
dmScreenSettings.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
|
|
||||||
if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Set new window style -> PopUp
|
|
||||||
SetWindowLong(hParent, GWL_STYLE, WS_POPUP);
|
|
||||||
g_SWVideoConfig.bFullscreen = true;
|
|
||||||
ShowCursor(FALSE);
|
|
||||||
|
|
||||||
// SetWindowPos to the upper-left corner of the screen
|
|
||||||
SetWindowPos(hParent, NULL, 0, 0, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER);
|
|
||||||
|
|
||||||
// Eventually show the window!
|
|
||||||
EmuWindow::Show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Show()
|
|
||||||
{
|
|
||||||
ShowWindow(m_hWnd, SW_SHOW);
|
|
||||||
BringWindowToTop(m_hWnd);
|
|
||||||
UpdateWindow(m_hWnd);
|
|
||||||
}
|
|
||||||
|
|
||||||
HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title)
|
|
||||||
{
|
|
||||||
return OpenWindow(hParent, hInstance, 640, 480, title);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Close()
|
|
||||||
{
|
|
||||||
if (!m_hParent)
|
|
||||||
DestroyWindow(m_hWnd);
|
|
||||||
UnregisterClass(m_szClassName, /*m_hInstance*/GetModuleHandle(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------
|
|
||||||
// Set the size of the child or main window
|
|
||||||
// ------------------------------------------
|
|
||||||
void SetSize(int width, int height)
|
|
||||||
{
|
|
||||||
RECT rc = {0, 0, width, height};
|
|
||||||
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, false);
|
|
||||||
|
|
||||||
int w = rc.right - rc.left;
|
|
||||||
int h = rc.bottom - rc.top;
|
|
||||||
|
|
||||||
// Move and resize the window
|
|
||||||
rc.left = (1280 - w)/2;
|
|
||||||
rc.right = rc.left + w;
|
|
||||||
rc.top = (1024 - h)/2;
|
|
||||||
rc.bottom = rc.top + h;
|
|
||||||
MoveWindow(m_hWnd, rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // EmuWindow
|
|
@ -1,39 +0,0 @@
|
|||||||
// Copyright (C) 2003-2009 Dolphin Project.
|
|
||||||
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _WIN32_H_
|
|
||||||
#define _WIN32_H_
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "stdafx.h"
|
|
||||||
|
|
||||||
namespace EmuWindow
|
|
||||||
{
|
|
||||||
extern int g_winstyle;
|
|
||||||
|
|
||||||
HWND GetWnd();
|
|
||||||
HWND GetParentWnd();
|
|
||||||
HWND GetChildParentWnd();
|
|
||||||
HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title);
|
|
||||||
void Show();
|
|
||||||
void Close();
|
|
||||||
void ToggleFullscreen(HWND hParent);
|
|
||||||
void SetSize(int displayWidth, int displayHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // _WIN32_H_
|
|
@ -15,7 +15,7 @@
|
|||||||
// Official SVN repository and contact information can be found at
|
// Official SVN repository and contact information can be found at
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
#include "../../../Core/VideoCommon/Src/VideoCommon.h"
|
#include "VideoCommon.h"
|
||||||
|
|
||||||
#include "XFMemLoader.h"
|
#include "XFMemLoader.h"
|
||||||
#include "CPMemLoader.h"
|
#include "CPMemLoader.h"
|
||||||
|
Reference in New Issue
Block a user