1 2 module dglsl.type; 3 4 import std.traits; 5 6 public import gl3n.linalg : Vector, Matrix; 7 8 import dglsl.sampler; 9 10 11 alias vec2 = Vector!(float, 2); 12 alias ivec2 = Vector!(int, 2); 13 alias uvec2 = Vector!(uint, 2); 14 alias bvec2 = Vector!(ubyte, 2); // this should be bool? 15 alias vec3 = Vector!(float, 3); 16 alias ivec3 = Vector!(int, 3); 17 alias uvec3 = Vector!(uint, 3); 18 alias bvec3 = Vector!(ubyte, 3); // this should be bool? 19 alias vec4 = Vector!(float, 4); 20 alias ivec4 = Vector!(int, 4); 21 alias uvec4 = Vector!(uint, 4); 22 alias bvec4 = Vector!(ubyte, 4); // this should be bool? 23 24 alias mat2x2 = Matrix!(float, 2, 2); 25 alias mat2x3 = Matrix!(float, 2, 3); 26 alias mat2x4 = Matrix!(float, 2, 4); 27 alias mat3x2 = Matrix!(float, 3, 2); 28 alias mat3x3 = Matrix!(float, 3, 3); 29 alias mat3x4 = Matrix!(float, 3, 4); 30 alias mat4x2 = Matrix!(float, 4, 2); 31 alias mat4x3 = Matrix!(float, 4, 3); 32 alias mat4x4 = Matrix!(float, 4, 4); 33 alias mat2 = mat2x2; 34 alias mat3 = mat3x3; 35 alias mat4 = mat4x4; 36 37 string glslType(T)() { 38 static if (is(T == vec2)) return "vec2"; 39 else static if (is(T == vec3)) return "vec3"; 40 else static if (is(T == vec4)) return "vec4"; 41 else static if (is(T == ivec2)) return "ivec2"; 42 else static if (is(T == ivec3)) return "ivec3"; 43 else static if (is(T == ivec4)) return "ivec4"; 44 else static if (is(T == uvec2)) return "uvec2"; 45 else static if (is(T == uvec3)) return "uvec3"; 46 else static if (is(T == uvec4)) return "uvec4"; 47 else static if (is(T == bvec2)) return "bvec2"; 48 else static if (is(T == bvec3)) return "bvec3"; 49 else static if (is(T == bvec4)) return "bvec4"; 50 else static if (is(T == mat2x2)) return "mat2x2"; 51 else static if (is(T == mat2x3)) return "mat2x3"; 52 else static if (is(T == mat2x4)) return "mat2x4"; 53 else static if (is(T == mat3x2)) return "mat3x2"; 54 else static if (is(T == mat3x3)) return "mat3x3"; 55 else static if (is(T == mat3x4)) return "mat3x4"; 56 else static if (is(T == mat4x2)) return "mat4x2"; 57 else static if (is(T == mat4x3)) return "mat4x3"; 58 else static if (is(T == mat4x4)) return "mat4x4"; 59 else static if (is(T == sampler1D)) return "sampler1D"; 60 else static if (is(T == sampler2D)) return "sampler2D"; 61 else static if (is(T == sampler3D)) return "sampler3D"; 62 else static if (is(T == samplerCube)) return "samplerCube"; 63 else static if (is(T == sampler2DRect)) return "sampler2DRect"; 64 else static if (is(T == sampler1DShadow)) return "sampler1DShadow"; 65 else static if (is(T == sampler2DShadow)) return "sampler2DShadow"; 66 else static if (is(T == samplerCubeShadow)) return "samplerCubeShadow"; 67 else static if (is(T == sampler2DRectShadow)) return "sampler2DRectShadow"; 68 else static if (is(T == sampler1DArray)) return "sampler1DArray"; 69 else static if (is(T == sampler2DArray)) return "sampler2DArray"; 70 else static if (is(T == sampler1DArrayShadow)) return "sampler1DArrayShadow"; 71 else static if (is(T == sampler2DArrayShadow)) return "sampler2DArrayShadow"; 72 else static if (is(T == samplerBuffer)) return "samplerBuffer"; 73 else static if (is(T == sampler2DMS)) return "sampler2DMS"; 74 else static if (is(T == sampler2DMSArray)) return "sampler2DMSArray"; 75 else static if (is(T == isampler1D)) return "isampler1D"; 76 else static if (is(T == isampler2D)) return "isampler2D"; 77 else static if (is(T == isampler3D)) return "isampler3D"; 78 else static if (is(T == isamplerCube)) return "isamplerCube"; 79 else static if (is(T == isampler2DRect)) return "isampler2DRect"; 80 else static if (is(T == isampler1DArray)) return "isampler1DArray"; 81 else static if (is(T == isampler2DArray)) return "isampler2DArray"; 82 else static if (is(T == isamplerBuffer)) return "isamplerBuffer"; 83 else static if (is(T == isampler2DMS)) return "isampler2DMS"; 84 else static if (is(T == isampler2DMSArray)) return "isampler2DMSArray"; 85 else static if (is(T == usampler1D)) return "usampler1D"; 86 else static if (is(T == usampler2D)) return "usampler2D"; 87 else static if (is(T == usampler3D)) return "usampler3D"; 88 else static if (is(T == usamplerCube)) return "usamplerCube"; 89 else static if (is(T == usampler2DRect)) return "usampler2DRect"; 90 else static if (is(T == usampler1DArray)) return "usampler1DArray"; 91 else static if (is(T == usampler2DArray)) return "usampler2DArray"; 92 else static if (is(T == usamplerBuffer)) return "usamplerBuffer"; 93 else static if (is(T == usampler2DMS)) return "usampler2DMS"; 94 else static if (is(T == usampler2DMSArray)) return "usampler2DMSArray"; 95 else return T.stringof; 96 } 97 98 unittest { 99 assert(glslType!vec2 == "vec2"); 100 assert(glslType!vec3 == "vec3"); 101 assert(glslType!vec4 == "vec4"); 102 assert(glslType!ivec2 == "ivec2"); 103 assert(glslType!bvec3 == "bvec3"); 104 assert(glslType!uvec4 == "uvec4"); 105 106 assert(glslType!mat2 == "mat2x2"); 107 assert(glslType!mat3 == "mat3x3"); 108 assert(glslType!mat4 == "mat4x4"); 109 assert(glslType!mat2x2 == "mat2x2"); 110 assert(glslType!mat2x3 == "mat2x3"); 111 assert(glslType!mat2x4 == "mat2x4"); 112 assert(glslType!mat2x3 == "mat2x3"); 113 assert(glslType!mat3x3 == "mat3x3"); 114 assert(glslType!mat4x3 == "mat4x3"); 115 116 assert(glslType!int == "int"); 117 assert(glslType!uint == "uint"); 118 assert(glslType!bool == "bool"); 119 } 120