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