Skip to content
Snippets Groups Projects
Commit 996ea606 authored by sapier's avatar sapier
Browse files

Add video driver selection to settings menu (based uppon idea from webdesigner97)

parent 26f4a5c1
No related branches found
No related tags found
No related merge requests found
......@@ -110,6 +110,24 @@ local function scrollbar_to_gui_scale(value)
end
local function formspec(tabview, name, tabdata)
local video_drivers = core.get_video_drivers()
local video_driver_string = ""
local current_video_driver_idx = 0
local current_video_driver = core.setting_get("video_driver")
for i=1, #video_drivers, 1 do
if i ~= 1 then
video_driver_string = video_driver_string .. ","
end
video_driver_string = video_driver_string .. video_drivers[i]
if current_video_driver:lower() == video_drivers[i]:lower() then
current_video_driver_idx = i
end
end
local tab_string =
"vertlabel[0,-0.25;" .. fgettext("SETTINGS") .. "]" ..
"box[0.75,0;3.25,4;#999999]" ..
......@@ -125,6 +143,10 @@ local function formspec(tabview, name, tabdata)
.. dump(core.setting_getbool("preload_item_visuals")) .. "]"..
"checkbox[1,2.5;cb_particles;".. fgettext("Enable Particles") .. ";"
.. dump(core.setting_getbool("enable_particles")) .. "]"..
"dropdown[1,3.25;3;dd_video_driver;"
.. video_driver_string .. ";" .. current_video_driver_idx .. "]" ..
"tooltip[dd_video_driver;" ..
fgettext("Restart minetest for driver change to take effect") .. "]" ..
"box[4.25,0;3.25,2.5;#999999]" ..
"checkbox[4.5,0;cb_mipmapping;".. fgettext("Mip-Mapping") .. ";"
.. dump(core.setting_getbool("mip_map")) .. "]"..
......@@ -284,16 +306,20 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
return true
end
if fields["btn_reset_singleplayer"] then
print("sp reset")
showconfirm_reset(this)
return true
end
--Note dropdowns have to be handled LAST!
local ddhandled = false
if fields["dd_touchthreshold"] then
core.setting_set("touchscreen_threshold",fields["dd_touchthreshold"])
ddhandled = true
end
if fields["dd_video_driver"] then
core.setting_set("video_driver",fields["dd_video_driver"])
ddhandled = true
end
return ddhandled
end
......
......@@ -88,6 +88,9 @@ core.sound_play(spec, looped) -> handle
^ spec = SimpleSoundSpec (see lua-api.txt)
^ looped = bool
core.sound_stop(handle)
core.get_video_drivers()
^ get list of video drivers supported by engine (not all modes are guaranteed to work)
^ returns list of available video drivers e.g. { "OpenGL", "Software" }
Formspec:
core.update_formspec(formspec)
......
......@@ -1365,41 +1365,43 @@ int main(int argc, char *argv[])
u16 fsaa = g_settings->getU16("fsaa");
// Determine driver
video::E_DRIVER_TYPE driverType;
std::string driverstring = g_settings->get("video_driver");
if (driverstring == "null")
driverType = video::EDT_NULL;
else if (driverstring == "software")
driverType = video::EDT_SOFTWARE;
else if (driverstring == "burningsvideo")
driverType = video::EDT_BURNINGSVIDEO;
else if (driverstring == "direct3d8")
driverType = video::EDT_DIRECT3D8;
else if (driverstring == "direct3d9")
driverType = video::EDT_DIRECT3D9;
else if (driverstring == "opengl")
driverType = video::EDT_OPENGL;
video::E_DRIVER_TYPE driverType = video::EDT_OPENGL;
static const char* driverids[] = {
"null",
"software",
"burningsvideo",
"direct3d8",
"direct3d9",
"opengl"
#ifdef _IRR_COMPILE_WITH_OGLES1_
else if (driverstring == "ogles1")
driverType = video::EDT_OGLES1;
,"ogles1"
#endif
#ifdef _IRR_COMPILE_WITH_OGLES2_
else if (driverstring == "ogles2")
driverType = video::EDT_OGLES2;
,"ogles2"
#endif
else {
errorstream << "WARNING: Invalid video_driver specified; defaulting "
<< "to opengl" << std::endl;
driverType = video::EDT_OPENGL;
,"invalid"
};
std::string driverstring = g_settings->get("video_driver");
for (unsigned int i = 0;
i < (sizeof(driverids)/sizeof(driverids[0]));
i++)
{
if (strcasecmp(driverstring.c_str(), driverids[i]) == 0) {
driverType = (video::E_DRIVER_TYPE) i;
break;
}
if (strcasecmp("invalid", driverids[i]) == 0) {
errorstream << "WARNING: Invalid video_driver specified; defaulting "
<< "to opengl" << std::endl;
break;
}
}
/*
List video modes if requested
*/
MyEventReceiver* receiver = new MyEventReceiver();
if (cmd_args.getFlag("videomodes")) {
......
......@@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "sound.h"
#include "settings.h"
#include "main.h" // for g_settings
#include "EDriverTypes.h"
#include <IFileArchive.h>
#include <IFileSystem.h>
......@@ -1001,6 +1002,36 @@ int ModApiMainMenu::l_download_file(lua_State *L)
return 1;
}
/******************************************************************************/
int ModApiMainMenu::l_get_video_drivers(lua_State *L)
{
static const char* drivernames[] = {
"NULL Driver",
"Software",
"Burningsvideo",
"Direct3D 8",
"Direct3D 9",
"OpenGL",
"OGLES1",
"OGLES2"
};
unsigned int index = 1;
lua_newtable(L);
int top = lua_gettop(L);
for (unsigned int i = irr::video::EDT_SOFTWARE;
i < MYMIN(irr::video::EDT_COUNT, (sizeof(drivernames)/sizeof(drivernames[0])));
i++) {
if (irr::IrrlichtDevice::isDriverSupported((irr::video::E_DRIVER_TYPE) i)) {
lua_pushnumber(L,index++);
lua_pushstring(L,drivernames[i]);
lua_settable(L, top);
}
}
return 1;
}
/******************************************************************************/
int ModApiMainMenu::l_gettext(lua_State *L)
{
......@@ -1094,6 +1125,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(sound_play);
API_FCT(sound_stop);
API_FCT(gettext);
API_FCT(get_video_drivers);
API_FCT(get_screen_info);
API_FCT(do_async_callback);
}
......
......@@ -133,6 +133,8 @@ class ModApiMainMenu : public ModApiBase {
static int l_download_file(lua_State *L);
static int l_get_video_drivers(lua_State *L);
// async
static int l_do_async_callback(lua_State *L);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment