Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. #version 130
  2.  
  3. uniform sampler2D level;
  4. uniform sampler2D blocks;
  5. uniform sampler2D tiles;
  6. uniform sampler2D palette;
  7.  
  8. void main()
  9. {
  10. // Get texture dimensions
  11. vec2 levelSz = textureSize(level, 0).xy;
  12. vec2 tilesSz = textureSize(tiles, 0).xy;
  13.  
  14. // Get level block data
  15. vec4 data = texture2D(level, gl_TexCoord[0].xy / 16).rgba;
  16. float pos = (floor(data.a * 65536) + floor(data.r * 256)) * 4;
  17. float flags = floor(data.g * 256);
  18.  
  19. // Block flags
  20. bool blkFlipX = mod(flags, 2) == 1;
  21. bool blkFlipY = mod(floor(flags / 2), 2) == 1;
  22.  
  23. // Get tile to draw
  24. float blkCol = mod(floor(gl_TexCoord[0].x * levelSz.x / 8), 2);
  25. float blkRow = mod(floor(gl_TexCoord[0].y * levelSz.y / 8), 2);
  26. if (blkFlipX)
  27. blkCol = 1.0 - blkCol;
  28. if (blkFlipY)
  29. blkRow = 1.0 - blkRow;
  30.  
  31. // Get block tile data
  32. data = texture2D(blocks, vec2((pos + (blkRow * 2) + blkCol) / textureSize(blocks, 0).x, 0)).rgba;
  33. pos = ((floor(data.a * 65536) + floor(data.r * 256)) * 8) / tilesSz.x;
  34. flags = floor(data.g * 256);
  35.  
  36. // Tile flags
  37. bool tileFlipX = mod(flags, 2) == 1;
  38. bool tileFlipY = mod(floor(flags / 2), 2) == 1;
  39. float palLine = floor(data.b * 256);
  40.  
  41. // Get tile pixel
  42. float pixelX = mod(floor(gl_TexCoord[0].x * levelSz.x), 8);
  43. float pixelY = mod(floor(gl_TexCoord[0].y * levelSz.y), 8);
  44. if ((!tileFlipX && blkFlipX) || (tileFlipX && !blkFlipX))
  45. pixelX = 7.0 - pixelX;
  46. if ((!tileFlipY && blkFlipY) || (tileFlipY && !blkFlipY))
  47. pixelY = 7.0 - pixelY;
  48.  
  49. // Get palette entry
  50. float tilePixel = floor(texture2D(tiles, vec2(pos + (pixelX / tilesSz.x), pixelY / tilesSz.y)).a * 256);
  51. if (tilePixel == 0)
  52. gl_FragColor = texture2D(palette, vec2(0.5, 0));
  53. else
  54. gl_FragColor = texture2D(palette, vec2((tilePixel + (palLine * 16)) / 64, 0));
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement