mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-31 07:25:22 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			164 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --Minetest
 | |
| --Copyright (C) 2013 sapier
 | |
| --Copyright (C) 2021-2 x2048
 | |
| --Copyright (C) 2022-3 rubenwardy
 | |
| --
 | |
| --This program is free software; you can redistribute it and/or modify
 | |
| --it under the terms of the GNU Lesser General Public License as published by
 | |
| --the Free Software Foundation; either version 2.1 of the License, or
 | |
| --(at your option) any later version.
 | |
| --
 | |
| --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 Lesser General Public License for more details.
 | |
| --
 | |
| --You should have received a copy of the GNU Lesser General Public License along
 | |
| --with this program; if not, write to the Free Software Foundation, Inc.,
 | |
| --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | |
| 
 | |
| 
 | |
| local shadow_levels_labels = {
 | |
| 	fgettext("Disabled"),
 | |
| 	fgettext("Very Low"),
 | |
| 	fgettext("Low"),
 | |
| 	fgettext("Medium"),
 | |
| 	fgettext("High"),
 | |
| 	fgettext("Very High")
 | |
| }
 | |
| 
 | |
| 
 | |
| local function get_shadow_mapping_idx()
 | |
| 	local level = tonumber(core.settings:get("shadow_levels"))
 | |
| 	if level and level >= 0 and level < #shadow_levels_labels then
 | |
| 		return level + 1
 | |
| 	end
 | |
| 	return 1
 | |
| end
 | |
| 
 | |
| 
 | |
| local function set_shadow_mapping_idx(v)
 | |
