From 3cec2301f852a49c7331c92be1780740d4f402d9 Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Wed, 2 Jun 2010 19:13:50 +0000
Subject: [PATCH] fucking sahders

git-svn-id: http://svn.net-core.org/repos/t-engine4@743 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/engine/Shader.lua                        | 20 ++++++++++---------
 .../modules/tome/data/general/grids/basic.lua |  2 +-
 game/modules/tome/data/gfx/shaders/water.frag |  6 ++++++
 game/modules/tome/data/gfx/shaders/water.lua  |  6 ++++++
 src/shaders.c                                 | 10 +++++-----
 5 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/game/engine/Shader.lua b/game/engine/Shader.lua
index 86b37fd047..1c3899949d 100644
--- a/game/engine/Shader.lua
+++ b/game/engine/Shader.lua
@@ -93,17 +93,19 @@ function _M:loaded()
 		setfenv(f, setmetatable(self.args or {}, {__index=_G}))
 		local def = f()
 		_M.progs[self.name] = self:createProgram(def)
-	end
-
-	self.shad = _M.progs[self.name]
 
-	for k, v in pairs(self.args) do
-		if type(v) == "number" then
-			self.shad:paramNumber(k, v)
-		elseif type(v) == "table"
-			if v.texture then
-				self.shad:paramNumber(k, v.texture, v.is3d)
+		for k, v in pairs(def.args) do
+			if type(v) == "number" then
+				print("[SHADER] setting param", k, v)
+				_M.progs[self.name]:paramNumber(k, v)
+			elseif type(v) == "table" then
+				if v.texture then
+					print("[SHADER] setting texture param", k, v.texture)
+					_M.progs[self.name]:paramTexture(k, v.texture, v.is3d)
+				end
 			end
 		end
 	end
+
+	self.shad = _M.progs[self.name]
 end
diff --git a/game/modules/tome/data/general/grids/basic.lua b/game/modules/tome/data/general/grids/basic.lua
index d5d16d3108..ea12f0cc20 100644
--- a/game/modules/tome/data/general/grids/basic.lua
+++ b/game/modules/tome/data/general/grids/basic.lua
@@ -62,7 +62,7 @@ newEntity{
 
 newEntity{
 	define_as = "WALL",
---	shader = "water", shader_args = {},
+	shader = "water", shader_args = {},
 	name = "wall", image = "terrain/granite_wall1.png",
 	display = '#', color_r=255, color_g=255, color_b=255, back_color=colors.GREY,
 	always_remember = true,
diff --git a/game/modules/tome/data/gfx/shaders/water.frag b/game/modules/tome/data/gfx/shaders/water.frag
index 5d0d7db109..cd6f9dd27f 100644
--- a/game/modules/tome/data/gfx/shaders/water.frag
+++ b/game/modules/tome/data/gfx/shaders/water.frag
@@ -1,6 +1,7 @@
 uniform int tick;
 uniform sampler3D noisevol;
 uniform sampler2D noise2d;
+uniform float red;
 
 void main(void)
 {
@@ -17,4 +18,9 @@ void main(void)
 	vec4 n = texture2D(noise2d, gl_TexCoord[0].xy);
 	n.x = 1;
 	gl_FragColor = n;
+
+//	int i = (tick / 30) % 255;
+//	float t = (float)i;
+//	t = t / 255;
+//	gl_FragColor = vec4(red, 0, t, 1);
 }
diff --git a/game/modules/tome/data/gfx/shaders/water.lua b/game/modules/tome/data/gfx/shaders/water.lua
index c2735c36c5..58b7ce3507 100644
--- a/game/modules/tome/data/gfx/shaders/water.lua
+++ b/game/modules/tome/data/gfx/shaders/water.lua
@@ -17,7 +17,13 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
+local noise = core.noise.new(2)
+local tex = noise:makeTexture2D("simplex", 128, 128, 4, 0, 0)
+
 return {
 	frag = "water",
+	args = {
+		noise2d = { texture = tex },
+	},
 	clone = false,
 }
diff --git a/src/shaders.c b/src/shaders.c
index 60c3f70402..92e15ad7a5 100644
--- a/src/shaders.c
+++ b/src/shaders.c
@@ -159,8 +159,8 @@ static int program_set_uniform_number(lua_State *L)
 	const char *var = luaL_checkstring(L, 2);
 	GLfloat i = luaL_checknumber(L, 3);
 
-	CHECKGL(glUseProgramObjectARB(p));
-	CHECKGL(glUniform1fvARB(glGetUniformLocationARB(p, var), 1, &i));
+	CHECKGL(glUseProgramObjectARB(*p));
+	CHECKGL(glUniform1fvARB(glGetUniformLocationARB(*p, var), 1, &i));
 	CHECKGL(glUseProgramObjectARB(0));
 	return 0;
 }
@@ -173,12 +173,12 @@ static int program_set_uniform_texture(lua_State *L)
 	bool is3d = lua_toboolean(L, 4);
 
 	GLint i = 1;
-	CHECKGL(glUseProgramObjectARB(p));
+	CHECKGL(glUseProgramObjectARB(*p));
 	CHECKGL(glActiveTexture(GL_TEXTURE1));
 	CHECKGL(glBindTexture(is3d ? GL_TEXTURE_3D : GL_TEXTURE_2D, *t));
-	CHECKGL(glUniform1ivARB(glGetUniformLocationARB(p, var), 1, &i));
-	CHECKGL(glActiveTexture(GL_TEXTURE0));
+	CHECKGL(glUniform1ivARB(glGetUniformLocationARB(*p, var), 1, &i));
 	CHECKGL(glUseProgramObjectARB(0));
+//	CHECKGL(glActiveTexture(GL_TEXTURE0));
 	return 0;
 }
 
-- 
GitLab