diff --git a/assets/glsl/batch-3d.frag b/assets/glsl/batch-3d.frag new file mode 100644 index 0000000..5ff22ec --- /dev/null +++ b/assets/glsl/batch-3d.frag @@ -0,0 +1,49 @@ +#version 450 core + +layout(location = 0) out vec4 color; + +in vec3 v_normal; +in vec2 v_textureCoordinates; +in flat float v_textureIndex; + +uniform sampler2D u_textures[32]; + +void main() +{ + vec4 textureColor = vec4(1.0f); + switch(int(v_textureIndex)) { + case 0: break; // Texture unit 0 is reserved for no texture + case 1: textureColor *= texture(u_textures[1], v_textureCoordinates); break; + case 2: textureColor *= texture(u_textures[2], v_textureCoordinates); break; + case 3: textureColor *= texture(u_textures[3], v_textureCoordinates); break; + case 4: textureColor *= texture(u_textures[4], v_textureCoordinates); break; + case 5: textureColor *= texture(u_textures[5], v_textureCoordinates); break; + case 6: textureColor *= texture(u_textures[6], v_textureCoordinates); break; + case 7: textureColor *= texture(u_textures[7], v_textureCoordinates); break; + case 8: textureColor *= texture(u_textures[8], v_textureCoordinates); break; + case 9: textureColor *= texture(u_textures[9], v_textureCoordinates); break; + case 10: textureColor *= texture(u_textures[10], v_textureCoordinates); break; + case 11: textureColor *= texture(u_textures[11], v_textureCoordinates); break; + case 12: textureColor *= texture(u_textures[12], v_textureCoordinates); break; + case 13: textureColor *= texture(u_textures[13], v_textureCoordinates); break; + case 14: textureColor *= texture(u_textures[14], v_textureCoordinates); break; + case 15: textureColor *= texture(u_textures[15], v_textureCoordinates); break; + case 16: textureColor *= texture(u_textures[16], v_textureCoordinates); break; + case 17: textureColor *= texture(u_textures[17], v_textureCoordinates); break; + case 18: textureColor *= texture(u_textures[18], v_textureCoordinates); break; + case 19: textureColor *= texture(u_textures[19], v_textureCoordinates); break; + case 20: textureColor *= texture(u_textures[20], v_textureCoordinates); break; + case 21: textureColor *= texture(u_textures[21], v_textureCoordinates); break; + case 22: textureColor *= texture(u_textures[22], v_textureCoordinates); break; + case 23: textureColor *= texture(u_textures[23], v_textureCoordinates); break; + case 24: textureColor *= texture(u_textures[24], v_textureCoordinates); break; + case 25: textureColor *= texture(u_textures[25], v_textureCoordinates); break; + case 26: textureColor *= texture(u_textures[26], v_textureCoordinates); break; + case 27: textureColor *= texture(u_textures[27], v_textureCoordinates); break; + case 28: textureColor *= texture(u_textures[28], v_textureCoordinates); break; + case 29: textureColor *= texture(u_textures[29], v_textureCoordinates); break; + case 30: textureColor *= texture(u_textures[30], v_textureCoordinates); break; + case 31: textureColor *= texture(u_textures[31], v_textureCoordinates); break; + } + color = textureColor; +} diff --git a/assets/glsl/batch-3d.vert b/assets/glsl/batch-3d.vert new file mode 100644 index 0000000..c09f022 --- /dev/null +++ b/assets/glsl/batch-3d.vert @@ -0,0 +1,21 @@ +#version 450 core + +layout(location = 0) in vec3 a_position; +layout(location = 1) in vec3 a_normal; +layout(location = 2) in vec2 a_textureCoordinates; +layout(location = 3) in float a_textureIndex; + +out vec3 v_normal; +out vec2 v_textureCoordinates; +out flat float v_textureIndex; + +uniform mat4 u_projectionView; + +void main() +{ + v_normal = a_normal; + v_textureCoordinates = a_textureCoordinates; + v_textureIndex = a_textureIndex; + // Vclip = Camera projection * Camera view * Model transform * Vlocal + gl_Position = u_projectionView * vec4(a_position, 1.0f); +} diff --git a/assets/glsl/batch-font.vert b/assets/glsl/batch-font.vert index d211e01..372be09 100644 --- a/assets/glsl/batch-font.vert +++ b/assets/glsl/batch-font.vert @@ -33,7 +33,4 @@ void main() v_borderColor = a_borderColor; v_offset = a_offset; gl_Position = vec4(a_position, 1.0f); - - // Vclip = Camera projection * Camera view * Model transform * Vlocal - // gl_Position = u_projectionView * vec4(a_position, 1.0f); }