diff options
-rw-r--r-- | bin/Jin.exe | bin | 1407488 -> 548864 bytes | |||
-rw-r--r-- | bin/img.png | bin | 0 -> 442 bytes | |||
-rw-r--r-- | bin/img2.bmp | bin | 0 -> 12342 bytes | |||
-rw-r--r-- | bin/jin.exe | bin | 1407488 -> 548864 bytes | |||
-rw-r--r-- | bin/main.lua | 33 | ||||
-rw-r--r-- | build/vc++/libjin/libjin.vcxproj | 5 | ||||
-rw-r--r-- | build/vc++/libjin/libjin.vcxproj.filters | 15 | ||||
-rw-r--r-- | src/libjin/Graphics/Graphics.h | 2 | ||||
-rw-r--r-- | src/libjin/Graphics/JSL.cpp | 142 | ||||
-rw-r--r-- | src/libjin/Graphics/JSL.h | 59 | ||||
-rw-r--r-- | src/libjin/Graphics/Texture.cpp | 1 | ||||
-rw-r--r-- | src/lua/modules/embed/boot.lua.h | 1 |
12 files changed, 47 insertions, 211 deletions
diff --git a/bin/Jin.exe b/bin/Jin.exe Binary files differindex fe5bf33..54e55b7 100644 --- a/bin/Jin.exe +++ b/bin/Jin.exe diff --git a/bin/img.png b/bin/img.png Binary files differnew file mode 100644 index 0000000..0d11f85 --- /dev/null +++ b/bin/img.png diff --git a/bin/img2.bmp b/bin/img2.bmp Binary files differnew file mode 100644 index 0000000..dc9cf95 --- /dev/null +++ b/bin/img2.bmp diff --git a/bin/jin.exe b/bin/jin.exe Binary files differindex fe5bf33..54e55b7 100644 --- a/bin/jin.exe +++ b/bin/jin.exe diff --git a/bin/main.lua b/bin/main.lua new file mode 100644 index 0000000..89a8c01 --- /dev/null +++ b/bin/main.lua @@ -0,0 +1,33 @@ +local shader; +local program = [[ +extern Texture img; +extern number dt; +Color effect(Color col, Texture tex, vec2 uv, vec2 screen) +{ + //return vec4(1, 0, 1, 1); + return sin(dt)*Texel(tex, uv) * Texel(img, uv); +} +]] +local img +local img2 +function jin.core.onLoad() + shader = jin.graphics.newShader(program) + img = jin.graphics.newTexture("img.png") + img2 = jin.graphics.newTexture("img2.bmp") +end + +function jin.core.onEvent(e) + if e.type == "quit" then + jin.core.stop() + end +end + +local dt = 0 +function jin.core.onDraw() + dt = dt + 0.1 + jin.graphics.useShader(shader) + shader:sendTexture("img", img2) + shader:sendNumber("dt", dt) + jin.graphics.draw(img, 0, 0) + jin.graphics.unuseShader() +end
\ No newline at end of file diff --git a/build/vc++/libjin/libjin.vcxproj b/build/vc++/libjin/libjin.vcxproj index 98fd116..5c3c91c 100644 --- a/build/vc++/libjin/libjin.vcxproj +++ b/build/vc++/libjin/libjin.vcxproj @@ -152,11 +152,12 @@ <ClInclude Include="..\..\..\src\libjin\Filesystem\Filesystem.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Canvas.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Color.h" /> + <ClInclude Include="..\..\..\src\libjin\Graphics\base.shader.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Drawable.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Font.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Shapes.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Graphics.h" /> - <ClInclude Include="..\..\..\src\libjin\Graphics\JSL.h" /> + <ClInclude Include="..\..\..\src\libjin\Graphics\Shader.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Texture.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Window.h" /> <ClInclude Include="..\..\..\src\libjin\Input\Event.h" /> @@ -201,7 +202,7 @@ <ClCompile Include="..\..\..\src\libjin\Graphics\Drawable.cpp" /> <ClCompile Include="..\..\..\src\libjin\Graphics\Font.cpp" /> <ClCompile Include="..\..\..\src\libjin\Graphics\Shapes.cpp" /> - <ClCompile Include="..\..\..\src\libjin\Graphics\JSL.cpp" /> + <ClCompile Include="..\..\..\src\libjin\Graphics\Shader.cpp" /> <ClCompile Include="..\..\..\src\libjin\Graphics\Texture.cpp" /> <ClCompile Include="..\..\..\src\libjin\Graphics\Window.cpp" /> <ClCompile Include="..\..\..\src\libjin\Input\Event.cpp" /> diff --git a/build/vc++/libjin/libjin.vcxproj.filters b/build/vc++/libjin/libjin.vcxproj.filters index 63f78ed..769b79a 100644 --- a/build/vc++/libjin/libjin.vcxproj.filters +++ b/build/vc++/libjin/libjin.vcxproj.filters @@ -192,9 +192,6 @@ <ClInclude Include="..\..\..\src\libjin\Graphics\Graphics.h"> <Filter>Source\Graphics</Filter> </ClInclude> - <ClInclude Include="..\..\..\src\libjin\Graphics\JSL.h"> - <Filter>Source\Graphics</Filter> - </ClInclude> <ClInclude Include="..\..\..\src\libjin\Graphics\Texture.h"> <Filter>Source\Graphics</Filter> </ClInclude> @@ -207,6 +204,12 @@ <ClInclude Include="..\..\..\src\libjin\Time\Timer.h"> <Filter>Source\Time</Filter> </ClInclude> + <ClInclude Include="..\..\..\src\libjin\Graphics\Shader.h"> + <Filter>Source\Graphics</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\libjin\Graphics\base.shader.h"> + <Filter>Source\Graphics</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="..\..\..\src\libjin\README.md"> @@ -295,9 +298,6 @@ <ClCompile Include="..\..\..\src\libjin\Graphics\Font.cpp"> <Filter>Source\Graphics</Filter> </ClCompile> - <ClCompile Include="..\..\..\src\libjin\Graphics\JSL.cpp"> - <Filter>Source\Graphics</Filter> - </ClCompile> <ClCompile Include="..\..\..\src\libjin\Graphics\Texture.cpp"> <Filter>Source\Graphics</Filter> </ClCompile> @@ -310,5 +310,8 @@ <ClCompile Include="..\..\..\src\libjin\Time\Timer.cpp"> <Filter>Source\Time</Filter> </ClCompile> + <ClCompile Include="..\..\..\src\libjin\Graphics\Shader.cpp"> + <Filter>Source\Graphics</Filter> + </ClCompile> </ItemGroup> </Project>
\ No newline at end of file diff --git a/src/libjin/Graphics/Graphics.h b/src/libjin/Graphics/Graphics.h index 210dadf..bca3812 100644 --- a/src/libjin/Graphics/Graphics.h +++ b/src/libjin/Graphics/Graphics.h @@ -8,7 +8,7 @@ #include "font.h" #include "Shapes.h" #include "texture.h" -#include "jsl.h" +#include "Shader.h" #include "window.h" #endif // JIN_MODULES_RENDER diff --git a/src/libjin/Graphics/JSL.cpp b/src/libjin/Graphics/JSL.cpp deleted file mode 100644 index 1eb1357..0000000 --- a/src/libjin/Graphics/JSL.cpp +++ /dev/null @@ -1,142 +0,0 @@ -#include "../modules.h" -#if JIN_MODULES_RENDER - -#include "../utils/macros.h" -#include "jsl.h" -namespace jin -{ -namespace graphics -{ - - static const char* base_f = R"base_f( -#define number float -#define Texture sampler2D -#define Canvas sampler2D -#define Color vec4 -#define Texel texture2D -#define extern uniform -uniform Texture _tex0_; -%s -void main() -{ - gl_FragColor = effect(gl_Color, _tex0_, gl_TexCoord[0].xy, gl_FragCoord.xy); -} - )base_f"; - - /*static*/ JSLProgram* JSLProgram::currentJSLProgram = nullptr; - - JSLProgram* JSLProgram::createJSLProgram(const char* program) - { - return new JSLProgram(program); - } - - JSLProgram::JSLProgram(const char* program) - : currentTextureUnit(0) - { - char* fs = (char*)alloca(strlen(program) + strlen(base_f)); - sprintf(fs, base_f, program); - GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragmentShader, 1, (const GLchar**)&fs, NULL); - glCompileShader(fragmentShader); - pid = glCreateProgram(); - glAttachShader(pid, fragmentShader); - glLinkProgram(pid); - } - - JSLProgram::~JSLProgram() - { - if (currentJSLProgram == this) - unuse(); - } - - static inline GLint getMaxTextureUnits() - { - GLint maxTextureUnits = 0; - glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits); - return maxTextureUnits; - } - - GLint JSLProgram::getTextureUnit(const std::string& name) - { - std::map<std::string, GLint>::iterator texture_unit = texturePool.find(name); - if (texture_unit != texturePool.end()) - return texture_unit->second; - static GLint maxTextureUnits = getMaxTextureUnits(); - if (++currentTextureUnit >= maxTextureUnits) - return 0; - texturePool[name] = currentTextureUnit; - return currentTextureUnit; - } - -#define checkJSL() if (currentJSLProgram != this) return - - void JSLProgram::sendFloat(const char* variable, float number) - { - checkJSL(); - int loc = glGetUniformLocation(pid, variable); - glUniform1f(loc, number); - } - - void JSLProgram::sendTexture(const char* variable, const Texture* tex) - { - checkJSL(); - GLint location = glGetUniformLocation(pid, variable); - if (location == -1) - return; - GLint texture_unit = getTextureUnit(variable); - glUniform1i(location, texture_unit); - glActiveTexture(GL_TEXTURE0 + texture_unit); - glBindTexture(GL_TEXTURE_2D, tex->getTexture()); - glActiveTexture(GL_TEXTURE0); - } - - void JSLProgram::sendCanvas(const char* variable, const Canvas* canvas) - { - checkJSL(); - GLint location = glGetUniformLocation(pid, variable); - if (location == -1) - return; - GLint texture_unit = getTextureUnit(variable); - glUniform1i(location, texture_unit); - glActiveTexture(GL_TEXTURE0 + texture_unit); - glBindTexture(GL_TEXTURE_2D, canvas->getTexture()); - glActiveTexture(GL_TEXTURE0); - } - - void JSLProgram::sendVec2(const char* name, float x, float y) - { - checkJSL(); - int loc = glGetUniformLocation(pid, name); - glUniform2f(loc, x, y); - } - - void JSLProgram::sendVec3(const char* name, float x, float y, float z) - { - checkJSL(); - int loc = glGetUniformLocation(pid, name); - glUniform3f(loc, x, y, z); - } - - void JSLProgram::sendVec4(const char* name, float x, float y, float z, float w) - { - checkJSL(); - int loc = glGetUniformLocation(pid, name); - glUniform4f(loc, x, y, z, w); - } - - void JSLProgram::sendColor(const char* name, const color* col) - { - checkJSL(); - int loc = glGetUniformLocation(pid, name); - glUniform4f(loc, - col->rgba.r / 255.f, - col->rgba.g / 255.f, - col->rgba.b / 255.f, - col->rgba.a / 255.f - ); - } - -} // graphics -} // jin - -#endif // JIN_MODULES_RENDER
\ No newline at end of file diff --git a/src/libjin/Graphics/JSL.h b/src/libjin/Graphics/JSL.h deleted file mode 100644 index a99a4c7..0000000 --- a/src/libjin/Graphics/JSL.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef __JIN_JSL_H -#define __JIN_JSL_H -#include "../modules.h" -#if JIN_MODULES_RENDER - -#include <string> -#include <map> -#include "color.h" -#include "texture.h" -#include "canvas.h" -#include "../3rdparty/GLee/GLee.h" - -namespace jin -{ -namespace graphics -{ - - class JSLProgram - { - public: - static JSLProgram* createJSLProgram(const char* program); - static inline JSLProgram* getCurrentJSL() { return currentJSLProgram; } - virtual ~JSLProgram(); - - inline void use() - { - glUseProgram(pid); - currentJSLProgram = this; - } - static inline void unuse() - { - glUseProgram(0); - currentJSLProgram = nullptr; - } - - void sendFloat(const char* name, float number); - void sendTexture(const char* name, const Texture* image); - void sendVec2(const char* name, float x, float y); - void sendVec3(const char* name, float x, float y, float z); - void sendVec4(const char* name, float x, float y, float z, float w); - void sendCanvas(const char* name, const Canvas* canvas); - void sendColor(const char* name, const color* col); - - protected: - static JSLProgram* currentJSLProgram; - JSLProgram(const char* program); - - GLuint pid; - std::map<std::string, GLint> texturePool; - GLint currentTextureUnit; - GLint getTextureUnit(const std::string& name); - - }; - -} // graphics -} // jin - -#endif // JIN_MODULES_RENDER -#endif // __JIN_JSL_H
\ No newline at end of file diff --git a/src/libjin/Graphics/Texture.cpp b/src/libjin/Graphics/Texture.cpp index 633eeac..708042e 100644 --- a/src/libjin/Graphics/Texture.cpp +++ b/src/libjin/Graphics/Texture.cpp @@ -68,7 +68,6 @@ namespace graphics bool Texture::loadb(const void* b, size_t s) { - // ʹstbi_load_from_memory int w; int h; pixels = (color*)stbi_load_from_memory((unsigned char *)b, s, &w, &h, NULL, STBI_rgb_alpha); diff --git a/src/lua/modules/embed/boot.lua.h b/src/lua/modules/embed/boot.lua.h index 1638cbd..8ff89ee 100644 --- a/src/lua/modules/embed/boot.lua.h +++ b/src/lua/modules/embed/boot.lua.h @@ -26,6 +26,7 @@ jin.config.fps = jin.config.fps or 60 jin.graphics.init(jin.config) jin.audio.init() +-- TODO: ϵͳģ ------------------------------------------------------------------------- -- Default game loop |