UNPKG

seed-engine

Version:

A Lightweight 2D game engine using WebGL2. The engine is designed on the focus of creating a bridge between creating and publishing games to the Seed Network as modules.

110 lines (79 loc) 2.43 kB
/** * Default fragment shader which handles single colors and Texture sprite sheets. */ export const DEFAULT_F = `#version 300 es precision mediump float; //in in vec2 v_texcoord; uniform vec4 u_color; uniform vec4 u_subTexcoord; //local uniform sampler2D u_texture; vec2 subTexcoord; //out out vec4 outColor; void main() { subTexcoord = v_texcoord; subTexcoord.xy -= u_subTexcoord.xy; subTexcoord.xy *= u_subTexcoord.zw; vec4 fragColor = texture(u_texture, subTexcoord) * u_color; if(fragColor.a < 0.45) { discard; } outColor = vec4(fragColor.rgb, u_color.a); } `; /** * Fragment shader which takes parameters to draw tile maps. */ export const TILEMAP_F = `#version 300 es precision highp float; //in in vec2 v_texcoord; uniform vec4 u_color; /* [0][0] = 0 = Map data tiles width. [0][1] = 1 = Map data tiles height. [0][2] = 2 = Map tiles in the texture width. [0][3] = 3 = Map tiles in the texture height. [1][0] = 4 = Map viewport width. [1][1] = 5 = Map viewport height. [1][2] = 6 = Map viewport x1. [1][3] = 7 = Map viewport y1. [2][0] = 8 = TileSize width normalized. [2][1] = 9 = TileSize height normalized. */ uniform mat4 u_tileData; uniform mediump usampler2D u_mapDataTexture; uniform sampler2D u_texture; //local //texture tile image coordinates vec2 subTexcoord; //map data tile position. vec2 mapTilecoord; //Drawing coordinate. vec2 drawCoord; //out out vec4 outColor; void main() { //get this tile xy coordinate to obtain the tile ID. mapTilecoord.x = floor(u_tileData[1][2] + (v_texcoord.x * u_tileData[1][0])) / (u_tileData[0][0] - 1.0f); mapTilecoord.y = floor(u_tileData[1][3] + (v_texcoord.y * u_tileData[1][1])) / (u_tileData[0][1] - 1.0f); //get the tile ID from the texture. float tileID = float(texture(u_mapDataTexture, mapTilecoord).r); //get xy positions of texture from the ID, normalized. subTexcoord.x = -mod(tileID, u_tileData[0][2]) / u_tileData[0][2]; subTexcoord.y = (-floor(tileID / u_tileData[0][2]) / u_tileData[0][3]); drawCoord.x = fract(v_texcoord.x * u_tileData[1][0]); drawCoord.y = fract(v_texcoord.y * u_tileData[1][1]); drawCoord.x /= u_tileData[0][2]; drawCoord.y /= u_tileData[0][3]; drawCoord.x -= subTexcoord.x; drawCoord.y -= subTexcoord.y; vec4 fragColor = texture(u_texture , drawCoord) * u_color; if (fragColor.a < 0.6) { discard; } outColor = vec4(fragColor.rgb, u_color.a); } `;