Merge pull request #273 from awforsythe/master
Add Lua function gui.setlayermask
This commit is contained in:
commit
be7f22a7f9
|
@ -968,3 +968,28 @@ void TwiddleLayer(UINT ctlid, int core, int layer)
|
|||
gpu->SetLayerEnableState(layer, newLayerState);
|
||||
MainWindow->checkMenu(ctlid, newLayerState);
|
||||
}
|
||||
|
||||
void SetLayerMasks(int mainEngineMask, int subEngineMask)
|
||||
{
|
||||
static const size_t numCores = sizeof(CommonSettings.dispLayers) / sizeof(CommonSettings.dispLayers[0]);
|
||||
static const size_t numLayers = sizeof(CommonSettings.dispLayers[0]) / sizeof(CommonSettings.dispLayers[0][0]);
|
||||
static const UINT ctlids[numCores][numLayers] = {
|
||||
{IDM_MBG0, IDM_MBG1, IDM_MBG2, IDM_MBG3, IDM_MOBJ},
|
||||
{IDM_SBG0, IDM_SBG1, IDM_SBG2, IDM_SBG3, IDM_SOBJ},
|
||||
};
|
||||
|
||||
for (int core = 0; core < 2; core++)
|
||||
{
|
||||
GPUEngineBase *gpu = (GPUEngineID)core == GPUEngineID_Main ? (GPUEngineBase *)GPU->GetEngineMain() : (GPUEngineBase *)GPU->GetEngineSub();
|
||||
const int mask = core == 0 ? mainEngineMask : subEngineMask;
|
||||
for (size_t layer = 0; layer < numLayers; layer++)
|
||||
{
|
||||
const bool newLayerState = (mask >> layer) & 0x01 != 0;
|
||||
if (newLayerState != CommonSettings.dispLayers[core][layer])
|
||||
{
|
||||
gpu->SetLayerEnableState(layer, newLayerState);
|
||||
MainWindow->checkMenu(ctlids[core][layer], newLayerState);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,5 +105,6 @@ FORCEINLINE void ServiceDisplayThreadInvocations()
|
|||
|
||||
void UpdateWndRects(HWND hwnd, RECT* newClientRect = NULL);
|
||||
void TwiddleLayer(UINT ctlid, int core, int layer);
|
||||
void SetLayerMasks(int mainEngineMask, int subEngineMask);
|
||||
|
||||
#endif
|
|
@ -28,6 +28,7 @@
|
|||
#include "frontend/windows/main.h"
|
||||
#include "frontend/windows/video.h"
|
||||
#include "frontend/windows/resource.h"
|
||||
#include "frontend/windows/display.h"
|
||||
#else
|
||||
// TODO: define appropriate types for menu
|
||||
typedef void* PlatformMenu;
|
||||
|
@ -3278,6 +3279,20 @@ DEFINE_LUA_FUNCTION(gui_settransparency, "transparency_4_to_0")
|
|||
return 0;
|
||||
}
|
||||
|
||||
// gui.setlayermask(int top, int bottom)
|
||||
// enables or disables display layers for each screen according to the bitfields provided
|
||||
// e.g. 31 (11111) shows all layers; 0 (00000) hides all layers; 16 (10000) shows only the object layer (layer 4)
|
||||
// this function is only supported by the windows frontend.
|
||||
DEFINE_LUA_FUNCTION(gui_setlayermask, "top,bottom")
|
||||
{
|
||||
#if defined(WIN32)
|
||||
lua_Integer top = luaL_checkint(L, 1);
|
||||
lua_Integer bottom = luaL_checkint(L, 2);
|
||||
SetLayerMasks(top, bottom);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
// takes a screenshot and returns it in gdstr format
|
||||
// example: gd.createFromGdStr(gui.gdscreenshot()):png("outputimage.png")
|
||||
DEFINE_LUA_FUNCTION(gui_gdscreenshot, "[whichScreen='both']")
|
||||
|
@ -3849,7 +3864,7 @@ DEFINE_LUA_FUNCTION(emu_registermenustart, "func")
|
|||
|
||||
DEFINE_LUA_FUNCTION(emu_set3dtransform, "mode, matrix")
|
||||
{
|
||||
extern int freelookMode;
|
||||
extern int freelookMode;
|
||||
extern s32 freelookMatrix[16];
|
||||
|
||||
int mode = luaL_checkinteger(L,1);
|
||||
|
@ -4861,6 +4876,7 @@ static const struct luaL_reg guilib [] =
|
|||
{"transparency", gui_settransparency},
|
||||
{"popup", gui_popup},
|
||||
{"parsecolor", gui_parsecolor},
|
||||
{"setlayermask", gui_setlayermask},
|
||||
{"gdscreenshot", gui_gdscreenshot},
|
||||
{"gdoverlay", gui_gdoverlay},
|
||||
{"redraw", emu_redraw}, // some people might think of this as more of a GUI function
|
||||
|
|
Loading…
Reference in New Issue