| 	assert(v >= 1 and v <= #shadow_levels_labels)
 | |
| 	core.settings:set("shadow_levels", tostring(v - 1))
 | |
| end
 | |
| 
 | |
| 
 | |
| return {
 | |
| 	query_text = "Shaders",
 | |
| 	get_formspec = function(self, avail_w)
 | |
| 		local fs = ""
 | |
| 
 | |
| 		local video_driver = core.get_active_driver()
 | |
| 		local shaders_enabled = core.settings:get_bool("enable_shaders")
 | |
| 		if video_driver == "opengl" then
 | |
| 			fs = fs ..
 | |
| 				"checkbox[0,0.25;cb_shaders;" .. fgettext("Shaders") .. ";"
 | |
| 						.. tostring(shaders_enabled) .. "]"
 | |
| 		elseif video_driver == "ogles2" then
 | |
| 			fs = fs ..
 | |
| 				"checkbox[0,0.25;cb_shaders;" .. fgettext("Shaders (experimental)") .. ";"
 | |
| 						.. tostring(shaders_enabled) .. "]"
 | |
| 		else
 | |
| 			core.settings:set_bool("enable_shaders", false)
 | |
| 			shaders_enabled = false
 | |
| 			fs = fs ..
 | |
| 				"label[0.13,0.25;" .. core.colorize("#888888",
 | |
| 						fgettext("Shaders (unavailable)")) .. "]"
 | |
| 		end
 | |
| 
 | |
| 		if shaders_enabled then
 | |
| 			fs = fs ..
 | |
| 				"container[0,0.75]" ..
 | |
| 				"checkbox[0,0;cb_tonemapping;" .. fgettext("Tone mapping") .. ";"
 | |
| 						.. tostring(core.settings:get_bool("tone_mapping")) .. "]" ..
 | |
| 				"checkbox[0,0.5;cb_waving_water;" .. fgettext("Waving liquids") .. ";"
 | |
| 						.. tostring(core.settings:get_bool("enable_waving_water")) .. "]" ..
 | |
| 				"checkbox[0,1;cb_waving_leaves;" .. fgettext("Waving leaves") .. ";"
 | |
| 						.. tostring(core.settings:get_bool("enable_waving_leaves")) .. "]" ..
 | |
| 				"checkbox[0,1.5;cb_waving_plants;" .. fgettext("Waving plants") .. ";"
 | |
| 						.. tostring(core.settings:get_bool("enable_waving_plants")) .. "]"
 | |
| 
 | |
| 			if video_driver == "opengl" then
 | |
| 				fs = fs ..
 | |
| 					"label[0,2.2;" .. fgettext("Dynamic shadows") .. "]" ..
 | |
| 					"dropdown[0,2.4;3,0.8;dd_shadows;" .. table.concat(shadow_levels_labels, ",") .. ";" ..
 | |
| 						get_shadow_mapping_idx() .. ";true]" ..
 | |
| 					"label[0,3.5;" .. core.colorize("#bbb", fgettext("(The game will need to enable shadows as well)")) .. "]"
 | |
| 			else
 | |
| 				fs = fs ..
 | |
| 					"label[0,2.2;" .. core.colorize("#888888", fgettext("Dynamic shadows")) .. "]"
 | |
| 			end
 | |
| 
 | |
| 			fs = fs .. "container_end[]"
 | |
| 		else
 | |
| 			fs = fs ..
 | |
| 				"container[0.35,0.75]" ..
 | |
| 				"label[0,0;" .. core.colorize("#888888",
 | |
| 						fgettext("Tone mapping")) .. "]" ..
 | |
| 				"label[0,0.5;" .. core.colorize("#888888",
 | |
| 						fgettext("Waving liquids")) .. "]" ..
 | |
| 				"label[0,1;" .. core.colorize("#888888",
 | |
| 						fgettext("Waving leaves")) .. "]" ..
 | |
| 				"label[0,1.5;" .. core.colorize("#888888",
 | |
| 						fgettext("Waving plants")) .. "]"..
 | |
| 				"label[0,2;" .. core.colorize("#888888",
 | |
| 						fgettext("Dynamic shadows")) .. "]" ..
 | |
| 				"container_end[]"
 | |
| 		end
 | |
| 		return fs, 4.5
 | |
| 	end,
 | |
| 
 | |
| 	on_submit = function(self, fields)
 | |
| 		if fields.cb_shaders then
 | |
| 			core.settings:set("enable_shaders", fields.cb_shaders)
 | |
| 			return true
 | |
| 		end
 | |
| 		if fields.cb_tonemapping then
 | |
| 			core.settings:set("tone_mapping", fields.cb_tonemapping)
 | |
| 			return true
 | |
| 		end
 | |
| 		if fields.cb_waving_water then
 | |
| 			core.settings:set("enable_waving_water", fields.cb_waving_water)
 | |
| 			return true
 | |
| 		end
 | |
| 		if fields.cb_waving_leaves then
 | |
| 			core.settings:set("enable_waving_leaves", fields.cb_waving_leaves)
 | |
| 			return true
 | |
| 		end
 | |
| 		if fields.cb_waving_plants then
 | |
| 			core.settings:set("enable_waving_plants", fields.cb_waving_plants)
 | |
| 			return true
 | |
| 		end
 | |
| 
 | |
| 		if fields.dd_shadows then
 | |
| 			local old_shadow_level_idx = get_shadow_mapping_idx()
 | |
| 			local shadow_level_idx = tonumber(fields.dd_shadows)
 | |
| 			if shadow_level_idx == nil or shadow_level_idx == old_shadow_level_idx then
 | |
| 				return false
 | |
| 			end
 | |
| 
 | |
| 			set_shadow_mapping_idx(shadow_level_idx)
 | |
| 
 | |
| 			local shadow_presets = {
 | |
| 				[2] = { 62,  512,  "true", 0, "false" },
 | |
| 				[3] = { 93,  1024, "true", 0, "false" },
 | |
| 				[4] = { 140, 2048, "true", 1, "false" },
 | |
| 				[5] = { 210, 4096, "true", 2,  "true" },
 | |
| 				[6] = { 300, 8192, "true", 2,  "true" },
 | |
| 			}
 | |
| 			local preset = shadow_presets[shadow_level_idx]
 | |
| 			if preset then
 | |
| 				core.settings:set("enable_dynamic_shadows", "true")
 | |
| 				core.settings:set("shadow_map_max_distance", preset[1])
 | |
| 				core.settings:set("shadow_map_texture_size", preset[2])
 | |
| 				core.settings:set("shadow_map_texture_32bit", preset[3])
 | |
| 				core.settings:set("shadow_filters", preset[4])
 | |
| 				core.settings:set("shadow_map_color", preset[5])
 | |
| 			else
 | |
| 				core.settings:set("enable_dynamic_shadows", "false")
 | |
| 			end
 | |
| 			return true
 | |
| 		end
 | |
| 	end,
 | |
| }
 |