SHADER模块整理,初始化代码移至main

This commit is contained in:
MrZ626
2020-11-16 09:21:22 +08:00
parent ba486b5de7
commit f1f2eb583f
19 changed files with 55 additions and 59 deletions

View File

@@ -7,7 +7,6 @@ VIB= require("Zframework/vib")
SFX= require("Zframework/sfx")
LIGHT= require("Zframework/light")
SHADER= require("Zframework/shader")
BG= require("Zframework/bg")
WIDGET= require("Zframework/widget")
TEXT= require("Zframework/text")

View File

@@ -1,10 +1,13 @@
--LIGHT MODULE(Optimized by MrZ,Original on github/love2d community/simple-love-lights)
--LIGHT MODULE (Optimized by MrZ, Original on github/love2d community/simple-love-lights)
--Heavily based on mattdesl's libGDX implementation:
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
local gc=love.graphics
local C=gc.clear
local shadowMapShader=gc.newShader("Zframework/shader/shadowMap.glsl")--Shader for caculating the 1D shadow map.
local lightRenderShader=gc.newShader("Zframework/shader/lightRender.glsl")--Shader for rendering blurred lights and shadows.
local clear,translate=gc.clear,gc.translate
local setCanvas,setShader=gc.setCanvas,gc.setShader
local render=gc.draw
local shadowMapShader=gc.newShader("Zframework/light/shadowMap.glsl")--Shader for caculating the 1D shadow map.
local lightRenderShader=gc.newShader("Zframework/light/lightRender.glsl")--Shader for rendering blurred lights and shadows.
local Lights={}--Lightsource objects
local function move(L,x,y)
L.x,L.y=x,y
@@ -20,9 +23,9 @@ end
local function draw(L)
--Initialization
local r,g,b,a=love.graphics.getColor()
gc.setCanvas(L.blackCanvas)C()
gc.setCanvas(L.shadowCanvas)C()
gc.setCanvas(L.renderCanvas)C()
setCanvas(L.blackCanvas)clear()
setCanvas(L.shadowCanvas)clear()
setCanvas(L.renderCanvas)clear()
lightRenderShader:send("xresolution",L.size)
shadowMapShader:send("yresolution",L.size)
@@ -31,26 +34,26 @@ local function draw(L)
local Y=L.y-L.size*.5
--Render solid
gc.translate(-X,-Y)
translate(-X,-Y)
L.blackCanvas:renderTo(L.blackFn)
gc.translate(X,Y)
translate(X,Y)
--Render shade canvas by solid
gc.setShader(shadowMapShader)
gc.setCanvas(L.shadowCanvas)
gc.draw(L.blackCanvas)
setShader(shadowMapShader)
setCanvas(L.shadowCanvas)
render(L.blackCanvas)
--Render light canvas by shade
gc.setShader(lightRenderShader)
gc.setCanvas(L.renderCanvas)
gc.draw(L.shadowCanvas,0,0,0,1,L.size)
setShader(lightRenderShader)
setCanvas(L.renderCanvas)
render(L.shadowCanvas,0,0,0,1,L.size)
--Ready to final render
gc.setShader()gc.setCanvas()gc.setBlendMode("add")
setShader()setCanvas()gc.setBlendMode("add")
--Render to screes
gc.setColor(r,g,b,a)
gc.draw(L.renderCanvas,X,Y+L.size,0,1,-1)
render(L.renderCanvas,X,Y+L.size,0,1,-1)
--Reset
gc.setBlendMode("alpha")
@@ -71,7 +74,6 @@ end
function LIGHT.add(x,y,R,F)
local id=#Lights+1
Lights[id]={
--Methods
id=id,
x=x,y=y,size=R,
blackCanvas=gc.newCanvas(R,R),--Solid canvas
@@ -79,7 +81,6 @@ function LIGHT.add(x,y,R,F)
renderCanvas=gc.newCanvas(R,R),--Light canvas
blackFn=F,--Solid draw funcion
move=move,
setPow=setPow,
draw=draw,

View File

@@ -1,14 +0,0 @@
local function N(file)
return love.graphics.newShader("Zframework/shader/"..file..".glsl")
end
return{
-- glow=gc.newShader("Zframework/shader/glow.cs"),
alpha=N("alpha"),
warning=N("warning"),
aura=N("aura"),
gradient1=N("grad1"),--Horizonal red-blue gradient
gradient2=N("grad2"),--Vertical red-green gradient
rgb1=N("rgb1"),--Colorful RGB
rgb2=N("rgb2"),--Blue RGB
}

View File

@@ -1,4 +0,0 @@
extern float a;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
return vec4(1.,1.,1.,sign(Texel(text,pos).a)*a);
}

