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,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

@@ -113,7 +113,6 @@ PLAYERS={alive={}}--Players data
CURMODE=nil--Current mode object
RANKS={sprint_10=0}
--Load modules
require("Zframework")
@@ -192,6 +191,17 @@ VOC.set{
"welcome_voc",
}
--Load shader files from SOURCE ONLY
SHADER={}
for _,v in next,love.filesystem.getDirectoryItems("parts/shaders")do
if love.filesystem.getRealDirectory("parts/shaders/"..v)~=SAVEDIR then
local name=v:sub(1,-6)
SHADER[name]=love.graphics.newShader("parts/shaders/"..name..".glsl")
else
LOG.print("Dangerous file : %SAVE%/parts/shaders/"..v)
end
end
--Load background files from SOURCE ONLY
for _,v in next,love.filesystem.getDirectoryItems("parts/backgrounds")do
if love.filesystem.getRealDirectory("parts/backgrounds/"..v)~=SAVEDIR then

View File

@@ -2,22 +2,23 @@
local gc=love.graphics
local rnd=math.random
local back={}
local shader=SHADER.aura
local t
function back.init()
t=rnd()*2600
BG.resize(SCR.w,SCR.h)
end
function back.resize(_,h)
SHADER.aura:send("w",SCR.W)
SHADER.aura:send("h",h*SCR.dpi)
shader:send("w",SCR.W)
shader:send("h",h*SCR.dpi)
end
function back.update(dt)
t=t+dt
end
function back.draw()
SHADER.aura:send("t",t)
gc.setShader(SHADER.aura)
shader:send("t",t)
gc.setShader(shader)
gc.rectangle("fill",0,0,SCR.w,SCR.h)
gc.setShader()
end

View File

@@ -2,6 +2,7 @@
local gc=love.graphics
local rnd=math.random
local back={}
local shader=SHADER.grad1
local t
function back.init()
@@ -9,14 +10,14 @@ function back.init()
BG.resize()
end
function back.resize()
SHADER.gradient1:send("w",SCR.W)
shader:send("w",SCR.W)
end
function back.update(dt)
t=t+dt
end
function back.draw()
SHADER.gradient1:send("t",t)
gc.setShader(SHADER.gradient1)
shader:send("t",t)
gc.setShader(shader)
gc.rectangle("fill",0,0,SCR.w,SCR.h)
gc.setShader()
end

View File

@@ -2,6 +2,7 @@
local gc=love.graphics
local rnd=math.random
local back={}
local shader=SHADER.grad2
local t
function back.init()
@@ -9,14 +10,14 @@ function back.init()
BG.resize(nil,SCR.h)
end
function back.resize(_,h)
SHADER.gradient2:send("h",h*SCR.dpi)
shader:send("h",h*SCR.dpi)
end
function back.update(dt)
t=t+dt
end
function back.draw()
SHADER.gradient2:send("t",t)
gc.setShader(SHADER.gradient2)
shader:send("t",t)
gc.setShader(shader)
gc.rectangle("fill",0,0,SCR.w,SCR.h)
gc.setShader()
end

View File

@@ -2,6 +2,7 @@
local gc=love.graphics
local rnd=math.random
local back={}
local shader=SHADER.rgb1
local t
function back.init()
@@ -9,15 +10,15 @@ function back.init()
BG.resize(SCR.w,SCR.h)
end
function back.resize(_,h)
SHADER.rgb1:send("w",SCR.W)
SHADER.rgb1:send("h",h*SCR.dpi)
shader:send("w",SCR.W)
shader:send("h",h*SCR.dpi)
end
function back.update(dt)
t=t+dt
end
function back.draw()
SHADER.rgb1:send("t",t)
gc.setShader(SHADER.rgb1)
shader:send("t",t)
gc.setShader(shader)
gc.rectangle("fill",0,0,SCR.w,SCR.h)
gc.setShader()
end

View File

@@ -2,6 +2,7 @@
local gc=love.graphics
local rnd=math.random
local back={}
local shader=SHADER.rgb2
local t
function back.init()
@@ -9,15 +10,15 @@ function back.init()
BG.resize(SCR.w,SCR.h)
end
function back.resize(_,h)
SHADER.rgb2:send("w",SCR.W)
SHADER.rgb2:send("h",h*SCR.dpi)
shader:send("w",SCR.W)
shader:send("h",h*SCR.dpi)
end
function back.update(dt)
t=t+dt
end
function back.draw()
SHADER.rgb2:send("t",t)
gc.setShader(SHADER.rgb2)
shader:send("t",t)
gc.setShader(shader)
gc.rectangle("fill",0,0,SCR.w,SCR.h)
gc.setShader()
end