aboutsummaryrefslogtreecommitdiff
path: root/client/shaders/nodes_shader
Commit message (Collapse)AuthorAge
* Fix fog weirdness (#5146)numberZero2017-01-31
|
* Add hardware node coloring. Includes:Dániel Juhász2017-01-23
| | | | | | - Increase ContentFeatures serialization version - Color property and palettes for nodes - paramtype2 = "color", "colored facedir" or "colored wallmounted"
* Shaders: Remove unnecessary 'if' statementsLars Hofhansl2016-12-24
| | | | | | Pull if GENERATE_NORMALMAPS == 1 into the template to avoid evaluating it for each fragment. Remove if (fogDistance != 0.0).
* Fog: Make fraction of visible distance at which fog starts configurableLars Hofhansl2016-12-07
| | | | | | Optimise the fetching of global settings 'camera_smoothing', 'cinematic' and 'cinematic_camera_smoothing'. Cache 'cam_smoothing'.
* Fix unexplained shader issue (glsl compiler bug??) (#4757)Rogier-52016-11-17
|
* Remove unused shader matrices. (#4723)lhofhansl2016-11-04
|
* Shaders: Remove special handling for liquids. (#4670)lhofhansl2016-10-26
|
* Shaders: Apply tone mapping before fog calculation.Lars Hofhansl2016-10-25
|
* Shaders: Harmonize Irrlicht and shader fog calculationsLars Hofhansl2016-10-24
|
* Use range-based fog instead of z-plane based.Lars Hofhansl2016-10-13
|
* Nodes shader: Decrease amplitude of waving leaves and plantsparamat2016-03-30
| | | | | | Fix initialisation of variable 'disp' Fix a few minor code style issues Add independent X motion combining 2 prime frequencies
* Replace CRLF with LF in shader filesest312016-03-25
|
* Shaders: fix fog not affecting opaque liquidsRealBadAngel2016-02-23
|
* Filmic HDR tone mappingRealBadAngel2016-02-09
|
* Speed up and make more accurate relief mappingRealBadAngel2015-12-10
| | | | using linear + binary search.
* Shaders: use triple-frequency waving for leaves and plantsparamat2015-09-07
|
* Remove use of engine sent texture tiling flags - theyre no longer neededRealBadAngel2015-08-20
|
* Fix relief mapping issuesRealBadAngel2015-07-16
|
* Shaders fixes and cleanup relief mapping code.RealBadAngel2015-07-02
|
* Bugfix: variable type mismatchRealBadAngel2015-06-28
|
* Remove textures vertical offset. Fix for area enabling parallax.RealBadAngel2015-06-21
|
* Automated whitespace error fix for last commitest312015-06-14
|
* Improved parallax mapping. Generate heightmaps on the fly.RealBadAngel2015-06-14
|
* Optimize bumpmapping mathematicsLoic Blot2015-01-16
| | | | | | OpenGL_vertex: * bufferize a duplicate calcul * Factorize vertexes
* Revert "Optimize bumpmapping mathematics"Craig Robbins2015-01-16
| | | | This reverts commit 148fffb0f23fa437c67639ff3cc69177fb71d76a.
* Optimize bumpmapping mathematicsLoic Blot2015-01-15
| | | | | | OpenGL_vertex: * bufferize a duplicate calcul * Factorize vertexes
* Restore finalColorBlend implementation in shaders.RealBadAngel2014-12-07
|
* Let lighting be done only CPU side. Remove finalColorBlend implementation ↵RealBadAngel2014-08-16
| | | | from shaders.
* Make faces shading correct for all possible modes.RealBadAngel2014-08-14
| | | | | Skip shading for lightsources and top of the nodes. Fixes liquid sources and flowing surfaces having different brightness.
* Faces shading fixesRealBadAngel2014-07-07
|
* Improved faces shading with and without shaders.RealBadAngel2014-06-17
|
* Unite nodes shaders.RealBadAngel2014-06-15
Pass drawtype and material type to shaders. Move shaders generation to startup only. Allow assign shaders per tile. Initial code to support water surface shader.
(L, true); return; } lua_newtable(L); if (include_corners) { push_v3s16(L, a->minedge); lua_setfield(L, -2, "min"); push_v3s16(L, a->maxedge); lua_setfield(L, -2, "max"); } if (include_data) { lua_pushlstring(L, a->data.c_str(), a->data.size()); lua_setfield(L, -2, "data"); } } static inline void push_areas(lua_State *L, const std::vector<Area *> &areas, bool corners, bool data) { lua_newtable(L); size_t cnt = areas.size(); for (size_t i = 0; i < cnt; i++) { lua_pushnumber(L, areas[i]->id); push_area(L, areas[i], corners, data); lua_settable(L, -3); } } // Deserializes value and handles errors static int deserialization_helper(lua_State *L, AreaStore *as, std::istream &is) { try { as->deserialize(is); } catch (const SerializationError &e) { lua_pushboolean(L, false); lua_pushstring(L, e.what()); return 2; } lua_pushboolean(L, true); return 1; } // garbage collector int LuaAreaStore::gc_object(lua_State *L) { LuaAreaStore *o = *(LuaAreaStore **)(lua_touserdata(L, 1)); delete o; return 0; } // get_area(id, include_corners, include_data) int LuaAreaStore::l_get_area(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); AreaStore *ast = o->as; u32 id = luaL_checknumber(L, 2); bool include_corners = true; bool include_data = false; get_data_and_corner_flags(L, 3, &include_corners, &include_data); const Area *res; res = ast->getArea(id); if (!res) return 0; push_area(L, res, include_corners, include_data); return 1; } // get_areas_for_pos(pos, include_corners, include_data) int LuaAreaStore::l_get_areas_for_pos(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); AreaStore *ast = o->as; v3s16 pos = check_v3s16(L, 2); bool include_corners = true; bool include_data = false; get_data_and_corner_flags(L, 3, &include_corners, &include_data); std::vector<Area *> res; ast->getAreasForPos(&res, pos); push_areas(L, res, include_corners, include_data); return 1; } // get_areas_in_area(corner1, corner2, accept_overlap, include_corners, include_data) int LuaAreaStore::l_get_areas_in_area(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); AreaStore *ast = o->as; v3s16 minp = check_v3s16(L, 2); v3s16 maxp = check_v3s16(L, 3); sortBoxVerticies(minp, maxp); bool include_corners = true; bool include_data = false; bool accept_overlap = false; if (lua_isboolean(L, 4)) { accept_overlap = readParam<bool>(L, 4); get_data_and_corner_flags(L, 5, &include_corners, &include_data); } std::vector<Area *> res; ast->getAreasInArea(&res, minp, maxp, accept_overlap); push_areas(L, res, include_corners, include_data); return 1; } // insert_area(corner1, corner2, data, id) int LuaAreaStore::l_insert_area(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); AreaStore *ast = o->as; Area a(check_v3s16(L, 2), check_v3s16(L, 3)); size_t d_len; const char *data = luaL_checklstring(L, 4, &d_len); a.data = std::string(data, d_len); if (lua_isnumber(L, 5)) a.id = lua_tonumber(L, 5); // Insert & assign a new ID if necessary if (!ast->insertArea(&a)) return 0; lua_pushnumber(L, a.id); return 1; } // reserve(count) int LuaAreaStore::l_reserve(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); AreaStore *ast = o->as; size_t count = luaL_checknumber(L, 2); ast->reserve(count); return 0; } // remove_area(id) int LuaAreaStore::l_remove_area(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); AreaStore *ast = o->as; u32 id = luaL_checknumber(L, 2); bool success = ast->removeArea(id); lua_pushboolean(L, success); return 1; } // set_cache_params(params) int LuaAreaStore::l_set_cache_params(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); AreaStore *ast = o->as; luaL_checktype(L, 2, LUA_TTABLE); bool enabled = getboolfield_default(L, 2, "enabled", true); u8 block_radius = getintfield_default(L, 2, "block_radius", 64); size_t limit = getintfield_default(L, 2, "block_radius", 1000); ast->setCacheParams(enabled, block_radius, limit); return 0; } // to_string() int LuaAreaStore::l_to_string(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); std::ostringstream os(std::ios_base::binary); o->as->serialize(os); std::string str = os.str(); lua_pushlstring(L, str.c_str(), str.length()); return 1; } // to_file(filename) int LuaAreaStore::l_to_file(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); AreaStore *ast = o->as; const char *filename = luaL_checkstring(L, 2); CHECK_SECURE_PATH(L, filename, true); std::ostringstream os(std::ios_base::binary); ast->serialize(os); lua_pushboolean(L, fs::safeWriteToFile(filename, os.str())); return 1; } // from_string(str) int LuaAreaStore::l_from_string(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); size_t len; const char *str = luaL_checklstring(L, 2, &len); std::istringstream is(std::string(str, len), std::ios::binary); return deserialization_helper(L, o->as, is); } // from_file(filename) int LuaAreaStore::l_from_file(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); const char *filename = luaL_checkstring(L, 2); CHECK_SECURE_PATH(L, filename, false); std::ifstream is(filename, std::ios::binary); return deserialization_helper(L, o->as, is); } LuaAreaStore::LuaAreaStore() : as(AreaStore::getOptimalImplementation()) { } LuaAreaStore::LuaAreaStore(const std::string &type) { #if USE_SPATIAL if (type == "LibSpatial") { as = new SpatialAreaStore(); } else #endif { as = new VectorAreaStore(); } } LuaAreaStore::~LuaAreaStore() { delete as; } // LuaAreaStore() // Creates an LuaAreaStore and leaves it on top of stack int LuaAreaStore::create_object(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = (lua_isstring(L, 1)) ? new LuaAreaStore(readParam<std::string>(L, 1)) : new LuaAreaStore(); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; luaL_getmetatable(L, className); lua_setmetatable(L, -2); return 1; } LuaAreaStore *LuaAreaStore::checkobject(lua_State *L, int narg) { NO_MAP_LOCK_REQUIRED; luaL_checktype(L, narg, LUA_TUSERDATA); void *ud = luaL_checkudata(L, narg, className); if (!ud) luaL_typerror(L, narg, className); return *(LuaAreaStore **)ud; // unbox pointer } void LuaAreaStore::Register(lua_State *L) { lua_newtable(L); int methodtable = lua_gettop(L); luaL_newmetatable(L, className); int metatable = lua_gettop(L); lua_pushliteral(L, "__metatable"); lua_pushvalue(L, methodtable); lua_settable(L, metatable); // hide metatable from Lua getmetatable() lua_pushliteral(L, "__index"); lua_pushvalue(L, methodtable); lua_settable(L, metatable); lua_pushliteral(L, "__gc"); lua_pushcfunction(L, gc_object); lua_settable(L, metatable); lua_pop(L, 1); // drop metatable luaL_register(L, nullptr, methods); // fill methodtable lua_pop(L, 1); // drop methodtable // Can be created from Lua (AreaStore()) lua_register(L, className, create_object); } const char LuaAreaStore::className[] = "AreaStore"; const luaL_Reg LuaAreaStore::methods[] = { luamethod(LuaAreaStore, get_area), luamethod(LuaAreaStore, get_areas_for_pos), luamethod(LuaAreaStore, get_areas_in_area), luamethod(LuaAreaStore, insert_area), luamethod(LuaAreaStore, reserve), luamethod(LuaAreaStore, remove_area), luamethod(LuaAreaStore, set_cache_params), luamethod(LuaAreaStore, to_string), luamethod(LuaAreaStore, to_file), luamethod(LuaAreaStore, from_string), luamethod(LuaAreaStore, from_file), {0,0} };