View File

@@ -1,42 +0,0 @@
#define PI 3.1415926535897932384626
extern float w,h;
extern float t;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float x=scr_pos.x/w;
float y=scr_pos.y/h;
float dx,dy;
vec3 V=vec3(0.);
dx=0.5+cos(t*3.*0.26)*0.4-x;
dy=0.5-sin(t*3.*0.62)*0.4-y;
dx=sqrt(dx*dx+dy*dy);
V.r=V.r+smoothstep(1.26,0.,dx);
dx=(0.5+cos(t*3.*0.32)*0.4)-x;
dy=(0.5-sin(t*3.*0.80)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.g=V.g+smoothstep(1.26,0.,dx);
dx=(0.5-cos(t*3.*0.49)*0.4)-x;
dy=(0.5+sin(t*3.*0.18)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.b=V.b+smoothstep(1.26,0.,dx);
dx=(0.5+cos(t*0.53)*0.4)-x;
dy=(0.5-sin(t*0.46)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.rg+=vec2(smoothstep(0.626,0.,dx));
dx=(0.5+cos(t*0.98)*0.4)-x;
dy=(0.5+sin(t*0.57)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.rb+=vec2(smoothstep(0.626,0.,dx));
dx=(0.5-cos(t*0.86)*0.4)-x;
dy=(0.5-sin(t*0.32)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.gb+=vec2(smoothstep(0.626,0.,dx));
dx=1.626*max(max(V.r,V.g),V.b);
return vec4(V/dx,1.);
}

View File

@@ -1,5 +0,0 @@
extern float X,Y,W,H;
vec4 effect(vec4 C,Image Tx,vec2 pos,vec2 scr_pos){
C[3]=min((scr_pos.x-X)/W*0.3+(scr_pos.y-Y)/H*0.1,0.3)+0.5;
return C;
}

View File

@@ -1,10 +0,0 @@
extern float t,w;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float x=scr_pos.x/w;
return vec4(
.8-x*.6,
.3+.2*sin(t),
.15+x*.7,
1.
);
}

View File

@@ -1,10 +0,0 @@
extern float t,h;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float y=scr_pos.y/h;
return vec4(
.8-y*.6,
.2+y*.4,
.3+.1*sin(t),
1.
);
}

View File

@@ -1,11 +0,0 @@
extern float t,w,h;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float x=scr_pos.x/w;
float y=scr_pos.y/h;
return vec4(
.8-y*.7+.2*sin(t/6.26),
.2+y*.5+.15*sin(t/4.),
.2+x*.6-.1*sin(t/2.83),
1.
);
}

View File

@@ -1,11 +0,0 @@
extern float t,w,h;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float x=scr_pos.x/w;
float y=scr_pos.y/h;
return vec4(
.8-y*.8-.1*sin(t/6.26),
.4+.1*sin(t/4.)*(y+2.)/(y+5.),
abs(.7-x*1.4+y*.5*sin(t/16.)),
1.
);
}

View File

@@ -1,8 +0,0 @@
extern float w,h;
extern float level;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float dx=abs(scr_pos.x/w-0.5);
float dy=abs(scr_pos.y/h-0.5);
float a=(max(dx*2.6,dy*1.8)-.626)*level;
return vec4(1.,0.,0.,a);
}