diff --git a/android/examples/multisampling/build.gradle b/android/examples/multisampling/build.gradle index e3369442..a398cc85 100644 --- a/android/examples/multisampling/build.gradle +++ b/android/examples/multisampling/build.gradle @@ -49,7 +49,7 @@ task copyTask { } copy { - from '../../../data/shaders/mesh' + from '../../../data/shaders/multisampling' into 'assets/shaders/mesh' include '*.*' } diff --git a/data/shaders/multisampling/mesh.frag b/data/shaders/multisampling/mesh.frag new file mode 100644 index 00000000..2dcdae5f --- /dev/null +++ b/data/shaders/multisampling/mesh.frag @@ -0,0 +1,24 @@ +#version 450 + +layout (set = 0, binding = 1) uniform sampler2D samplerColorMap; + +layout (location = 0) in vec3 inNormal; +layout (location = 1) in vec3 inColor; +layout (location = 2) in vec2 inUV; +layout (location = 3) in vec3 inViewVec; +layout (location = 4) in vec3 inLightVec; + +layout (location = 0) out vec4 outFragColor; + +void main() +{ + vec4 color = texture(samplerColorMap, inUV) * vec4(inColor, 1.0); + + vec3 N = normalize(inNormal); + vec3 L = normalize(inLightVec); + vec3 V = normalize(inViewVec); + vec3 R = reflect(-L, N); + vec3 diffuse = max(dot(N, L), 0.0) * inColor; + vec3 specular = pow(max(dot(R, V), 0.0), 16.0) * vec3(0.75); + outFragColor = vec4(diffuse * color.rgb + specular, 1.0); +} \ No newline at end of file diff --git a/data/shaders/multisampling/mesh.frag.spv b/data/shaders/multisampling/mesh.frag.spv new file mode 100644 index 00000000..86e30e4e Binary files /dev/null and b/data/shaders/multisampling/mesh.frag.spv differ diff --git a/data/shaders/multisampling/mesh.vert b/data/shaders/multisampling/mesh.vert new file mode 100644 index 00000000..22b6aeb9 --- /dev/null +++ b/data/shaders/multisampling/mesh.vert @@ -0,0 +1,38 @@ +#version 450 + +layout (location = 0) in vec3 inPos; +layout (location = 1) in vec3 inNormal; +layout (location = 2) in vec2 inUV; +layout (location = 3) in vec3 inColor; + +layout (set = 0, binding = 0) uniform UBO +{ + mat4 projection; + mat4 model; + vec4 lightPos; +} ubo; + +layout (location = 0) out vec3 outNormal; +layout (location = 1) out vec3 outColor; +layout (location = 2) out vec2 outUV; +layout (location = 3) out vec3 outViewVec; +layout (location = 4) out vec3 outLightVec; + +out gl_PerVertex +{ + vec4 gl_Position; +}; + +void main() +{ + outNormal = inNormal; + outColor = inColor; + outUV = inUV; + gl_Position = ubo.projection * ubo.model * vec4(inPos.xyz, 1.0); + + vec4 pos = ubo.model * vec4(inPos, 1.0); + outNormal = mat3(ubo.model) * inNormal; + vec3 lPos = mat3(ubo.model) * ubo.lightPos.xyz; + outLightVec = lPos - pos.xyz; + outViewVec = -pos.xyz; +} \ No newline at end of file diff --git a/data/shaders/multisampling/mesh.vert.spv b/data/shaders/multisampling/mesh.vert.spv new file mode 100644 index 00000000..2d0a79fc Binary files /dev/null and b/data/shaders/multisampling/mesh.vert.spv differ diff --git a/examples/multisampling/multisampling.cpp b/examples/multisampling/multisampling.cpp index a7655f2f..9c568f32 100644 --- a/examples/multisampling/multisampling.cpp +++ b/examples/multisampling/multisampling.cpp @@ -570,8 +570,8 @@ public: pipelineCI.pVertexInputState = &vertexInputState; // MSAA rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/mesh/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/mesh/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getAssetPath() + "shaders/multisampling/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getAssetPath() + "shaders/multisampling/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Setup multi sampling multisampleState.rasterizationSamples = sampleCount; // Number of samples to use for rasterization