diff --git a/game/engine/Shader.lua b/game/engine/Shader.lua index 86b37fd047a66e9cc0e77238284981339ddb7b7b..1c3899949de9aceccdd91dab7d2f58c4cbce0556 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 d5d16d31088479e18a567f996d854b4ab9d723ce..ea12f0cc20a294b60ce18f1db34ddd69f2c51b49 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 5d0d7db109c6166efe6446b35f74b0273a77de79..cd6f9dd27f6ae0cc15db98daa5feebbd41ce0d88 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 c2735c36c510f50ffa824c9804d3e4278c39190d..58b7ce3507d0807bf4c2dc5a3f631c0461d6d39c 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 60c3f70402d81b8115a4726387a2444b4098b807..92e15ad7a50839677ac3c686b747194635079578 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; }