Store shaders as lua strings

This commit is contained in:
Kyle McLamb 2016-04-30 09:37:28 -04:00
parent 22f3ac5f80
commit 0691826e07
27 changed files with 74 additions and 30 deletions

View File

@ -7,8 +7,8 @@ local vector = require(_PACKAGE..'/vector')
local body = {} local body = {}
body.__index = body body.__index = body
body.glowShader = love.graphics.newShader(_PACKAGE.."/shaders/glow.glsl") body.glowShader = love.graphics.newShader(require(_PACKAGE..".shaders.glow"))
body.materialShader = love.graphics.newShader(_PACKAGE.."/shaders/material.glsl") body.materialShader = love.graphics.newShader(require(_PACKAGE..".shaders.material"))
local function new(id, type, ...) local function new(id, type, ...)
local args = {...} local args = {...}

View File

@ -31,10 +31,10 @@ local PostShader = require(_PACKAGE..'postshader')
local light_world = {} local light_world = {}
light_world.__index = light_world light_world.__index = light_world
light_world.image_mask = love.graphics.newShader(_PACKAGE.."/shaders/image_mask.glsl") light_world.image_mask = love.graphics.newShader(require(_PACKAGE.."shaders.image_mask"))
light_world.shadowShader = love.graphics.newShader(_PACKAGE.."/shaders/shadow.glsl") light_world.shadowShader = love.graphics.newShader(require(_PACKAGE.."shaders.shadow"))
light_world.refractionShader = love.graphics.newShader(_PACKAGE.."shaders/refraction.glsl") light_world.refractionShader = love.graphics.newShader(require(_PACKAGE.."shaders.refraction"))
light_world.reflectionShader = love.graphics.newShader(_PACKAGE.."shaders/reflection.glsl") light_world.reflectionShader = love.graphics.newShader(require(_PACKAGE.."shaders.reflection"))
local function new(options) local function new(options)
local obj = {} local obj = {}

View File

@ -31,15 +31,16 @@ local files = love.filesystem.getDirectoryItems(_PACKAGE.."/shaders/postshaders"
local shaders = {} local shaders = {}
for i,v in ipairs(files) do for i,v in ipairs(files) do
local name = _PACKAGE.."/shaders/postshaders".."/"..v local name = _PACKAGE.."/shaders/postshaders/"..v
local module = _PACKAGE..".shaders.postshaders."..v:gsub("%.lua","")
if love.filesystem.isFile(name) then if love.filesystem.isFile(name) then
local str = love.filesystem.read(name) local str = love.filesystem.read(name)
local effect = love.graphics.newShader(name) local effect = love.graphics.newShader(require(module))
local defs = {} local defs = {}
for vtype, extern in str:gmatch("extern (%w+) (%w+)") do for vtype, extern in str:gmatch("extern (%w+) (%w+)") do
defs[extern] = true defs[extern] = true
end end
local shaderName = name:match(".-([^\\|/]-[^%.]+)$"):gsub("%.glsl", "") local shaderName = name:match(".-([^\\|/]-[^%.]+)$"):gsub("%.lua", "")
shaders[shaderName] = {effect, defs} shaders[shaderName] = {effect, defs}
end end
end end

View File

@ -1,3 +1,4 @@
return [[//
extern Image glowImage; extern Image glowImage;
extern float glowTime; extern float glowTime;
@ -17,3 +18,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
return vec4(Texel(texture, texture_coords).rgb * glowInfo.r, 1.0); return vec4(Texel(texture, texture_coords).rgb * glowInfo.r, 1.0);
} }
]]

View File

