diff options
Diffstat (limited to 'samples/post-processing')
28 files changed, 367 insertions, 0 deletions
diff --git a/samples/post-processing/0.png b/samples/post-processing/0.png Binary files differnew file mode 100644 index 0000000..fa62576 --- /dev/null +++ b/samples/post-processing/0.png diff --git a/samples/post-processing/1.png b/samples/post-processing/1.png Binary files differnew file mode 100644 index 0000000..7e3fe49 --- /dev/null +++ b/samples/post-processing/1.png diff --git a/samples/post-processing/SDL.jpg b/samples/post-processing/SDL.jpg Binary files differnew file mode 100644 index 0000000..dcd530a --- /dev/null +++ b/samples/post-processing/SDL.jpg diff --git a/samples/post-processing/anim.png b/samples/post-processing/anim.png Binary files differnew file mode 100644 index 0000000..ef0bc81 --- /dev/null +++ b/samples/post-processing/anim.png diff --git a/samples/post-processing/anim2.png b/samples/post-processing/anim2.png Binary files differnew file mode 100644 index 0000000..63c1f63 --- /dev/null +++ b/samples/post-processing/anim2.png diff --git a/samples/post-processing/config.lua b/samples/post-processing/config.lua new file mode 100644 index 0000000..095ee28 --- /dev/null +++ b/samples/post-processing/config.lua @@ -0,0 +1,6 @@ +return +{ + title = "window form", + icon = "splash.png", + vsync = true +}
\ No newline at end of file diff --git a/samples/post-processing/dust/s_dust_A_0.png b/samples/post-processing/dust/s_dust_A_0.png Binary files differnew file mode 100644 index 0000000..79efc70 --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_0.png diff --git a/samples/post-processing/dust/s_dust_A_1.png b/samples/post-processing/dust/s_dust_A_1.png Binary files differnew file mode 100644 index 0000000..acc2100 --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_1.png diff --git a/samples/post-processing/dust/s_dust_A_10.png b/samples/post-processing/dust/s_dust_A_10.png Binary files differnew file mode 100644 index 0000000..e422644 --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_10.png diff --git a/samples/post-processing/dust/s_dust_A_2.png b/samples/post-processing/dust/s_dust_A_2.png Binary files differnew file mode 100644 index 0000000..1ef2056 --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_2.png diff --git a/samples/post-processing/dust/s_dust_A_3.png b/samples/post-processing/dust/s_dust_A_3.png Binary files differnew file mode 100644 index 0000000..ca2260a --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_3.png diff --git a/samples/post-processing/dust/s_dust_A_4.png b/samples/post-processing/dust/s_dust_A_4.png Binary files differnew file mode 100644 index 0000000..1f67b79 --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_4.png diff --git a/samples/post-processing/dust/s_dust_A_5.png b/samples/post-processing/dust/s_dust_A_5.png Binary files differnew file mode 100644 index 0000000..3969a04 --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_5.png diff --git a/samples/post-processing/dust/s_dust_A_6.png b/samples/post-processing/dust/s_dust_A_6.png Binary files differnew file mode 100644 index 0000000..d2d6df0 --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_6.png diff --git a/samples/post-processing/dust/s_dust_A_7.png b/samples/post-processing/dust/s_dust_A_7.png Binary files differnew file mode 100644 index 0000000..02ba310 --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_7.png diff --git a/samples/post-processing/dust/s_dust_A_8.png b/samples/post-processing/dust/s_dust_A_8.png Binary files differnew file mode 100644 index 0000000..700052c --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_8.png diff --git a/samples/post-processing/dust/s_dust_A_9.png b/samples/post-processing/dust/s_dust_A_9.png Binary files differnew file mode 100644 index 0000000..8de4fcf --- /dev/null +++ b/samples/post-processing/dust/s_dust_A_9.png diff --git a/samples/post-processing/forest.ogg b/samples/post-processing/forest.ogg Binary files differnew file mode 100644 index 0000000..d3059e1 --- /dev/null +++ b/samples/post-processing/forest.ogg diff --git a/samples/post-processing/icon.ico b/samples/post-processing/icon.ico Binary files differnew file mode 100644 index 0000000..3043332 --- /dev/null +++ b/samples/post-processing/icon.ico diff --git a/samples/post-processing/main.lua b/samples/post-processing/main.lua new file mode 100644 index 0000000..6aaeb6e --- /dev/null +++ b/samples/post-processing/main.lua @@ -0,0 +1,226 @@ +io.stdout:setvbuf("no") + +music = nil +local tex = nil +local timer = nil +local tb = {x = 1, y = 2} +local spr = nil +local bitmap = nil +local sprs = {} +local animator = nil +local spr = nil +local ps = nil +local mesh = nil +local function createAnimation(path, count, r, c, w, h, loop, speed) + local tex = jin.graphics.newTexture(path) + local ssheet = jin.graphics.newSpriteSheet(tex) + local sprs = ssheet:newSprites(count, r, c, w, h, 96, 168) + return jin.graphics.newAnimation(sprs, loop, speed) +end +local particle_sprites = {} +local Pi = 3.1415 +local sinShader = nil +local screen = nil +local pp = nil +local pixel = nil +local rgbsplit = nil +local sobel = nil +local bloom = nil +local noise = nil +local radial = nil +local glow = nil +function jin.core.onLoad() + jin.log.info("=============== Start Game ===============") + + screen = jin.graphics.newCanvas(jin.graphics.getSize()) + -- bitmap = jin.graphics.newBitmap(200, 200, function(w, h, x, y) + -- return {255*math.sin(x/w),255 - 255,255*math.cos(y/w),255} + -- end) + local tex = jin.graphics.newTexture("splash.png") + mesh = jin.graphics.newMesh() + mesh:setGraphic(tex) + mesh:pushVertex(-20, -20, 0, 0, {255, 0, 0, 255}) + mesh:pushVertex(20, -20, 0.8, 0, {255, 0, 255, 255}) + mesh:pushVertex(20, 20, 0.8, 0.8, {255, 255, 0, 255}) + mesh:pushVertex(-20, 120, 0, 0.8, {255, 255, 255, 255}) + ps = jin.graphics.newParticleSystem() + for i = 0, 10 do + local t = jin.graphics.newTexture("dust/s_dust_A_" .. i .. ".png") + local spr = jin.graphics.newSprite(t, jin.graphics.SpriteOrigin.MIDDLECENTER) + ps:addParticleSprite(spr) + end + ps:setEmitRate(0.02) + ps:setEmitForce(80, 120) + ps:setEmitPosition({0, 0}) + ps:setEmitDirection(-Pi / 10 - Pi / 2, Pi / 10 - Pi / 2) + ps:setParticleLinearAccelaration({0, 10}) + ps:setParticleSpritesMode(jin.graphics.SpriteMode.ANIMATED) + ps:setParticleColor({255, 30, 0, 255}) + ps:addParticleTransparencyPoint(1, 0) + ps:addParticleTransparencyPoint(0, 0.5) + ps:enableParticleBlendAdditive(true) + ps:setParticleLife(0.5, 2) + ps:addParticleScalePoint(3, 0) + ps:addParticleScalePoint(0, 1) + ps:setPosition(250, 200) + local animation = createAnimation("anim2.png", 27, 3, 10, 200, 200, true, 50) + animator = jin.graphics.newAnimator(animation) + spr = animation:getFrame(1) + local tex3 = jin.graphics.newTexture("anim2.png") + tex3 = nil + -- music = jin.audio.newSource("forest.ogg") + -- music:setVolume(0.5) + -- music:setLoop(true) + -- music:play() + jin.graphics.showWindow() + timer = jin.time.newTimer() + timer:every(3, function(p) + --timer:cancel(h) + if animator:getSpeed() == 50 then + animator:setSpeed(100) + elseif animator:getSpeed() == 100 then + animator:setSpeed(50) + end + end, animator) + jin.graphics.pushMatrix() + jin.graphics.translate(0, 0) + --jin.graphics.rotate(0.2) + + local fsm = jin.ai.newStateMachine({ + events = { + { name = 'startup', from = 'none', to = 'green' }, + { name = 'panic', from = 'green', to = 'red' }, + { name = 'calm', from = 'red', to = 'green' }, + }}) + jin.log.info(fsm.current) -- "none" + fsm:startup() + jin.log.info(fsm.current) -- "green" + jin.log.info(jin.utils.json.encode({ 1, 2, 3, { x = 10 } })) + jin.log.info(jin.utils.json.decode('[1,2,3,{"x":10}]')) + sinShader = jin.graphics.newShader[[ + #VERTEX_SHADER + Vertex vert(Vertex v) + { + return v; + } + #END_VERTEX_SHADER + #FRAGMENT_SHADER + Color frag(Color col, Texture tex, Vertex v) + { + col.r = sin(jin_Time.x); + col.g = cos(jin_Time.x); + col.b = sin(jin_Time.x); + return col; + } + #END_FRAGMENT_SHADER + ]] + + pp = jin.graphics.newShaderf("./shaders/curling.jsl") + + pixel = jin.graphics.newShaderf("./shaders/pixel.jsl") + + rgbsplit = jin.graphics.newShaderf("./shaders/rgb-split.jsl") + + sobel = jin.graphics.newShaderf("./shaders/sobel.jsl") + + noise = jin.graphics.newShaderf("./shaders/noise.jsl") + + radial = jin.graphics.newShaderf("./shaders/radial.jsl") + + jin.log.info("test") + + timer:every(1, function() + jin.log.info(jin.time.getFPS() .. " fps") + local stats = jin.graphics.getStats() + jin.log.info("textures " .. stats.textures) + end) + + --local xmlParser = jin.utils.xml.newParser() + local xml = jin.utils.xml.parseXmlText[[ + <test one="two"> + <three four="five" four="six"/> + <three>eight</three> + <nine ten="eleven">twelve</nine> + </test> + ]] + jin.log.info(xml.test["@one"]) +end + +function jin.core.onEvent(e) + if e.type == "Quit" then + jin.core.stop() + end + if e.type == "MouseButtonDown" then + if e.button == "Left" then + ps:setPosition(e.x, e.y) + end + end +end + +local t = 0 +function jin.core.onUpdate(dt) + tb.x = t + t = t + jin.time.getDelta() + animator:update(jin.time.getDelta()) + timer:update(jin.time.getDelta()) + ps:update(dt) + local mx, my = jin.mouse.getPosition() + --ps:setPosition(mx, my) + --ps:setEmitDirection(t - 0.3, t + 0.3) +end + +function jin.core.onDraw() + jin.graphics.setClearColor(0, 0, 0, 0xff) + jin.graphics.clear() + jin.graphics.setColor(255, 255, 255, 255) + + jin.graphics.print("before canvas", 10, 300) + jin.graphics.draw(spr, 100, 300, 1, 1, 0) + + jin.graphics.bindCanvas(screen) + jin.graphics.setClearColor(0, 0, 0, 0) + jin.graphics.clear() + jin.graphics.useShader(jin.graphics.Shaders.Shape) + jin.graphics.setColor(255, 0, 255, 100) + jin.graphics.rect(jin.graphics.RenderMode.FILL, 30, 50, 100, 200) + jin.graphics.setColor(255, 255, 255, 255) + jin.graphics.unuseShader() + --jin.graphics.draw(sprs[2], 150, 150, 1, 1, 0) + local x, y = jin.mouse.getPosition() + animator:render(350, 150, 1, 1, 0) + jin.graphics.useShader(jin.graphics.Shaders.Font) + jin.graphics.print("* Particle system test\n* Animation test.", 10, 10) + jin.graphics.unuseShader() + jin.graphics.draw(spr, 100, 200, 1, 1, 0) + jin.graphics.useShader(jin.graphics.Shaders.Mesh) + jin.graphics.draw(mesh, 200, 100) + jin.graphics.unuseShader(); + ps:render() + jin.graphics.useShader(sinShader) + jin.graphics.rect(jin.graphics.RenderMode.FILL, 300, 300, 100, 50) + jin.graphics.unuseShader() + + jin.graphics.setColor(100, 100, 100, 100) + jin.graphics.useShader(jin.graphics.Shaders.Shape) + jin.graphics.rect(jin.graphics.RenderMode.FILL, 440, 0, 140, 150) + jin.graphics.unuseShader() + jin.graphics.setColor(255, 255, 255, 255) + jin.graphics.useShader(jin.graphics.Shaders.Font) + jin.graphics.print("Stats\n----------------\n" .. jin.graphics.getStatsStr(), 450, 10) + jin.graphics.unuseShader() + jin.graphics.unbindCanvas(screen) + + jin.graphics.useShader(rgbsplit) + local mode = jin.graphics.getBlendMode() + jin.graphics.setBlendMode(jin.graphics.BlendMode.PREMULTIPLIEDALPHA) + jin.graphics.draw(screen, 0, 0) + jin.graphics.setBlendMode(mode) + jin.graphics.unuseShader() + jin.graphics.print("after canvas", 10, 340) +end + +function jin.core.onQuit() + jin.log.info("=============== Quit Game ===============") +end + + diff --git a/samples/post-processing/particle.png b/samples/post-processing/particle.png Binary files differnew file mode 100644 index 0000000..632fcc1 --- /dev/null +++ b/samples/post-processing/particle.png diff --git a/samples/post-processing/shaders/curling.jsl b/samples/post-processing/shaders/curling.jsl new file mode 100644 index 0000000..dc217a7 --- /dev/null +++ b/samples/post-processing/shaders/curling.jsl @@ -0,0 +1,13 @@ +#VERTEX_SHADER +Vertex vert(Vertex v) +{ + return v; +} +#END_VERTEX_SHADER +#FRAGMENT_SHADER +Color frag(Color col, Texture tex, Vertex v) +{ + v.uv.x += sin(v.uv.y * 4 * 2 * 3.14 + jin_Time.x) / (10 + sin(jin_Time.x) * 10); + return texel(tex, v.uv); +} +#END_FRAGMENT_SHADER
\ No newline at end of file diff --git a/samples/post-processing/shaders/noise.jsl b/samples/post-processing/shaders/noise.jsl new file mode 100644 index 0000000..a2ba383 --- /dev/null +++ b/samples/post-processing/shaders/noise.jsl @@ -0,0 +1,21 @@ +#VERTEX_SHADER +Vertex vert(Vertex v) +{ + return v; +} +#END_VERTEX_SHADER +#FRAGMENT_SHADER + +float random(vec2 n, float offset ){ + return .5 - fract(sin(dot(n.xy + vec2(offset, 0.), vec2(12.9898, 78.233)))* 43758.5453); +} + +Color frag(Color col, Texture texture, Vertex v) +{ + float amount = 0.1; + float speed = 0.5; + vec4 color = texture2D(texture, v.uv.xy); + color += vec4(vec3(amount * random(v.uv.xy, .00001 * speed * jin_Time.x)), 1.); + return color; +} +#END_FRAGMENT_SHADER
\ No newline at end of file diff --git a/samples/post-processing/shaders/pixel.jsl b/samples/post-processing/shaders/pixel.jsl new file mode 100644 index 0000000..0242b7e --- /dev/null +++ b/samples/post-processing/shaders/pixel.jsl @@ -0,0 +1,30 @@ +#VERTEX_SHADER +Vertex vert(Vertex v) +{ + return v; +} +#END_VERTEX_SHADER +#FRAGMENT_SHADER +Color frag(Color col, Texture tex, Vertex v) +{ + // config + float pixel_w = 1 + sin(jin_Time.x / 3)*20.0; + float pixel_h = 1 + sin(jin_Time.x / 3)*20.0; + + vec2 uv = v.uv; + vec3 tc = vec3(1.0, 0.0, 0.0); + //if(uv.x < abs(sin(jin_Time.x))) + if(uv.x < 1) + { + float dx = pixel_w*(1.0/jin_RenderTargetSize.x); + float dy = pixel_h*(1.0/jin_RenderTargetSize.y); + vec2 coord = vec2(dx*floor(uv.x/dx),dy*floor(uv.y/dy)); + tc = texel(tex, coord).rgb; + } + else + { + tc = texel(tex, uv).rgb; + } + return vec4(tc, 1.0); +} +#END_FRAGMENT_SHADER
\ No newline at end of file diff --git a/samples/post-processing/shaders/radial.jsl b/samples/post-processing/shaders/radial.jsl new file mode 100644 index 0000000..50a86d1 --- /dev/null +++ b/samples/post-processing/shaders/radial.jsl @@ -0,0 +1,17 @@ +#VERTEX_SHADER +Vertex vert(Vertex v) +{ + return v; +} +#END_VERTEX_SHADER +#FRAGMENT_SHADER +Color frag(Color col, Texture texture, Vertex v) +{ + float of = abs(sin(jin_Time.x / 5)); + vec3 p = vec3(v.xy/jin_RenderTargetSize, 0) - of; + vec3 o = texture2D(texture,of+(p.xy*=.992)).rbb; + for (float i=0.;i<100.;i++) + p.z += pow(max(0.,of-length(texture2D(texture,of+(p.xy*=.992)).rg)),2.)*exp(-i*.08); + return vec4(o*o+p.z,1); +} +#END_FRAGMENT_SHADER
\ No newline at end of file diff --git a/samples/post-processing/shaders/rgb-split.jsl b/samples/post-processing/shaders/rgb-split.jsl new file mode 100644 index 0000000..fcfb9f2 --- /dev/null +++ b/samples/post-processing/shaders/rgb-split.jsl @@ -0,0 +1,24 @@ +#VERTEX_SHADER +Vertex vert(Vertex v) +{ + //v.xy += vec2(50 * sin(jin_Time.x * 2), 50 * cos(jin_Time.x * 2)); + return v; +} +#END_VERTEX_SHADER +#FRAGMENT_SHADER +Color frag(Color col, Texture tex, Vertex v) +{ + float t = jin_Time.x; + float a = abs(sin(t)) * 3.14; + vec2 p = vec2(0.5*cos(a) + 0.5, 0.5*sin(a) + 0.5); + vec2 dir = v.uv - p; + float d = .7 * length(dir); + normalize(dir); + vec2 value = d * dir * 200 * abs(sin(t * 3)); + + vec4 c1 = texel(tex, v.uv - value / jin_RenderTargetSize.x); + vec4 c2 = texel(tex, v.uv); + vec4 c3 = texel(tex, v.uv + value / jin_RenderTargetSize.y); + return vec4(c1.r, c2.g, c3.b, c1.a + c2.a + c3.b); +} +#END_FRAGMENT_SHADER
\ No newline at end of file diff --git a/samples/post-processing/shaders/sobel.jsl b/samples/post-processing/shaders/sobel.jsl new file mode 100644 index 0000000..7700dee --- /dev/null +++ b/samples/post-processing/shaders/sobel.jsl @@ -0,0 +1,30 @@ +#VERTEX_SHADER +Vertex vert(Vertex v) +{ + return v; +} +#END_VERTEX_SHADER +#FRAGMENT_SHADER +Color frag(Color col, Texture texture, Vertex v) +{ + float x = 1.0 / jin_RenderTargetSize.x; + float y = 1.0 / jin_RenderTargetSize.y; + vec4 horizEdge = vec4( 0.0 ); + horizEdge -= texture2D( texture, vec2( v.uv.x - x, v.uv.y - y ) ) * 1.0; + horizEdge -= texture2D( texture, vec2( v.uv.x - x, v.uv.y ) ) * 2.0; + horizEdge -= texture2D( texture, vec2( v.uv.x - x, v.uv.y + y ) ) * 1.0; + horizEdge += texture2D( texture, vec2( v.uv.x + x, v.uv.y - y ) ) * 1.0; + horizEdge += texture2D( texture, vec2( v.uv.x + x, v.uv.y ) ) * 2.0; + horizEdge += texture2D( texture, vec2( v.uv.x + x, v.uv.y + y ) ) * 1.0; + vec4 vertEdge = vec4( 0.0 ); + vertEdge -= texture2D( texture, vec2( v.uv.x - x, v.uv.y - y ) ) * 1.0; + vertEdge -= texture2D( texture, vec2( v.uv.x , v.uv.y - y ) ) * 2.0; + vertEdge -= texture2D( texture, vec2( v.uv.x + x, v.uv.y - y ) ) * 1.0; + vertEdge += texture2D( texture, vec2( v.uv.x - x, v.uv.y + y ) ) * 1.0; + vertEdge += texture2D( texture, vec2( v.uv.x , v.uv.y + y ) ) * 2.0; + vertEdge += texture2D( texture, vec2( v.uv.x + x, v.uv.y + y ) ) * 1.0; + vec3 edge = sqrt((horizEdge.rgb * horizEdge.rgb) + (vertEdge.rgb * vertEdge.rgb)); + + return vec4(edge, texture2D(texture, v.uv.xy).a); +} +#END_FRAGMENT_SHADER
\ No newline at end of file diff --git a/samples/post-processing/splash.png b/samples/post-processing/splash.png Binary files differnew file mode 100644 index 0000000..b0c4256 --- /dev/null +++ b/samples/post-processing/splash.png |