Browse Source

fix tile atlas stuff

feature/replace-renderer
Martin Dørum 3 years ago
parent
commit
f3c542946d
1 changed files with 8 additions and 3 deletions
  1. 8
    3
      libcygnet/src/shaders.cc

+ 8
- 3
libcygnet/src/shaders.cc View File

@@ -3,6 +3,8 @@
namespace Cygnet::Shaders {

const char *spriteVx = R"glsl(
#define TILE_SIZE 32.0

uniform mat3 camera;
uniform mat3 transform;
uniform vec3 frameInfo; // frame height, frame count, frame index
@@ -10,10 +12,11 @@ const char *spriteVx = R"glsl(
varying vec2 v_texCoord;

void main() {
float pixoffset = (1.0 - vertex.y * 2.0) / (TILE_SIZE * frameInfo.x * 2.0);
v_texCoord = vec2(
vertex.x,
(frameInfo.x * frameInfo.z + (frameInfo.x * vertex.y)) /
(frameInfo.x * frameInfo.y));
(frameInfo.x * frameInfo.y) + pixoffset);

vec3 pos = camera * transform * vec3(vertex, 1);
gl_Position = vec4(pos.xy, 0, 1);
@@ -59,9 +62,11 @@ const char *chunkFr = R"glsl(
vec4 tileColor = texture2D(tiles, tilePos / vec2(CHUNK_WIDTH, CHUNK_HEIGHT));
float tileID = floor((tileColor.r * 256.0 + tileColor.a) * 256.0);

vec2 offset = v_tileCoord - tilePos;
vec2 pixoffset = (1.0 - offset * 2.0) / (TILE_SIZE * 2.0);
vec2 atlasPos = vec2(
tileID + v_tileCoord.x - tilePos.x,
floor(tileID / tileAtlasSize.x) + v_tileCoord.y - tilePos.y);
pixoffset.x + tileID + offset.x,
pixoffset.y + floor(tileID / tileAtlasSize.x) + offset.y);

gl_FragColor = texture2D(tileAtlas, atlasPos / tileAtlasSize);
}

Loading…
Cancel
Save