jin.graphics = jin.graphics or {} local jg = jin.graphics jg.RenderMode = { FILL = 1, LINE = 2, } jg.SpriteOrigin = { TOPLEFT = 0, TOPCENTER = 1, TOPRIGHT = 2, MIDDLELEFT = 3, MIDDLECENTER = 4, MIDDLERIGHT = 5, BOTTOMLEFT = 6, BOTTOMCENTER = 7, BOTTOMRIGHT = 8 } jg.SpriteMode = { SINGLE = 1, RANDOM = 2, ANIMATED = 3 } -- built in shaders jg.Shaders = { Font = nil, Texture = nil, Sprite = nil, SpriteSheet = nil, Default = nil } local function compileBuiltInShaders() jg.Shaders.Font = jg.newShader([[ #VERTEX_SHADER Vertex vert(Vertex v) { return v; } #END_VERTEX_SHADER #FRAGMENT_SHADER Color frag(Color col, Texture tex, Vertex v) { return Color(col.rgb, texel(tex, v.uv).a); } #END_FRAGMENT_SHADER ]]) jg.Shaders.Texture = jg.newShader([[ #VERTEX_SHADER Vertex vert(Vertex v) { return v; } #END_VERTEX_SHADER #FRAGMENT_SHADER Color frag(Color col, Texture tex, Vertex v) { return col * texel(tex, v.uv); } #END_FRAGMENT_SHADER ]]) jg.Shaders.Sprite = jg.newShader([[ #VERTEX_SHADER Vertex vert(Vertex v) { return v; } #END_VERTEX_SHADER #FRAGMENT_SHADER Color frag(Color col, Texture tex, Vertex v) { return col * texel(tex, v.uv); } #END_FRAGMENT_SHADER ]]) jg.Shaders.SpriteSheet = jg.newShader([[ #VERTEX_SHADER Vertex vert(Vertex v) { return v; } #END_VERTEX_SHADER #FRAGMENT_SHADER Color frag(Color col, Texture tex, Vertex v) { return col * texel(tex, v.uv); } #END_FRAGMENT_SHADER ]]) jg.Shaders.Default = jg.newShader([[ #VERTEX_SHADER Vertex vert(Vertex v) { return v; } #END_VERTEX_SHADER #FRAGMENT_SHADER Color frag(Color col, Texture tex, Vertex v) { return col * texel(tex, v.uv); } #END_FRAGMENT_SHADER ]]) end local _init = jg.init local initialized = false jg.init = function(setting) if initialized then return initialized end initialized = _init(setting) if initialized then compileBuiltInShaders() jg.useShader(jg.Shaders.Default) end return initialized end jg.unuseShader = function() jg.useShader(jg.Shaders.Default) end -- Reset all attributes to default value. jg.reset = function() jg.setColor(255, 255, 255, 255) jg.setClearColor(0, 0, 0, 255) jg.clear() jg.unsetFont() jg.unuseShader() end