summaryrefslogtreecommitdiffstats
path: root/src/extras/shaders/rhi
diff options
context:
space:
mode:
Diffstat (limited to 'src/extras/shaders/rhi')
-rw-r--r--src/extras/shaders/rhi/default.vert55
-rw-r--r--src/extras/shaders/rhi/defaultuniforms.inc30
-rw-r--r--src/extras/shaders/rhi/distancefieldtext.frag20
-rw-r--r--src/extras/shaders/rhi/distancefieldtext.vert21
-rw-r--r--src/extras/shaders/rhi/gooch.frag84
-rw-r--r--src/extras/shaders/rhi/gooch.vert22
-rw-r--r--src/extras/shaders/rhi/light.inc.frag16
-rw-r--r--src/extras/shaders/rhi/metalrough.inc.frag5
-rw-r--r--src/extras/shaders/rhi/morphphong.vert31
-rw-r--r--src/extras/shaders/rhi/pervertexcolor.frag147
-rw-r--r--src/extras/shaders/rhi/pervertexcolor.vert26
-rw-r--r--src/extras/shaders/rhi/skybox.frag32
-rw-r--r--src/extras/shaders/rhi/skybox.vert35
-rw-r--r--src/extras/shaders/rhi/unlittexture.frag10
-rw-r--r--src/extras/shaders/rhi/unlittexture.vert43
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()
{