@ -1,6 +1,8 @@
return [[//
//https://love2d.org/wiki/love.graphics.setStencil image mask //https://love2d.org/wiki/love.graphics.setStencil image mask
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords) { vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords) {
if (Texel(texture, texture_coords).rgb == vec3(0.0)) if (Texel(texture, texture_coords).rgb == vec3(0.0))
discard; discard;
return vec4(1.0); return vec4(1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern Image material; extern Image material;
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) { vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
@ -8,3 +9,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
return vec4(0.0); return vec4(0.0);
} }
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern float exposure = 0.7; extern float exposure = 0.7;
extern float brightness = 1.0; extern float brightness = 1.0;
extern vec3 lumacomponents = vec3(1.0, 1.0, 1.0); extern vec3 lumacomponents = vec3(1.0, 1.0, 1.0);
@ -11,3 +12,4 @@ vec4 effect(vec4 vcolor, Image texture, vec2 texcoord, vec2 pixel_coords) {
vec4 luma = vec4(luminance); vec4 luma = vec4(luminance);
return vec4(luma.rgb * brightness, 1.0); return vec4(luma.rgb * brightness, 1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern float steps = 2.0; extern float steps = 2.0;
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) { vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
@ -10,3 +11,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
col = col / (steps * 2.0 + 1.0); col = col / (steps * 2.0 + 1.0);
return vec4(col.r, col.g, col.b, 1.0); return vec4(col.r, col.g, col.b, 1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern float steps = 2.0; extern float steps = 2.0;
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) { vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
@ -10,3 +11,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
col = col / (steps * 2.0 + 1.0); col = col / (steps * 2.0 + 1.0);
return vec4(col.r, col.g, col.b, 1.0); return vec4(col.r, col.g, col.b, 1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern vec2 redStrength = vec2(4.0, 3.0); extern vec2 redStrength = vec2(4.0, 3.0);
extern vec2 greenStrength = vec2(-2.0, -1.0); extern vec2 greenStrength = vec2(-2.0, -1.0);
extern vec2 blueStrength = vec2(1.0, -3.0); extern vec2 blueStrength = vec2(1.0, -3.0);
@ -10,3 +11,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
return vec4(colRed, colGreen, colBlue, 1.0); return vec4(colRed, colGreen, colBlue, 1.0);
} }
]]

View File

@ -1,5 +1,7 @@
return [[//
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) { vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
vec3 col = Texel(texture, texture_coords).rgb * 2.0; vec3 col = Texel(texture, texture_coords).rgb * 2.0;
col *= col; col *= col;
return vec4(col, 1.0); return vec4(col, 1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
#define distortion 0.2 #define distortion 0.2
vec2 radialDistortion(vec2 coord) { vec2 radialDistortion(vec2 coord) {
vec2 cc = coord - 0.5; vec2 cc = coord - 0.5;
@ -16,3 +17,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
texcolor.a = 1.0; texcolor.a = 1.0;
return texcolor; return texcolor;
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
/* /*
Edge shader Edge shader
Author: Themaister Author: Themaister
@ -35,5 +36,4 @@ vec4 effect(vec4 vcolor, Image texture, vec2 tex, vec2 pixel_coords)
vec4 final = vec4(5.0 * grayscale(abs(res - c11)), 1.0); vec4 final = vec4(5.0 * grayscale(abs(res - c11)), 1.0);
return clamp(final, 0.0, 1.0); return clamp(final, 0.0, 1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern vec3 palette[4]; extern vec3 palette[4];
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords){ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords){
@ -6,3 +7,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords){
return vec4(palette[index], 1.0); return vec4(palette[index], 1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) { vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
vec4 rgb = Texel(texture, texture_coords); vec4 rgb = Texel(texture, texture_coords);
vec4 intens = smoothstep(0.2,0.8,rgb) + normalize(vec4(rgb.xyz, 1.0)); vec4 intens = smoothstep(0.2,0.8,rgb) + normalize(vec4(rgb.xyz, 1.0));
@ -6,3 +7,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
intens.a = 1.0; intens.a = 1.0;
return intens; return intens;
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern float time = 0.0; extern float time = 0.0;
extern vec3 tint = vec3(1.0, 1.0, 1.0); extern vec3 tint = vec3(1.0, 1.0, 1.0);
extern float fudge = 0.1; extern float fudge = 0.1;
@ -11,3 +12,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords){
float intensity = (pixel.r + pixel.g + pixel.b) / 3.0 + (rand(texture_coords, time) - 0.5) * fudge; float intensity = (pixel.r + pixel.g + pixel.b) / 3.0 + (rand(texture_coords, time) - 0.5) * fudge;
return vec4(intensity * tint.r, intensity * tint.g, intensity * tint.b, 1.0); return vec4(intensity * tint.r, intensity * tint.g, intensity * tint.b, 1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
/* /*
caligari's scanlines caligari's scanlines
@ -13,7 +14,7 @@
http://board.byuu.org/viewtopic.php?p=36219#p36219 http://board.byuu.org/viewtopic.php?p=36219#p36219
"As I said to Hyllian by PM, I'm fine with the GPL (not really a bi "As I said to Hyllian by PM, I'm fine with the GPL (not really a big
deal...)" deal...)"
) )
*/ */
@ -155,3 +156,4 @@ vec4 effect(vec4 vcolor, Image texture, vec2 texCoord, vec2 pixel_coords)
return clamp(GAMMA_OUT(color), 0.0, 1.0); return clamp(GAMMA_OUT(color), 0.0, 1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
/* /*
Plain (and obviously inaccurate) phosphor. Plain (and obviously inaccurate) phosphor.
Author: Themaister Author: Themaister
@ -42,4 +43,4 @@ vec4 effect(vec4 vcolor, Image texture, vec2 texture_coords, vec2 pixel_coords)
return vec4(intensity * result, 1.0); return vec4(intensity * result, 1.0);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
#define glarebasesize 0.896 #define glarebasesize 0.896
#define power 0.50 #define power 0.50
extern float time; extern float time;
@ -59,4 +60,4 @@ vec4 effect(vec4 vcolor, Image texture, vec2 texcoord, vec2 pixel_coords)
return finalcolor; return finalcolor;
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
const float pixel_w = 2.0; const float pixel_w = 2.0;
const float pixel_h = 2.0; const float pixel_h = 2.0;
@ -8,3 +9,4 @@ vec4 effect(vec4 vcolor, Image texture, vec2 uv, vec2 pixel_coords)
vec2 coord = vec2(dx*floor(uv.x/dx), dy*floor(uv.y/dy)); vec2 coord = vec2(dx*floor(uv.x/dx), dy*floor(uv.y/dy));
return Texel(texture, coord); return Texel(texture, coord);
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
#define nsamples 5 #define nsamples 5
extern number blurstart = 1.0; // 0 to 1 extern number blurstart = 1.0; // 0 to 1
extern number blurwidth = -0.02; // -1 to 1 extern number blurwidth = -0.02; // -1 to 1
@ -18,3 +19,4 @@ vec4 effect(vec4 vcolor, Image texture, vec2 texture_coords, vec2 pixel_coords)
return c; return c;
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern float strength = 2.0; extern float strength = 2.0;
extern float time = 0.0; extern float time = 0.0;
@ -30,3 +31,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords){
return vec4(vec3(red * 0.75, green * 0.75, blue * 0.75) * brightness, 1.0); return vec4(vec3(red * 0.75, green * 0.75, blue * 0.75) * brightness, 1.0);
} }
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern Image imgBuffer; extern Image imgBuffer;
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords){ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords){
@ -10,3 +11,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords){
return vec4(pixel.rgb * (0.5 - texture_coords.y) * 2.0 + pixelBuffer.rgb * texture_coords.y * 2.0, 1.0); return vec4(pixel.rgb * (0.5 - texture_coords.y) * 2.0 + pixelBuffer.rgb * texture_coords.y * 2.0, 1.0);
} }
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
/* /*
Themaister's Waterpaint shader Themaister's Waterpaint shader
@ -53,3 +54,4 @@ vec4 effect(vec4 vcolor, Image texture, vec2 tex, vec2 pixel_coords)
return final; return final;
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern Image backBuffer; extern Image backBuffer;
extern float reflectionStrength; extern float reflectionStrength;
@ -21,3 +22,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
return vec4(0.0); return vec4(0.0);
} }
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
extern Image backBuffer; extern Image backBuffer;
extern float refractionStrength = 1.0; extern float refractionStrength = 1.0;
@ -16,3 +17,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
return vec4(0.0); return vec4(0.0);
} }
} }
]]

View File

@ -1,3 +1,4 @@
return [[//
/* /*
Copyright (c) 2014 Tim Anema Copyright (c) 2014 Tim Anema
light shadow, shine and normal shader all in one light shadow, shine and normal shader all in one
@ -47,4 +48,4 @@ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {
return pixel; return pixel;
} }
} }
]]