Skip to content

Commit

Permalink
Add Lua function get_video_modes() for main menu
Browse files Browse the repository at this point in the history
Also updates and uses porting::getSupportedVideoModes()
  • Loading branch information
Zeno- committed Mar 28, 2015
1 parent 3ef0b4e commit 2430b2e
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/porting.cpp
Expand Up @@ -570,16 +570,20 @@ void setXorgClassHint(const video::SExposedVideoData &video_data,
}

#ifndef SERVER

v2u32 getWindowSize()
{
return device->getVideoDriver()->getScreenSize();
}


std::vector<core::vector3d<u32> > getVideoModes()
std::vector<core::vector3d<u32> > getSupportedVideoModes()
{
IrrlichtDevice *nulldevice = createDevice(video::EDT_NULL);
sanity_check(nulldevice != NULL);

std::vector<core::vector3d<u32> > mlist;
video::IVideoModeList *modelist = device->getVideoModeList();
video::IVideoModeList *modelist = nulldevice->getVideoModeList();

u32 num_modes = modelist->getVideoModeCount();
for (u32 i = 0; i != num_modes; i++) {
Expand All @@ -588,6 +592,8 @@ std::vector<core::vector3d<u32> > getVideoModes()
mlist.push_back(core::vector3d<u32>(mode_res.Width, mode_res.Height, mode_depth));
}

nulldevice->drop();

return mlist;
}

Expand Down
1 change: 1 addition & 0 deletions src/porting.h
Expand Up @@ -371,6 +371,7 @@ float getDisplayDensity();
v2u32 getDisplaySize();
v2u32 getWindowSize();

std::vector<core::vector3d<u32> > getSupportedVideoModes();
std::vector<irr::video::E_DRIVER_TYPE> getSupportedVideoDrivers();
const char *getVideoDriverName(irr::video::E_DRIVER_TYPE type);
const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type);
Expand Down
23 changes: 23 additions & 0 deletions src/script/lua_api/l_mainmenu.cpp
Expand Up @@ -1056,6 +1056,28 @@ int ModApiMainMenu::l_get_video_drivers(lua_State *L)
return 1;
}

/******************************************************************************/
int ModApiMainMenu::l_get_video_modes(lua_State *L)
{
std::vector<core::vector3d<u32> > videomodes
= porting::getSupportedVideoModes();

lua_newtable(L);
for (u32 i = 0; i != videomodes.size(); i++) {
lua_newtable(L);
lua_pushnumber(L, videomodes[i].X);
lua_setfield(L, -2, "w");
lua_pushnumber(L, videomodes[i].Y);
lua_setfield(L, -2, "h");
lua_pushnumber(L, videomodes[i].Z);
lua_setfield(L, -2, "depth");

lua_rawseti(L, -2, i + 1);
}

return 1;
}

/******************************************************************************/
int ModApiMainMenu::l_gettext(lua_State *L)
{
Expand Down Expand Up @@ -1164,6 +1186,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(sound_stop);
API_FCT(gettext);
API_FCT(get_video_drivers);
API_FCT(get_video_modes);
API_FCT(get_screen_info);
API_FCT(get_min_supp_proto);
API_FCT(get_max_supp_proto);
Expand Down
2 changes: 2 additions & 0 deletions src/script/lua_api/l_mainmenu.h
Expand Up @@ -137,6 +137,8 @@ class ModApiMainMenu : public ModApiBase {

static int l_get_video_drivers(lua_State *L);

static int l_get_video_modes(lua_State *L);

//version compatibility
static int l_get_min_supp_proto(lua_State *L);

Expand Down

0 comments on commit 2430b2e

Please sign in to comment.