diff options
author | chai <chaifix@163.com> | 2018-12-24 21:02:12 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-12-24 21:02:12 +0800 |
commit | 8f2ba3f1b11f30cdb7d41bf2e5c5dc141fba76d4 (patch) | |
tree | f36138310b5ca7a8e58b3af9547335a11d5d79c8 | |
parent | 039e2541207232e0a382a52a65122a15eed9257d (diff) |
*屏幕特效(post processing)
-rw-r--r-- | bin/SDL2.dll | bin | 771072 -> 771072 bytes | |||
-rw-r--r-- | bin/cembed.exe | bin | 11264 -> 11264 bytes | |||
-rw-r--r-- | bin/game/main.lua | 64 | ||||
-rw-r--r-- | bin/jin.exe | bin | 606720 -> 607232 bytes | |||
-rw-r--r-- | bin/lua51.dll | bin | 364544 -> 364544 bytes | |||
-rw-r--r-- | src/libjin-lua/scripts/app.lua | 4 | ||||
-rw-r--r-- | src/libjin-lua/scripts/app.lua.h | 40 | ||||
-rw-r--r-- | src/libjin/graphics/je_canvas.cpp | 4 | ||||
-rw-r--r-- | src/libjin/graphics/je_canvas.h | 2 | ||||
-rw-r--r-- | src/libjin/graphics/je_gl.cpp | 10 | ||||
-rw-r--r-- | src/libjin/graphics/je_gl.h | 4 | ||||
-rw-r--r-- | src/libjin/graphics/je_graphic.cpp | 16 | ||||
-rw-r--r-- | src/libjin/graphics/je_mesh.cpp | 10 | ||||
-rw-r--r-- | src/libjin/graphics/je_shapes.cpp | 30 | ||||
-rw-r--r-- | src/libjin/graphics/je_window.cpp | 2 | ||||
-rw-r--r-- | src/libjin/graphics/shaders/je_jsl_compiler.cpp | 4 | ||||
-rw-r--r-- | src/libjin/graphics/shaders/je_jsl_compiler.h | 1 | ||||
-rw-r--r-- | src/libjin/graphics/shaders/je_shader.cpp | 10 |
18 files changed, 144 insertions, 57 deletions
diff --git a/bin/SDL2.dll b/bin/SDL2.dll Binary files differindex 15fa57c..b73575b 100644 --- a/bin/SDL2.dll +++ b/bin/SDL2.dll diff --git a/bin/cembed.exe b/bin/cembed.exe Binary files differindex e30b730..0a0bb5a 100644 --- a/bin/cembed.exe +++ b/bin/cembed.exe diff --git a/bin/game/main.lua b/bin/game/main.lua index ce5b62c..3ce17a0 100644 --- a/bin/game/main.lua +++ b/bin/game/main.lua @@ -20,7 +20,11 @@ end local particle_sprites = {} local Pi = 3.1415 local sinShader = nil +local screen = nil +local pp = nil +local pixel = nil function jin.core.onLoad() + 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) @@ -103,6 +107,54 @@ function jin.core.onLoad() } #END_FRAGMENT_SHADER ]] + + pp = jin.graphics.newShader[[ + #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 + ]] + + pixel = jin.graphics.newShader[[ + #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 = 10.0; + float pixel_h = 10.0; + + vec2 uv = v.uv; + vec3 tc = vec3(1.0, 0.0, 0.0); + if(uv.x < abs(sin(jin_Time.x))) + { + 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 + ]] jin.log.info("test") @@ -127,6 +179,11 @@ 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 @@ -142,6 +199,8 @@ function jin.core.onUpdate(dt) end function jin.core.onDraw() + jin.graphics.bindCanvas(screen) + jin.graphics.clear() jin.graphics.useShader(jin.graphics.Shaders.Shape) jin.graphics.setColor(255, 0, 255, 255) jin.graphics.rect(jin.graphics.RenderMode.FILL, 30, 50, 100, 200) @@ -166,4 +225,9 @@ function jin.core.onDraw() jin.graphics.unuseShader() jin.graphics.setColor(255, 255, 255, 255) jin.graphics.print(jin.graphics.getStatsStr(), 450, 10) + + jin.graphics.unbindCanvas(screen) + jin.graphics.useShader(pixel) + jin.graphics.draw(screen, 0, 0) + jin.graphics.unuseShader() end
\ No newline at end of file diff --git a/bin/jin.exe b/bin/jin.exe Binary files differindex d4c075e..e9e8f37 100644 --- a/bin/jin.exe +++ b/bin/jin.exe diff --git a/bin/lua51.dll b/bin/lua51.dll Binary files differindex 7b534e6..5ec2ae0 100644 --- a/bin/lua51.dll +++ b/bin/lua51.dll diff --git a/src/libjin-lua/scripts/app.lua b/src/libjin-lua/scripts/app.lua index d4f2e59..261ae28 100644 --- a/src/libjin-lua/scripts/app.lua +++ b/src/libjin-lua/scripts/app.lua @@ -113,7 +113,7 @@ jin.audio.init() jin.graphics.init(jin.config) -jin.log.info("Start game...") +jin.log.info("================== Start game ==================") ------------------------------------------------------------------------- -- Boot game @@ -125,7 +125,7 @@ xpcall(boot, onError) -- Destroy sub-systems ------------------------------------------------------------------------- -jin.log.info("Quit...") +jin.log.info("================== Quit game ==================") jin.graphics.destroy() diff --git a/src/libjin-lua/scripts/app.lua.h b/src/libjin-lua/scripts/app.lua.h index 7b981d2..863b49f 100644 --- a/src/libjin-lua/scripts/app.lua.h +++ b/src/libjin-lua/scripts/app.lua.h @@ -173,38 +173,42 @@ static char app_lua[] = { 100,105,111,46,105,110,105,116,40,41,13,10,13,10,106,105,110,46,103,114, 97,112,104,105,99,115,46,105,110,105,116,40,106,105,110,46,99,111,110,102, 105,103,41,13,10,13,10,106,105,110,46,108,111,103,46,105,110,102,111,40, -34,83,116,97,114,116,32,103,97,109,101,46,46,46,34,41,13,10,13,10, +34,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,32, +83,116,97,114,116,32,103,97,109,101,32,61,61,61,61,61,61,61,61,61, +61,61,61,61,61,61,61,61,61,34,41,13,10,13,10,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45,45,45,45,45,45,13,10,45,45,32,66,111, -111,116,32,103,97,109,101,13,10,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,13,10,45,45,32,66,111,111,116,32,103,97, +109,101,13,10,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10,13, +10,120,112,99,97,108,108,40,98,111,111,116,44,32,111,110,69,114,114,111, +114,41,13,10,13,10,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,13,10,13,10,120,112,99,97,108,108,40,98,111,111,116,44,32,111, -110,69,114,114,111,114,41,13,10,13,10,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13, +10,45,45,32,68,101,115,116,114,111,121,32,115,117,98,45,115,121,115,116, +101,109,115,13,10,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,45,45,13,10,45,45,32,68,101,115,116,114,111,121,32,115,117,98, -45,115,121,115,116,101,109,115,13,10,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10, +13,10,106,105,110,46,108,111,103,46,105,110,102,111,40,34,61,61,61,61, +61,61,61,61,61,61,61,61,61,61,61,61,61,61,32,81,117,105,116,32, +103,97,109,101,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, +61,61,61,34,41,13,10,13,10,106,105,110,46,103,114,97,112,104,105,99, +115,46,100,101,115,116,114,111,121,40,41,13,10,13,10,106,105,110,46,97, +117,100,105,111,46,100,101,115,116,114,111,121,40,41,13,10,13,10,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,45,13,10,13,10,106,105,110,46,108,111,103,46,105,110,102,111,40, -34,81,117,105,116,46,46,46,34,41,13,10,13,10,106,105,110,46,103,114, -97,112,104,105,99,115,46,100,101,115,116,114,111,121,40,41,13,10,13,10, -106,105,110,46,97,117,100,105,111,46,100,101,115,116,114,111,121,40,41,13, -10,13,10,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,13,10,45,45,32,81,117,105,116, +32,103,97,109,101,13,10,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10,45,45, -32,81,117,105,116,32,103,97,109,101,13,10,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,45,45,45,13,10,13,10,106,105,110,46,99,111,114,101,46,113,117, -105,116,40,41,13,10 +13,10,13,10,106,105,110,46,99,111,114,101,46,113,117,105,116,40,41,13, +10 }; diff --git a/src/libjin/graphics/je_canvas.cpp b/src/libjin/graphics/je_canvas.cpp index ba7919e..d52bdfd 100644 --- a/src/libjin/graphics/je_canvas.cpp +++ b/src/libjin/graphics/je_canvas.cpp @@ -22,10 +22,11 @@ namespace JinEngine GLint current_fbo; glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, ¤t_fbo); - // Generate a new render buffer object + // Generate a new render buffer object. fbo = gl.genFrameBuffer(); gl.bindFrameBuffer(fbo); + // Render texture. GLuint texture = getGLTexture(); gl.bindTexture(texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); @@ -33,7 +34,6 @@ namespace JinEngine gl.texImage(GL_RGBA8, w, h, GL_RGBA, GL_UNSIGNED_BYTE, NULL); gl.bindTexture(0); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); // Unbind framebuffer diff --git a/src/libjin/graphics/je_canvas.h b/src/libjin/graphics/je_canvas.h index b65e598..dc0a59e 100644 --- a/src/libjin/graphics/je_canvas.h +++ b/src/libjin/graphics/je_canvas.h @@ -23,7 +23,7 @@ namespace JinEngine static bool isBinded(const Canvas*); /// - /// + /// Default canvas, aka screen. /// Canvas(GLuint n); diff --git a/src/libjin/graphics/je_gl.cpp b/src/libjin/graphics/je_gl.cpp index 24b0a48..aeaa663 100644 --- a/src/libjin/graphics/je_gl.cpp +++ b/src/libjin/graphics/je_gl.cpp @@ -18,7 +18,7 @@ namespace JinEngine OpenGL gl; - const Canvas* const OpenGL::DEFAULT_CANVAS = new Canvas(0); + Canvas* const OpenGL::DEFAULT_CANVAS = new Canvas(0); OpenGL::OpenGL() : mBlendMode(BlendMode::NONE) @@ -262,6 +262,7 @@ namespace JinEngine case BlendMode::ADDITIVE: srcRGB = GL_SRC_ALPHA; dstRGB = GL_ONE; + dstA = GL_ONE; break; case BlendMode::PREMULTIPLIEDALPHA: srcRGB = srcA = GL_ONE; @@ -316,6 +317,11 @@ namespace JinEngine mCanvas = canvas; + gl.enable(GL_BLEND); + gl.enable(GL_TEXTURE_2D); + + gl.setBlendMode(OpenGL::BlendMode::ALPHA); + ++mStats.canvasSwitches; } } @@ -340,7 +346,7 @@ namespace JinEngine glViewport(0, 0, w, h); gl.setProjectionMatrix(0, w, h, 0, -1, 1); - mCanvas = nullptr; + mCanvas = DEFAULT_CANVAS; } Canvas* OpenGL::getCanvas() diff --git a/src/libjin/graphics/je_gl.h b/src/libjin/graphics/je_gl.h index 21aa900..d6edc2f 100644 --- a/src/libjin/graphics/je_gl.h +++ b/src/libjin/graphics/je_gl.h @@ -51,6 +51,8 @@ namespace JinEngine //int64 textureMemory; }; + static Canvas* const DEFAULT_CANVAS; + OpenGL(); ~OpenGL(); @@ -210,8 +212,6 @@ namespace JinEngine private: - static const Canvas* const DEFAULT_CANVAS; - /// /// /// diff --git a/src/libjin/graphics/je_graphic.cpp b/src/libjin/graphics/je_graphic.cpp index 96c3b4a..18dbf42 100644 --- a/src/libjin/graphics/je_graphic.cpp +++ b/src/libjin/graphics/je_graphic.cpp @@ -72,10 +72,10 @@ namespace JinEngine // Set shader. Shader* shader = gl.getShader(); shader->prepare() - .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelViewMatrix) - .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) - .uploadVertices(2, GL_FLOAT, 0, vertexCoords) - .uploadUV(2, GL_FLOAT, 0, textureCoords); + .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelViewMatrix) + .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) + .uploadVertices(2, GL_FLOAT, 0, vertexCoords) + .uploadUV(2, GL_FLOAT, 0, textureCoords); gl.bindTexture(getGLTexture()); gl.drawArrays(GL_QUADS, 0, 4); @@ -106,10 +106,10 @@ namespace JinEngine Shader* shader = gl.getShader(); shader->prepare() - .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelViewMatrix) - .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) - .uploadVertices(2, GL_FLOAT, 0, vertexCoords) - .uploadUV(2, GL_FLOAT, 0, textureCoords); + .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelViewMatrix) + .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) + .uploadVertices(2, GL_FLOAT, 0, vertexCoords) + .uploadUV(2, GL_FLOAT, 0, textureCoords); gl.bindTexture(getGLTexture()); gl.drawArrays(GL_QUADS, 0, 4); diff --git a/src/libjin/graphics/je_mesh.cpp b/src/libjin/graphics/je_mesh.cpp index e8512ac..2d453b0 100644 --- a/src/libjin/graphics/je_mesh.cpp +++ b/src/libjin/graphics/je_mesh.cpp @@ -61,11 +61,11 @@ namespace JinEngine Shader* shader = gl.getShader(); shader->prepare() - .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelViewMatrix) - .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) - .uploadVertices(2, GL_FLOAT, sizeof(Vertex), &(mVertices[0].xy)) - .uploadUV(2, GL_FLOAT, sizeof(Vertex), &(mVertices[0].uv)) - .uploadColor(4, GL_UNSIGNED_BYTE, sizeof(Vertex), &(mVertices[0].color), GL_TRUE); + .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelViewMatrix) + .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) + .uploadVertices(2, GL_FLOAT, sizeof(Vertex), &(mVertices[0].xy)) + .uploadUV(2, GL_FLOAT, sizeof(Vertex), &(mVertices[0].uv)) + .uploadColor(4, GL_UNSIGNED_BYTE, sizeof(Vertex), &(mVertices[0].color), GL_TRUE); gl.bindTexture(mGraphic->getGLTexture()); gl.drawArrays(GL_POLYGON, 0, mVertices.size()); diff --git a/src/libjin/graphics/je_shapes.cpp b/src/libjin/graphics/je_shapes.cpp index 8bfb1ef..ce5c7e7 100644 --- a/src/libjin/graphics/je_shapes.cpp +++ b/src/libjin/graphics/je_shapes.cpp @@ -26,9 +26,9 @@ namespace JinEngine Shader* shader = gl.getShader(); shader->prepare() - .uploadVertices(2, GL_FLOAT, 0, verts) - .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) - .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); + .uploadVertices(2, GL_FLOAT, 0, verts) + .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) + .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); gl.drawArrays(GL_POINTS, 0, 1); } @@ -39,9 +39,9 @@ namespace JinEngine Shader* shader = gl.getShader(); shader->prepare() - .uploadVertices(2, GL_SHORT, 0, p) - .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) - .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); + .uploadVertices(2, GL_SHORT, 0, p) + .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) + .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); gl.drawArrays(GL_POINTS, 0, n); } @@ -57,9 +57,9 @@ namespace JinEngine Shader* shader = gl.getShader(); shader->prepare() - .uploadVertices(2, GL_FLOAT, 0, verts) - .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) - .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); + .uploadVertices(2, GL_FLOAT, 0, verts) + .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) + .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); gl.drawArrays(GL_LINES, 0, 2); } @@ -106,9 +106,9 @@ namespace JinEngine Shader* shader = gl.getShader(); Matrix modelMatrix = gl.getModelViewMatrix(); shader->prepare() - .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) - .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) - .uploadVertices(2, GL_FLOAT, 0, p); + .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) + .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) + .uploadVertices(2, GL_FLOAT, 0, p); gl.drawArrays(GL_LINE_LOOP, 0, count); } @@ -124,9 +124,9 @@ namespace JinEngine Shader* shader = gl.getShader(); Matrix modelMatrix = gl.getModelViewMatrix(); shader->prepare() - .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) - .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) - .uploadVertices(2, GL_FLOAT, 0, p); + .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) + .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) + .uploadVertices(2, GL_FLOAT, 0, p); gl.drawArrays(GL_POLYGON, 0, count); } diff --git a/src/libjin/graphics/je_window.cpp b/src/libjin/graphics/je_window.cpp index 1ce3901..49877e3 100644 --- a/src/libjin/graphics/je_window.cpp +++ b/src/libjin/graphics/je_window.cpp @@ -88,7 +88,7 @@ namespace JinEngine SDL_GL_SetSwapInterval(vsync ? 1 : 0); SDL_GL_MakeCurrent(mWnd, ctx); // Default configuration. - gl.setClearColor(0, 0, 0, 0xff); + gl.setClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT); gl.setColor(0xff, 0xff, 0xff, 0xff); gl.enable(GL_BLEND); diff --git a/src/libjin/graphics/shaders/je_jsl_compiler.cpp b/src/libjin/graphics/shaders/je_jsl_compiler.cpp index 8aacdd0..c5a004e 100644 --- a/src/libjin/graphics/shaders/je_jsl_compiler.cpp +++ b/src/libjin/graphics/shaders/je_jsl_compiler.cpp @@ -45,6 +45,7 @@ namespace JinEngine JinEngine::String SHADER_TEXTURE_COORDS = "jin_TextureCoords"; JinEngine::String SHADER_VERTEX_COLOR = "jin_VertexColor"; JinEngine::String SHADER_TIME = "jin_Time"; + JinEngine::String SHADER_RENDERTARGET_SIZE = "jin_RenderTargetSize"; JinEngine::String SHADER_VERSION = "#version 130 core \n"; JinEngine::String SHADER_DEFINITIONS = // Types @@ -69,7 +70,8 @@ namespace JinEngine "uniform Texture " + SHADER_MAIN_TEXTURE + "; \n" "uniform mat4 " + SHADER_PROJECTION_MATRIX + "; \n" "uniform mat4 " + SHADER_MODELVIEW_MATRIX + "; \n" - "uniform vec2 " + SHADER_TIME + "; \n"; + "uniform vec2 " + SHADER_TIME + "; \n" + "uniform vec2 " + SHADER_RENDERTARGET_SIZE + "; \n"; JinEngine::String JSLCompiler::formatVertexShader(const JinEngine::String& vert) { diff --git a/src/libjin/graphics/shaders/je_jsl_compiler.h b/src/libjin/graphics/shaders/je_jsl_compiler.h index 75c92cf..c61e152 100644 --- a/src/libjin/graphics/shaders/je_jsl_compiler.h +++ b/src/libjin/graphics/shaders/je_jsl_compiler.h @@ -23,6 +23,7 @@ namespace JinEngine extern JinEngine::String SHADER_TEXTURE_COORDS; extern JinEngine::String SHADER_VERTEX_COLOR; extern JinEngine::String SHADER_TIME; + extern JinEngine::String SHADER_RENDERTARGET_SIZE; /// /// Compile JSL into GLSL. diff --git a/src/libjin/graphics/shaders/je_shader.cpp b/src/libjin/graphics/shaders/je_shader.cpp index 5668168..4fa3b9e 100644 --- a/src/libjin/graphics/shaders/je_shader.cpp +++ b/src/libjin/graphics/shaders/je_shader.cpp @@ -8,6 +8,7 @@ #include "../../utils/je_macros.h" #include "../je_gl.h" +#include "../je_window.h" #include "je_jsl_compiler.h" #include "je_shader.h" @@ -78,6 +79,15 @@ namespace JinEngine // Send uniforms. sendInt(SHADER_MAIN_TEXTURE, DEFAULT_TEXTURE_UNIT); sendVec2(SHADER_TIME, Time::getSecond(), Time::getDeltaTime()); + Canvas* rt = gl.getCanvas(); + if (rt == OpenGL::DEFAULT_CANVAS) + { + sendVec2(SHADER_RENDERTARGET_SIZE, Window::get()->getW(), Window::get()->getH()); + } + else if(rt != nullptr) + { + sendVec2(SHADER_RENDERTARGET_SIZE, rt->getWidth(), rt->getHeight()); + } // Reset attribute index. mAttributeIndex = 0; return *this; |