| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- // Copyright (C) 2009-2022, Panagiotis Christopoulos Charitos and contributors.
- // All rights reserved.
- // Code licensed under the BSD License.
- // http://www.anki3d.org/LICENSE
- #pragma anki mutator ANKI_TECHNIQUE 3
- #pragma anki mutator ANIMATED_TEXTURE 0 1
- #pragma anki mutator LIGHT 0 1
- #include <AnKi/Shaders/ForwardShadingCommon.glsl>
- #pragma anki reflect AnKiLocalUniforms
- #pragma anki struct AnKiLocalUniforms
- #pragma anki member F32 m_animationPeriod if ANIMATED_TEXTURE is 1
- #pragma anki member ANKI_RP Vec4 m_colorScale
- #pragma anki member ANKI_RP Vec4 m_colorBias
- #pragma anki struct end
- layout(set = MATERIAL_SET_GLOBAL, binding = MATERIAL_BINDING_GLOBAL_UNIFORMS) uniform b_ankiGlobalUniforms
- {
- MaterialGlobalUniforms u_ankiGlobals;
- };
- layout(set = MATERIAL_SET_GLOBAL, binding = MATERIAL_BINDING_TRILINEAR_REPEAT_SAMPLER) uniform sampler u_globalSampler;
- layout(set = MATERIAL_SET_LOCAL, binding = MATERIAL_BINDING_LOCAL_UNIFORMS, std430) buffer b_localUniforms
- {
- U32 u_localUniforms[];
- };
- layout(set = MATERIAL_SET_LOCAL, binding = MATERIAL_BINDING_RENDERABLE_GPU_VIEW) uniform b_renderableGpuViews
- {
- RenderableGpuView u_renderableGpuViews[1];
- };
- #if ANIMATED_TEXTURE == 0
- # pragma anki reflect u_diffuseMap
- layout(set = MATERIAL_SET_LOCAL,
- binding = MATERIAL_BINDING_FIRST_NON_STANDARD_LOCAL) uniform ANKI_RP texture2D u_diffuseMap;
- #endif
- #if ANIMATED_TEXTURE == 1
- # pragma anki reflect u_diffuseMapArr
- layout(set = MATERIAL_SET_LOCAL,
- binding = MATERIAL_BINDING_FIRST_NON_STANDARD_LOCAL) uniform ANKI_RP texture2DArray u_diffuseMapArr;
- #endif
- #pragma anki start vert
- layout(location = VERTEX_ATTRIBUTE_ID_SCALE) in F32 in_scale;
- layout(location = VERTEX_ATTRIBUTE_ID_ALPHA) in F32 in_alpha;
- layout(location = 0) flat out ANKI_RP F32 out_alpha;
- layout(location = 1) out Vec2 out_uv;
- layout(location = 2) out Vec3 out_worldPos;
- void main()
- {
- out_uv = Vec2(gl_VertexID & 1, gl_VertexID >> 1);
- out_worldPos = u_ankiGlobals.m_cameraTransform * Vec4((out_uv - 0.5) * in_scale, 0.0, 0.0) + in_position;
- gl_Position = u_ankiGlobals.m_viewProjectionMatrix
- * Vec4(u_renderableGpuViews[0].m_worldTransform * Vec4(out_worldPos, 1.0), 1.0);
- out_alpha = in_alpha;
- }
- #pragma anki end
- #pragma anki start frag
- layout(location = 0) flat in ANKI_RP F32 in_alpha;
- layout(location = 1) in Vec2 in_uv;
- layout(location = 2) in Vec3 in_worldPos;
- void main()
- {
- const AnKiLocalUniforms localUniforms = loadAnKiLocalUniforms(u_localUniforms, 0u);
- #if ANIMATED_TEXTURE == 1
- ANKI_RP Vec4 texCol = readAnimatedTextureRgba(u_diffuseMapArr, u_globalSampler, localUniforms.m_animationPeriod,
- in_uv, u_clusteredShading.m_time);
- #else
- ANKI_RP Vec4 texCol = texture(u_diffuseMap, u_globalSampler, in_uv);
- #endif
- #if LIGHT
- texCol.rgb = computeLightColorLow(texCol.rgb, in_worldPos);
- #endif
- ANKI_RP Vec4 colScale = localUniforms.m_colorScale;
- colScale.a *= in_alpha;
- particleAlpha(texCol, colScale, localUniforms.m_colorBias);
- }
- #pragma anki end
|