From a8f307166cd145109d37466b7a80990439d1e6f8 Mon Sep 17 00:00:00 2001 From: DarkGod <darkgod@net-core.org> Date: Sun, 3 Nov 2013 01:00:57 +0100 Subject: [PATCH] perhaps/probably fix the weird screen bug --- game/engines/default/engine/Entity.lua | 7 +++++-- game/engines/default/engine/Shader.lua | 10 +++++++--- game/modules/tome/data/gfx/shaders/full_fbo.lua | 1 + game/modules/tome/data/gfx/shaders/main_fbo.lua | 1 + game/modules/tome/data/gfx/shaders/objectsoutline.lua | 1 + game/modules/tome/data/gfx/shaders/resources.lua | 1 + game/modules/tome/data/gfx/shaders/resources2.lua | 1 + game/modules/tome/data/gfx/shaders/textoutline.lua | 1 + 8 files changed, 18 insertions(+), 5 deletions(-) diff --git a/game/engines/default/engine/Entity.lua b/game/engines/default/engine/Entity.lua index 741095c4f3..ed9bb3c97f 100644 --- a/game/engines/default/engine/Entity.lua +++ b/game/engines/default/engine/Entity.lua @@ -29,7 +29,7 @@ local next_uid = 1 local entities_load_functions = {} _M.__mo_final_repo = {} -_M._no_save_fields = {} +_M._no_save_fields = { _shader = true } _M.__position_aware = false -- Subclasses can change it to know where they are on the map -- Setup the uids & MO repository as a weak value table, when the entities are no more used anywhere else they disappear from there too @@ -327,7 +327,10 @@ function _M:makeMapObject(tiles, idx) -- Setup shader if tiles.use_images and core.shader.active() and self.shader then local shad = Shader.new(self.shader, self.shader_args) - if shad.shad then self._mo:shader(shad.shad) end + if shad.shad then + self._mo:shader(shad.shad) + self._shader = shad + end end self._mo, self.z, last_mo = self:alterMakeMapObject(tiles, self._mo, self.z, last_mo) diff --git a/game/engines/default/engine/Shader.lua b/game/engines/default/engine/Shader.lua index c1f4e800bf..7581bfd468 100644 --- a/game/engines/default/engine/Shader.lua +++ b/game/engines/default/engine/Shader.lua @@ -25,6 +25,7 @@ module(..., package.seeall, class.make) _M.verts = {} _M.frags = {} +_M.progsperm = {} _M.progs = {} _M.progsreset = {} @@ -151,7 +152,7 @@ function _M:loaded() if _M.progs[self.totalname] and not _M.progsreset[self.totalname] then -- print("[SHADER] using cached shader "..self.totalname) self.shad = _M.progs[self.totalname].shad - _M.progs[self.totalname].dieat = os.time() + 120 + _M.progs[self.totalname].dieat = os.time() + 2 else -- print("[SHADER] Loading from /data/gfx/shaders/"..self.name..".lua") local f, err = loadfile("/data/gfx/shaders/"..self.name..".lua") @@ -172,18 +173,21 @@ function _M:loaded() -- print("[SHADER] Loaded shader with totalname", self.totalname) if not _M.progs[self.totalname] then - _M.progs[self.totalname] = {shad=self:createProgram(def), dieat=def.resetargs and (os.time() + 3) or (os.time() + 120)} + _M.progs[self.totalname] = {shad=self:createProgram(def), dieat=def.resetargs and (os.time() + 3) or (os.time() + 2)} _M.progsreset[self.totalname] = def.resetargs else - _M.progs[self.totalname].dieat = def.resetargs and (os.time() + 3) or (os.time() + 120) + _M.progs[self.totalname].dieat = def.resetargs and (os.time() + 3) or (os.time() + 2) end + self.shad = _M.progs[self.totalname].shad if self.shad then for k, v in pairs(def.args) do self:setUniform(k, v) end end + + if def.permanent then _M.progsperm[self.totalname] = self.shad end end if self.shad and _M.progsreset[self.totalname] then diff --git a/game/modules/tome/data/gfx/shaders/full_fbo.lua b/game/modules/tome/data/gfx/shaders/full_fbo.lua index f58cb5f67f..76db2c441f 100644 --- a/game/modules/tome/data/gfx/shaders/full_fbo.lua +++ b/game/modules/tome/data/gfx/shaders/full_fbo.lua @@ -25,4 +25,5 @@ return { noisevol = { texture = 1 }, }, clone = false, + permanent = true, } diff --git a/game/modules/tome/data/gfx/shaders/main_fbo.lua b/game/modules/tome/data/gfx/shaders/main_fbo.lua index 727bbe093d..5d15f72ad7 100644 --- a/game/modules/tome/data/gfx/shaders/main_fbo.lua +++ b/game/modules/tome/data/gfx/shaders/main_fbo.lua @@ -25,4 +25,5 @@ return { noisevol = { texture = 1 }, }, clone = false, + permanent = true, } diff --git a/game/modules/tome/data/gfx/shaders/objectsoutline.lua b/game/modules/tome/data/gfx/shaders/objectsoutline.lua index 4fc329d9ce..20a07d3c06 100644 --- a/game/modules/tome/data/gfx/shaders/objectsoutline.lua +++ b/game/modules/tome/data/gfx/shaders/objectsoutline.lua @@ -28,4 +28,5 @@ return { outlineColor = outlineColor or {0, 1, 0.5, 0.4}, }, clone = false, + permanent = true, } diff --git a/game/modules/tome/data/gfx/shaders/resources.lua b/game/modules/tome/data/gfx/shaders/resources.lua index 24fee413d3..e1047c9075 100644 --- a/game/modules/tome/data/gfx/shaders/resources.lua +++ b/game/modules/tome/data/gfx/shaders/resources.lua @@ -28,4 +28,5 @@ return { amp = amp or 0.2, }, clone = false, + permanent = true, } diff --git a/game/modules/tome/data/gfx/shaders/resources2.lua b/game/modules/tome/data/gfx/shaders/resources2.lua index 7bf542d96f..48721d4e0c 100644 --- a/game/modules/tome/data/gfx/shaders/resources2.lua +++ b/game/modules/tome/data/gfx/shaders/resources2.lua @@ -30,4 +30,5 @@ return { amp = amp or 0.2, }, clone = false, + permanent = true, } diff --git a/game/modules/tome/data/gfx/shaders/textoutline.lua b/game/modules/tome/data/gfx/shaders/textoutline.lua index d8697b80fe..a25e54e024 100644 --- a/game/modules/tome/data/gfx/shaders/textoutline.lua +++ b/game/modules/tome/data/gfx/shaders/textoutline.lua @@ -28,4 +28,5 @@ return { outlineColor = outlineColor or {0, 0, 0, 1}, }, clone = false, + permanent = true, } -- GitLab