diff options
Diffstat (limited to 'src/extras/shaders/rhi')
-rw-r--r-- | src/extras/shaders/rhi/default.vert | 55 | ||||
-rw-r--r-- | src/extras/shaders/rhi/defaultuniforms.inc | 30 | ||||
-rw-r--r-- | src/extras/shaders/rhi/distancefieldtext.frag | 20 | ||||
-rw-r--r-- | src/extras/shaders/rhi/distancefieldtext.vert | 21 | ||||
-rw-r--r-- | src/extras/shaders/rhi/gooch.frag | 84 | ||||
-rw-r--r-- | src/extras/shaders/rhi/gooch.vert | 22 | ||||
-rw-r--r-- | src/extras/shaders/rhi/light.inc.frag | 16 | ||||
-rw-r--r-- | src/extras/shaders/rhi/metalrough.inc.frag | 5 | ||||
-rw-r--r-- | src/extras/shaders/rhi/morphphong.vert | 31 | ||||
-rw-r--r-- | src/extras/shaders/rhi/pervertexcolor.frag | 147 | ||||
-rw-r--r-- | src/extras/shaders/rhi/pervertexcolor.vert | 26 | ||||
-rw-r--r-- | src/extras/shaders/rhi/skybox.frag | 32 | ||||
-rw-r--r-- | src/extras/shaders/rhi/skybox.vert | 35 | ||||
-rw-r--r-- | src/extras/shaders/rhi/unlittexture.frag | 10 | ||||
-rw-r--r-- | src/extras/shaders/rhi/unlittexture.vert | 43 |
15 files changed, 455 insertions, 122 deletions
diff --git a/src/extras/shaders/rhi/default.vert b/src/extras/shaders/rhi/default.vert index f97cd099d..5679d8681 100644 --- a/src/extras/shaders/rhi/default.vert +++ b/src/extras/shaders/rhi/default.vert @@ -48,23 +48,48 @@ ** ****************************************************************************/ -#version 150 core +#version 450 -in vec3 vertexPosition; -in vec3 vertexNormal; -in vec4 vertexTangent; -in vec2 vertexTexCoord; +layout(location = 0) in vec3 vertexPosition; +layout(location = 1) in vec3 vertexNormal; +layout(location = 2) in vec4 vertexTangent; +layout(location = 3) in vec2 vertexTexCoord; -out vec3 worldPosition; -out vec3 worldNormal; -out vec4 worldTangent; -out vec2 texCoord; +layout(location = 0) out vec3 worldPosition; +layout(location = 1) out vec3 worldNormal; +layout(location = 2) out vec4 worldTangent; +layout(location = 3) out vec2 texCoord; -uniform mat4 modelMatrix; -uniform mat3 modelNormalMatrix; -uniform mat4 modelViewProjection; +layout(std140, binding = 0) uniform qt3d_render_view_uniforms { + mat4 viewMatrix; + mat4 projectionMatrix; + mat4 viewProjectionMatrix; + mat4 inverseViewMatrix; + mat4 inverseProjectionMatrix; + mat4 inverseViewProjectionMatrix; + mat4 viewportMatrix; + mat4 inverseViewportMatrix; + vec4 textureTransformMatrix; + vec3 eyePosition; + float aspectRatio; + float gamma; + float exposure; + float time; +}; -uniform float texCoordScale; +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 modelViewProjection; + mat4 inverseModelViewProjectionMatrix; +}; + +layout(std140, binding = 2) uniform qt3d_extras_uniforms { + float texCoordScale; +}; void main() { @@ -74,8 +99,8 @@ void main() // Transform position, normal, and tangent to world space worldPosition = vec3(modelMatrix * vec4(vertexPosition, 1.0)); worldNormal = normalize(modelNormalMatrix * vertexNormal); - worldTangent.xyz = normalize(vec3(modelMatrix * vec4(vertexTangent.xyz, 0.0))); - worldTangent.w = vertexTangent.w; + vec3 wt = normalize(vec3(modelMatrix * vec4(vertexTangent.xyz, 0.0))); + worldTangent = vec4(wt, vertexTangent.w); // Calculate vertex position in clip coordinates gl_Position = modelViewProjection * vec4(vertexPosition, 1.0); diff --git a/src/extras/shaders/rhi/defaultuniforms.inc b/src/extras/shaders/rhi/defaultuniforms.inc new file mode 100644 index 000000000..ad2c51d50 --- /dev/null +++ b/src/extras/shaders/rhi/defaultuniforms.inc @@ -0,0 +1,30 @@ +layout(std140, binding = auto) uniform qt3d_render_view_uniforms { + mat4 viewMatrix; + mat4 projectionMatrix; + mat4 viewProjectionMatrix; + mat4 inverseViewMatrix; + mat4 inverseProjectionMatrix; + mat4 inverseViewProjectionMatrix; + mat4 viewportMatrix; + mat4 inverseViewportMatrix; + vec4 textureTransformMatrix; + vec3 eyePosition; + float aspectRatio; + float gamma; + float exposure; + float time; +}; + +layout(std140, binding = auto) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 mvp; + mat4 inverseModelViewProjectionMatrix; +}; + +layout(std140, binding = auto) uniform qt3d_extras_uniforms { + float texCoordScale; +}; diff --git a/src/extras/shaders/rhi/distancefieldtext.frag b/src/extras/shaders/rhi/distancefieldtext.frag index 998fa6e79..ec42f5056 100644 --- a/src/extras/shaders/rhi/distancefieldtext.frag +++ b/src/extras/shaders/rhi/distancefieldtext.frag @@ -1,15 +1,17 @@ -#version 150 core +#version 450 -uniform sampler2D distanceFieldTexture; -uniform float minAlpha; -uniform float maxAlpha; -uniform float textureSize; -uniform vec4 color; +layout(location = 0) in vec2 texCoord; +layout(location = 1) in float zValue; -in vec2 texCoord; -in float zValue; +layout(location = 0) out vec4 fragColor; -out vec4 fragColor; +layout(std140, binding = 2) uniform qt3d_custom_uniforms { + float minAlpha; + float maxAlpha; + float textureSize; + vec4 color; +}; +layout(binding = 3) uniform sampler2D distanceFieldTexture; void main() { diff --git a/src/extras/shaders/rhi/distancefieldtext.vert b/src/extras/shaders/rhi/distancefieldtext.vert index f6743001c..02efc898f 100644 --- a/src/extras/shaders/rhi/distancefieldtext.vert +++ b/src/extras/shaders/rhi/distancefieldtext.vert @@ -1,13 +1,20 @@ -#version 150 core +#version 450 -in vec3 vertexPosition; -in vec2 vertexTexCoord; +layout(location = 0) in vec3 vertexPosition; +layout(location = 1) in vec2 vertexTexCoord; -out vec2 texCoord; -out float zValue; +layout(location = 0) out vec2 texCoord; +layout(location = 1) out float zValue; -uniform mat4 modelView; -uniform mat4 mvp; +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 mvp; + mat4 inverseModelViewProjectionMatrix; +}; void main() { diff --git a/src/extras/shaders/rhi/gooch.frag b/src/extras/shaders/rhi/gooch.frag index 168a862f8..8a0a32f18 100644 --- a/src/extras/shaders/rhi/gooch.frag +++ b/src/extras/shaders/rhi/gooch.frag @@ -1,22 +1,70 @@ -#version 150 core +#version 450 + +layout(location = 0) in vec3 worldPosition; +layout(location = 1) in vec3 worldNormal; + +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform qt3d_render_view_uniforms { + mat4 viewMatrix; + mat4 projectionMatrix; + mat4 viewProjectionMatrix; + mat4 inverseViewMatrix; + mat4 inverseProjectionMatrix; + mat4 inverseViewProjectionMatrix; + mat4 viewportMatrix; + mat4 inverseViewportMatrix; + vec4 textureTransformMatrix; + vec3 eyePosition; + float aspectRatio; + float gamma; + float exposure; + float time; +}; + +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 mvp; + mat4 inverseModelViewProjectionMatrix; +}; + +layout(std140, binding = 2) uniform qt3d_custom_uniforms { + vec3 kd; // Diffuse reflectivity + vec3 ks; // Specular reflectivity + vec3 kblue; // Cool color + vec3 kyellow; // Warm color + float alpha; // Fraction of diffuse added to kblue + float beta; // Fraction of diffuse added to kyellow + float shininess; // Specular shininess factor +}; + +const int MAX_LIGHTS = 8; +const int TYPE_POINT = 0; +const int TYPE_DIRECTIONAL = 1; +const int TYPE_SPOT = 2; + +struct Light { + int type; + vec3 position; + vec3 color; + float intensity; + vec3 direction; + float constantAttenuation; + float linearAttenuation; + float quadraticAttenuation; + float cutOffAngle; +}; + +layout(std140, binding = 3) uniform qt3d_light_uniforms { + uniform Light lights[MAX_LIGHTS]; + uniform int lightCount; + uniform int envLightCount; +}; -// TODO: Replace with a struct -uniform vec3 kd; // Diffuse reflectivity -uniform vec3 ks; // Specular reflectivity -uniform vec3 kblue; // Cool color -uniform vec3 kyellow; // Warm color -uniform float alpha; // Fraction of diffuse added to kblue -uniform float beta; // Fraction of diffuse added to kyellow -uniform float shininess; // Specular shininess factor - -uniform vec3 eyePosition; - -in vec3 worldPosition; -in vec3 worldNormal; - -out vec4 fragColor; - -#pragma include light.inc.frag vec3 goochModel( const in vec3 pos, const in vec3 n ) { diff --git a/src/extras/shaders/rhi/gooch.vert b/src/extras/shaders/rhi/gooch.vert index 5230fb70e..0da69bce5 100644 --- a/src/extras/shaders/rhi/gooch.vert +++ b/src/extras/shaders/rhi/gooch.vert @@ -1,14 +1,20 @@ -#version 150 core +#version 450 -in vec3 vertexPosition; -in vec3 vertexNormal; +layout(location = 0) in vec3 vertexPosition; +layout(location = 1) in vec3 vertexNormal; -out vec3 worldPosition; -out vec3 worldNormal; +layout(location = 0) out vec3 worldPosition; +layout(location = 1) out vec3 worldNormal; -uniform mat4 modelMatrix; -uniform mat3 modelNormalMatrix; -uniform mat4 mvp; +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 mvp; + mat4 inverseModelViewProjectionMatrix; +}; void main() { diff --git a/src/extras/shaders/rhi/light.inc.frag b/src/extras/shaders/rhi/light.inc.frag index 861e1ba4a..8079ae8a3 100644 --- a/src/extras/shaders/rhi/light.inc.frag +++ b/src/extras/shaders/rhi/light.inc.frag @@ -1,24 +1,26 @@ +#pragma include defaultuniforms.inc + const int MAX_LIGHTS = 8; const int TYPE_POINT = 0; const int TYPE_DIRECTIONAL = 1; const int TYPE_SPOT = 2; + struct Light { - int type; vec3 position; - vec3 color; float intensity; - vec3 direction; + vec3 color; float constantAttenuation; + vec3 direction; float linearAttenuation; float quadraticAttenuation; float cutOffAngle; + int type; }; - layout(std140, binding = auto) uniform qt3d_light_uniforms { - uniform Light lights[MAX_LIGHTS]; - uniform int lightCount; - uniform int envLightCount; + Light lights[MAX_LIGHTS]; + int lightCount; + int envLightCount; }; // Pre-convolved environment maps diff --git a/src/extras/shaders/rhi/metalrough.inc.frag b/src/extras/shaders/rhi/metalrough.inc.frag index cf85f3b22..817e1192c 100644 --- a/src/extras/shaders/rhi/metalrough.inc.frag +++ b/src/extras/shaders/rhi/metalrough.inc.frag @@ -48,11 +48,6 @@ ** ****************************************************************************/ -// Exposure correction -uniform float exposure = 0.0; -// Gamma correction -uniform float gamma = 2.2; - #pragma include light.inc.frag int mipLevelCount(const in samplerCube cube) diff --git a/src/extras/shaders/rhi/morphphong.vert b/src/extras/shaders/rhi/morphphong.vert index 7a8bdd097..826145b20 100644 --- a/src/extras/shaders/rhi/morphphong.vert +++ b/src/extras/shaders/rhi/morphphong.vert @@ -1,17 +1,26 @@ -#version 150 core +#version 450 -in vec3 vertexPosition; -in vec3 vertexNormal; -in vec3 vertexPositionTarget; -in vec3 vertexNormalTarget; +layout(location = 0) in vec3 vertexPosition; +layout(location = 1) in vec3 vertexNormal; +layout(location = 2) in vec3 vertexPositionTarget; +layout(location = 3) in vec3 vertexNormalTarget; -out vec3 worldPosition; -out vec3 worldNormal; +layout(location = 0) out vec3 worldPosition; +layout(location = 1) out vec3 worldNormal; -uniform mat4 modelMatrix; -uniform mat3 modelNormalMatrix; -uniform mat4 modelViewProjection; -uniform float interpolator; +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 modelViewProjection; + mat4 inverseModelViewProjectionMatrix; +}; + +layout(std140, binding = 3) uniform qt3d_morph_uniforms { + float interpolator; +}; void main() { diff --git a/src/extras/shaders/rhi/pervertexcolor.frag b/src/extras/shaders/rhi/pervertexcolor.frag index 40fc066d6..da3ea149e 100644 --- a/src/extras/shaders/rhi/pervertexcolor.frag +++ b/src/extras/shaders/rhi/pervertexcolor.frag @@ -1,14 +1,147 @@ -#version 150 core +#version 450 -in vec3 worldPosition; -in vec3 worldNormal; -in vec4 color; +layout(location = 0) in vec3 worldPosition; +layout(location = 1) in vec3 worldNormal; +layout(location = 2) in vec4 color; -out vec4 fragColor; +layout(location = 0) out vec4 fragColor; -uniform vec3 eyePosition; +layout(std140, binding = 0) uniform qt3d_render_view_uniforms { + mat4 viewMatrix; + mat4 projectionMatrix; + mat4 viewProjectionMatrix; + mat4 inverseViewMatrix; + mat4 inverseProjectionMatrix; + mat4 inverseViewProjectionMatrix; + mat4 viewportMatrix; + mat4 inverseViewportMatrix; + vec4 textureTransformMatrix; + vec3 eyePosition; + float aspectRatio; + float gamma; + float exposure; + float time; +}; -#pragma include phong.inc.frag +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 mvp; + mat4 inverseModelViewProjectionMatrix; +}; + +const int MAX_LIGHTS = 8; +const int TYPE_POINT = 0; +const int TYPE_DIRECTIONAL = 1; +const int TYPE_SPOT = 2; + +struct Light { + int type; + vec3 position; + vec3 color; + float intensity; + vec3 direction; + float constantAttenuation; + float linearAttenuation; + float quadraticAttenuation; + float cutOffAngle; +}; + +layout(std140, binding = 2) uniform qt3d_light_uniforms { + uniform Light lights[MAX_LIGHTS]; + uniform int lightCount; + uniform int envLightCount; +}; + +void adsModel(const in vec3 worldPos, + const in vec3 worldNormal, + const in vec3 worldView, + const in float shininess, + out vec3 diffuseColor, + out vec3 specularColor) +{ + diffuseColor = vec3(0.0); + specularColor = vec3(0.0); + + // We perform all work in world space + vec3 n = normalize(worldNormal); + vec3 s = vec3(0.0); + + for (int i = 0; i < lightCount; ++i) { + float att = 1.0; + float sDotN = 0.0; + + if (lights[i].type != TYPE_DIRECTIONAL) { + // Point and Spot lights + + // Light position is already in world space + vec3 sUnnormalized = lights[i].position - worldPos; + s = normalize(sUnnormalized); // Light direction + + // Calculate the attenuation factor + sDotN = dot(s, n); + if (sDotN > 0.0) { + if (lights[i].constantAttenuation != 0.0 + || lights[i].linearAttenuation != 0.0 + || lights[i].quadraticAttenuation != 0.0) { + float dist = length(sUnnormalized); + att = 1.0 / (lights[i].constantAttenuation + + lights[i].linearAttenuation * dist + + lights[i].quadraticAttenuation * dist * dist); + } + + // The light direction is in world space already + if (lights[i].type == TYPE_SPOT) { + // Check if fragment is inside or outside of the spot light cone + if (degrees(acos(dot(-s, lights[i].direction))) > lights[i].cutOffAngle) + sDotN = 0.0; + } + } + } else { + // Directional lights + // The light direction is in world space already + s = normalize(-lights[i].direction); + sDotN = dot(s, n); + } + + // Calculate the diffuse factor + float diffuse = max(sDotN, 0.0); + + // Calculate the specular factor + float specular = 0.0; + if (diffuse > 0.0 && shininess > 0.0) { + float normFactor = (shininess + 2.0) / 2.0; + vec3 r = reflect(-s, n); // Reflection direction in world space + specular = normFactor * pow(max(dot(r, worldView), 0.0), shininess); + } + + // Accumulate the diffuse and specular contributions + diffuseColor += att * lights[i].intensity * diffuse * lights[i].color; + specularColor += att * lights[i].intensity * specular * lights[i].color; + } +} + +vec4 phongFunction(const in vec4 ambient, + const in vec4 diffuse, + const in vec4 specular, + const in float shininess, + const in vec3 worldPosition, + const in vec3 worldView, + const in vec3 worldNormal) +{ + // Calculate the lighting model, keeping the specular component separate + vec3 diffuseColor, specularColor; + adsModel(worldPosition, worldNormal, worldView, shininess, diffuseColor, specularColor); + + // Combine spec with ambient+diffuse for final fragment color + vec3 color = (ambient.rgb + diffuseColor) * diffuse.rgb + + specularColor * specular.rgb; + + return vec4(color, diffuse.a); +} void main() { diff --git a/src/extras/shaders/rhi/pervertexcolor.vert b/src/extras/shaders/rhi/pervertexcolor.vert index 1d721e945..3ae1c9fb0 100644 --- a/src/extras/shaders/rhi/pervertexcolor.vert +++ b/src/extras/shaders/rhi/pervertexcolor.vert @@ -1,16 +1,22 @@ -#version 150 core +#version 450 -in vec3 vertexPosition; -in vec3 vertexNormal; -in vec4 vertexColor; +layout(location = 0) in vec3 vertexPosition; +layout(location = 1) in vec3 vertexNormal; +layout(location = 2) in vec4 vertexColor; -out vec3 worldPosition; -out vec3 worldNormal; -out vec4 color; +layout(location = 0) out vec3 worldPosition; +layout(location = 1) out vec3 worldNormal; +layout(location = 2) out vec4 color; -uniform mat4 modelMatrix; -uniform mat3 modelNormalMatrix; -uniform mat4 mvp; +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 mvp; + mat4 inverseModelViewProjectionMatrix; +}; void main() { diff --git a/src/extras/shaders/rhi/skybox.frag b/src/extras/shaders/rhi/skybox.frag index ceb13b628..649894b15 100644 --- a/src/extras/shaders/rhi/skybox.frag +++ b/src/extras/shaders/rhi/skybox.frag @@ -1,13 +1,33 @@ -#version 330 +#version 450 + +layout(location = 0) in vec3 texCoord0; +layout(location = 0) out vec4 fragColor; -in vec3 texCoord0; -out vec4 fragColor; -uniform samplerCube skyboxTexture; // Gamma correction -uniform float gamma = 2.2; -uniform float gammaStrength; +layout(std140, binding = 0) uniform qt3d_render_view_uniforms { + mat4 viewMatrix; + mat4 projectionMatrix; + mat4 viewProjectionMatrix; + mat4 inverseViewMatrix; + mat4 inverseProjectionMatrix; + mat4 inverseViewProjectionMatrix; + mat4 viewportMatrix; + mat4 inverseViewportMatrix; + vec4 textureTransformMatrix; + vec3 eyePosition; + float aspectRatio; + float gamma; + float exposure; + float time; +}; + +layout(std140, binding = 2) uniform qt3d_morph_uniforms { + float gammaStrength; +}; + +layout(binding = 3) uniform samplerCube skyboxTexture; vec3 gammaCorrect(const in vec3 color) { diff --git a/src/extras/shaders/rhi/skybox.vert b/src/extras/shaders/rhi/skybox.vert index cac49893a..8f3de6f62 100644 --- a/src/extras/shaders/rhi/skybox.vert +++ b/src/extras/shaders/rhi/skybox.vert @@ -1,11 +1,34 @@ -#version 330 +#version 450 -in vec3 vertexPosition; -out vec3 texCoord0; +layout(location = 0) in vec3 vertexPosition; +layout(location = 0) out vec3 texCoord0; -uniform mat4 modelMatrix; -uniform mat4 viewMatrix; -uniform mat4 projectionMatrix; +layout(std140, binding = 0) uniform qt3d_render_view_uniforms { + mat4 viewMatrix; + mat4 projectionMatrix; + mat4 viewProjectionMatrix; + mat4 inverseViewMatrix; + mat4 inverseProjectionMatrix; + mat4 inverseViewProjectionMatrix; + mat4 viewportMatrix; + mat4 inverseViewportMatrix; + vec4 textureTransformMatrix; + vec3 eyePosition; + float aspectRatio; + float gamma; + float exposure; + float time; +}; + +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 modelViewProjection; + mat4 inverseModelViewProjectionMatrix; +}; void main() { diff --git a/src/extras/shaders/rhi/unlittexture.frag b/src/extras/shaders/rhi/unlittexture.frag index 8abbeee8f..e2b2c8fe2 100644 --- a/src/extras/shaders/rhi/unlittexture.frag +++ b/src/extras/shaders/rhi/unlittexture.frag @@ -1,11 +1,11 @@ -#version 150 core +#version 450 -uniform sampler2D diffuseTexture; +layout(location = 0) in vec3 position; +layout(location = 1) in vec2 texCoord; -in vec3 position; -in vec2 texCoord; +layout(location = 0) out vec4 fragColor; -out vec4 fragColor; +layout(binding = 3) uniform sampler2D diffuseTexture; void main() { diff --git a/src/extras/shaders/rhi/unlittexture.vert b/src/extras/shaders/rhi/unlittexture.vert index 7e245bd7f..08f06e817 100644 --- a/src/extras/shaders/rhi/unlittexture.vert +++ b/src/extras/shaders/rhi/unlittexture.vert @@ -1,14 +1,41 @@ -#version 150 core +#version 450 -in vec3 vertexPosition; -in vec2 vertexTexCoord; +layout(location = 0) in vec3 vertexPosition; +layout(location = 1) in vec2 vertexTexCoord; -out vec3 position; -out vec2 texCoord; +layout(location = 0) out vec3 position; +layout(location = 1) out vec2 texCoord; -uniform mat4 modelView; -uniform mat4 mvp; -uniform mat3 texCoordTransform; +layout(std140, binding = 0) uniform qt3d_render_view_uniforms { + mat4 viewMatrix; + mat4 projectionMatrix; + mat4 viewProjectionMatrix; + mat4 inverseViewMatrix; + mat4 inverseProjectionMatrix; + mat4 inverseViewProjectionMatrix; + mat4 viewportMatrix; + mat4 inverseViewportMatrix; + vec4 textureTransformMatrix; + vec3 eyePosition; + float aspectRatio; + float gamma; + float exposure; + float time; +}; + +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelView; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 mvp; + mat4 inverseModelViewProjectionMatrix; +}; + +layout(std140, binding = 2) uniform qt3d_custom_uniforms { + mat3 texCoordTransform; +}; void main() { |