Base2d.hx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package h3d.shader;
  2. class Base2d extends hxsl.Shader {
  3. static var SRC = {
  4. @input var input : {
  5. var position : Vec2;
  6. var uv : Vec2;
  7. var color : Vec4;
  8. };
  9. var output : {
  10. var position : Vec4;
  11. var color : Vec4;
  12. };
  13. @global var time : Float;
  14. @param var zValue : Float;
  15. @param var texture : Sampler2D;
  16. var spritePosition : Vec4;
  17. var absolutePosition : Vec4;
  18. var pixelColor : Vec4;
  19. var textureColor : Vec4;
  20. @var var calculatedUV : Vec2;
  21. @const var isRelative : Bool;
  22. @param var color : Vec4;
  23. @param var absoluteMatrixA : Vec3;
  24. @param var absoluteMatrixB : Vec3;
  25. @param var filterMatrixA : Vec3;
  26. @param var filterMatrixB : Vec3;
  27. @const var hasUVPos : Bool;
  28. @param var uvPos : Vec4;
  29. @const var killAlpha : Bool;
  30. @const var pixelAlign : Bool;
  31. @param var halfPixelInverse : Vec2;
  32. @param var viewportA : Vec3;
  33. @param var viewportB : Vec3;
  34. var outputPosition : Vec4;
  35. function __init__() {
  36. spritePosition = vec4(input.position, zValue, 1);
  37. if( isRelative ) {
  38. absolutePosition.x = vec3(spritePosition.xy,1).dot(absoluteMatrixA);
  39. absolutePosition.y = vec3(spritePosition.xy,1).dot(absoluteMatrixB);
  40. absolutePosition.zw = spritePosition.zw;
  41. } else
  42. absolutePosition = spritePosition;
  43. calculatedUV = hasUVPos ? input.uv * uvPos.zw + uvPos.xy : input.uv;
  44. pixelColor = isRelative ? color * input.color : input.color;
  45. textureColor = texture.get(calculatedUV);
  46. pixelColor *= textureColor;
  47. }
  48. function vertex() {
  49. // transform from global to render texture coordinates
  50. var tmp = vec3(absolutePosition.xy, 1);
  51. tmp = vec3(tmp.dot(filterMatrixA), tmp.dot(filterMatrixB), 1);
  52. // transform to viewport
  53. outputPosition = vec4(
  54. tmp.dot(viewportA),
  55. tmp.dot(viewportB),
  56. absolutePosition.zw
  57. );
  58. // http://msdn.microsoft.com/en-us/library/windows/desktop/bb219690(v=vs.85).aspx
  59. if( pixelAlign ) outputPosition.xy -= halfPixelInverse;
  60. output.position = outputPosition;
  61. }
  62. function fragment() {
  63. if( killAlpha && pixelColor.a < 0.001 ) discard;
  64. output.color = pixelColor;
  65. }
  66. };
  67. }