Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
130
Src/Plugins/Input/in_wmvdrm/vidutils.cpp
Normal file
130
Src/Plugins/Input/in_wmvdrm/vidutils.cpp
Normal file
|
@ -0,0 +1,130 @@
|
|||
#include "main.h"
|
||||
#include "api.h"
|
||||
#include <multimon.h>
|
||||
|
||||
#undef GetSystemMetrics
|
||||
void getViewport(RECT *r, HWND wnd, int full, RECT *sr)
|
||||
{
|
||||
POINT *p = NULL;
|
||||
if (p || sr || wnd)
|
||||
{
|
||||
static int initted = 0;
|
||||
static HMONITOR (WINAPI *Mfp)(POINT pt, DWORD dwFlags);
|
||||
static HMONITOR (WINAPI *Mfr)(LPCRECT lpcr, DWORD dwFlags);
|
||||
static HMONITOR (WINAPI *Mfw)(HWND wnd, DWORD dwFlags);
|
||||
static BOOL (WINAPI *Gmi)(HMONITOR mon, LPMONITORINFOEX lpmi);
|
||||
if (!initted)
|
||||
{
|
||||
HINSTANCE h = LoadLibraryW(L"user32.dll");
|
||||
if (h)
|
||||
{
|
||||
Mfp = (HMONITOR (WINAPI *)(POINT, DWORD)) GetProcAddress(h, "MonitorFromPoint");
|
||||
Mfr = (HMONITOR (WINAPI *)(LPCRECT, DWORD)) GetProcAddress(h, "MonitorFromRect");
|
||||
Mfw = (HMONITOR (WINAPI *)(HWND, DWORD)) GetProcAddress(h, "MonitorFromWindow");
|
||||
Gmi = (BOOL (WINAPI *)(HMONITOR, LPMONITORINFOEX)) GetProcAddress(h, "GetMonitorInfoW");
|
||||
}
|
||||
initted = 1;
|
||||
}
|
||||
|
||||
if (Mfp && Mfr && Mfw && Gmi)
|
||||
{
|
||||
HMONITOR hm = NULL;
|
||||
|
||||
if (sr)
|
||||
hm = Mfr(sr, MONITOR_DEFAULTTONEAREST);
|
||||
else if (wnd)
|
||||
hm = Mfw(wnd, MONITOR_DEFAULTTONEAREST);
|
||||
else if (p)
|
||||
hm = Mfp(*p, MONITOR_DEFAULTTONEAREST);
|
||||
|
||||
if (hm)
|
||||
{
|
||||
MONITORINFOEXW mi;
|
||||
memset(&mi, 0, sizeof(mi));
|
||||
mi.cbSize = sizeof(mi);
|
||||
|
||||
if (Gmi(hm, &mi))
|
||||
{
|
||||
if (!full)
|
||||
*r = mi.rcWork;
|
||||
else
|
||||
*r = mi.rcMonitor;
|
||||
|
||||
return ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (full)
|
||||
{ // this might be borked =)
|
||||
r->top = r->left = 0;
|
||||
r->right = GetSystemMetrics(SM_CXSCREEN);
|
||||
r->bottom = GetSystemMetrics(SM_CYSCREEN);
|
||||
}
|
||||
else
|
||||
{
|
||||
SystemParametersInfoW(SPI_GETWORKAREA, 0, r, 0);
|
||||
}
|
||||
}
|
||||
|
||||
VideoConfig::VideoConfig() : group(0),
|
||||
itemYV12(0), itemOverlay(0), itemVsync(0), itemDDraw(0)
|
||||
{}
|
||||
|
||||
bool VideoConfig::yv12()
|
||||
{
|
||||
GetGroup();
|
||||
if (!itemYV12)
|
||||
return false;
|
||||
|
||||
return itemYV12->GetBool();
|
||||
}
|
||||
|
||||
bool VideoConfig::overlays()
|
||||
{
|
||||
GetGroup();
|
||||
if (!itemOverlay)
|
||||
return true; // overlay by default
|
||||
|
||||
return itemOverlay->GetBool();
|
||||
}
|
||||
|
||||
bool VideoConfig::vsync()
|
||||
{
|
||||
GetGroup();
|
||||
if (!itemVsync)
|
||||
return false; // no vsync by default
|
||||
|
||||
return itemVsync->GetBool();
|
||||
}
|
||||
|
||||
bool VideoConfig::ddraw()
|
||||
{
|
||||
GetGroup();
|
||||
if (!itemDDraw)
|
||||
return true;
|
||||
|
||||
return itemDDraw->GetBool();
|
||||
}
|
||||
|
||||
void VideoConfig::GetGroup()
|
||||
{
|
||||
if (group)
|
||||
return ;
|
||||
|
||||
// {2135E318-6919-4bcf-99D2-62BE3FCA8FA6}
|
||||
static const GUID videoConfigGroupGUID =
|
||||
{ 0x2135e318, 0x6919, 0x4bcf, { 0x99, 0xd2, 0x62, 0xbe, 0x3f, 0xca, 0x8f, 0xa6 } };
|
||||
|
||||
group = AGAVE_API_CONFIG->GetGroup(videoConfigGroupGUID);
|
||||
if (group)
|
||||
{
|
||||
itemYV12 = group->GetItem(L"YV12");
|
||||
itemOverlay = group->GetItem(L"overlay");
|
||||
itemVsync = group->GetItem(L"vsync");
|
||||
itemDDraw = group->GetItem(L"ddraw");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VideoConfig config_video;
|
Loading…
Add table
Add a link
Reference in a new issue