diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2020-09-18 11:47:24 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2020-10-19 15:30:59 +0200 |
commit | 9112ad845927b4c1ae5ea9e45576cc4cf85207d7 (patch) | |
tree | fbe4279c1fc3e9d51cc0a85d005a972be86bf83b /examples | |
parent | c4be23758f05719584f2bc4c676fda81c57a9d63 (diff) |
Port instanced-arrays-qml to RHI
Change-Id: I272cfa7688260f4ffb6b8ff49012188f717f62f4
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/qt3d/instanced-arrays-qml/CMakeLists.txt | 6 | ||||
-rw-r--r-- | examples/qt3d/instanced-arrays-qml/gl3/instanced.frag (renamed from examples/qt3d/instanced-arrays-qml/instanced.frag) | 0 | ||||
-rw-r--r-- | examples/qt3d/instanced-arrays-qml/gl3/instanced.vert (renamed from examples/qt3d/instanced-arrays-qml/instanced.vert) | 0 | ||||
-rw-r--r-- | examples/qt3d/instanced-arrays-qml/gl45/instanced.frag | 43 | ||||
-rw-r--r-- | examples/qt3d/instanced-arrays-qml/gl45/instanced.vert | 57 | ||||
-rw-r--r-- | examples/qt3d/instanced-arrays-qml/instanced-arrays-qml.qrc | 6 | ||||
-rw-r--r-- | examples/qt3d/instanced-arrays-qml/main.qml | 43 |
7 files changed, 138 insertions, 17 deletions
diff --git a/examples/qt3d/instanced-arrays-qml/CMakeLists.txt b/examples/qt3d/instanced-arrays-qml/CMakeLists.txt index 557284931..2d89f261e 100644 --- a/examples/qt3d/instanced-arrays-qml/CMakeLists.txt +++ b/examples/qt3d/instanced-arrays-qml/CMakeLists.txt @@ -44,8 +44,10 @@ target_link_libraries(instanced-arrays-qml PUBLIC # Resources: set(instanced-arrays-qml_resource_files - "instanced.frag" - "instanced.vert" + "gl3/instanced.frag" + "gl3/instanced.vert" + "gl45/instanced.frag" + "gl45/instanced.vert" "main.qml" ) diff --git a/examples/qt3d/instanced-arrays-qml/instanced.frag b/examples/qt3d/instanced-arrays-qml/gl3/instanced.frag index cc41fee8e..cc41fee8e 100644 --- a/examples/qt3d/instanced-arrays-qml/instanced.frag +++ b/examples/qt3d/instanced-arrays-qml/gl3/instanced.frag diff --git a/examples/qt3d/instanced-arrays-qml/instanced.vert b/examples/qt3d/instanced-arrays-qml/gl3/instanced.vert index 6cbab9d40..6cbab9d40 100644 --- a/examples/qt3d/instanced-arrays-qml/instanced.vert +++ b/examples/qt3d/instanced-arrays-qml/gl3/instanced.vert diff --git a/examples/qt3d/instanced-arrays-qml/gl45/instanced.frag b/examples/qt3d/instanced-arrays-qml/gl45/instanced.frag new file mode 100644 index 000000000..cef57acc8 --- /dev/null +++ b/examples/qt3d/instanced-arrays-qml/gl45/instanced.frag @@ -0,0 +1,43 @@ +#version 450 core + +layout(location = 0) in vec3 position; +layout(location = 1) in vec3 normal; +layout(location = 2) in vec3 kd; // Diffuse reflectivity + +const vec4 lightPosition = vec4( 0.0, 0.0, 0.0, 1.0 ); +const vec3 lightIntensity = vec3( 1.0, 1.0, 1.0 ); + +const vec3 ka = vec3(0.1); // Ambient reflectivity +const vec3 ks = vec3( 1.0, 1.0, 1.0 ); // Specular reflectivity +const float shininess = 150.0; // Specular shininess factor + +layout(location = 0) out vec4 fragColor; + +vec3 adsModel( const in vec3 pos, const in vec3 n ) +{ + // Calculate the vector from the light to the fragment + vec3 s = normalize( vec3( lightPosition ) - pos ); + + // Calculate the vector from the fragment to the eye position + // (origin since this is in "eye" or "camera" space) + vec3 v = normalize( -pos ); + + // Reflect the light beam using the normal at this fragment + vec3 r = reflect( -s, n ); + + // Calculate the diffuse component + float diffuse = max( dot( s, n ), 0.0 ); + + // Calculate the specular component + float specular = 0.0; + if ( dot( s, n ) > 0.0 ) + specular = pow( max( dot( r, v ), 0.0 ), shininess ); + + // Combine the ambient, diffuse and specular contributions + return lightIntensity * ( ka + kd * diffuse + ks * specular ); +} + +void main() +{ + fragColor = vec4( adsModel( position, normalize( normal ) ), 1.0 ); +} diff --git a/examples/qt3d/instanced-arrays-qml/gl45/instanced.vert b/examples/qt3d/instanced-arrays-qml/gl45/instanced.vert new file mode 100644 index 000000000..bf3ba165b --- /dev/null +++ b/examples/qt3d/instanced-arrays-qml/gl45/instanced.vert @@ -0,0 +1,57 @@ +#version 450 core + +layout(location = 0) in vec3 vertexPosition; +layout(location = 1) in vec3 vertexNormal; +layout(location = 2) in vec3 pos; + +layout(location = 0) out vec3 position; +layout(location = 1) out vec3 normal; +layout(location = 2) out vec3 kd; + +layout(std140, binding = 1) uniform qt3d_command_uniforms { + mat4 modelMatrix; + mat4 inverseModelMatrix; + mat4 modelViewMatrix; + mat3 modelNormalMatrix; + mat4 inverseModelViewMatrix; + mat4 modelViewProjection; + mat4 inverseModelViewProjectionMatrix; +}; + +// Calculate RGB triplet from HSV +vec3 hsvToRGB( float h, float s, float v ) +{ + if ( s <= 0.0 ) + return vec3( v ); + + h = h * 6.0; + float c = v * s; + float x = ( 1.0 - abs( ( mod( h, 2 ) - 1 ) ) ) * c; + float m = v - c; + float r = 0.0; + float g = 0.0; + float b = 0.0; + + if ( h < 1.0 ) { r = c; g = x; b = 0.0;} + else if ( h < 2.0 ) { r = x; g = c; b = 0.0; } + else if ( h < 3.0 ) { r = 0.0; g = c; b = x; } + else if ( h < 4.0 ) { r = 0.0; g = x; b = c; } + else if ( h < 5.0 ) { r = x; g = 0.0; b = c; } + else { r = c; g = 0.0; b = x; } + + return vec3( r + m, g + m, b + m ); +} + +void main() +{ + normal = normalize( modelNormalMatrix * vertexNormal ); + + vec3 offsetPos = vertexPosition + pos; + position = vec3(modelViewMatrix * vec4(offsetPos, 1.0)); + + float hue = fract( pos.x / 10.0 ); + float saturation = fract( pos.z / 20.0 ); + kd = hsvToRGB( hue, saturation, 1.0 ); + + gl_Position = modelViewProjection * vec4(offsetPos, 1.0); +} diff --git a/examples/qt3d/instanced-arrays-qml/instanced-arrays-qml.qrc b/examples/qt3d/instanced-arrays-qml/instanced-arrays-qml.qrc index 3e4910f7a..88babaf52 100644 --- a/examples/qt3d/instanced-arrays-qml/instanced-arrays-qml.qrc +++ b/examples/qt3d/instanced-arrays-qml/instanced-arrays-qml.qrc @@ -1,7 +1,9 @@ <RCC> <qresource prefix="/"> <file>main.qml</file> - <file>instanced.frag</file> - <file>instanced.vert</file> + <file>gl3/instanced.frag</file> + <file>gl3/instanced.vert</file> + <file>gl45/instanced.frag</file> + <file>gl45/instanced.vert</file> </qresource> </RCC> diff --git a/examples/qt3d/instanced-arrays-qml/main.qml b/examples/qt3d/instanced-arrays-qml/main.qml index 91558fc42..a94654a88 100644 --- a/examples/qt3d/instanced-arrays-qml/main.qml +++ b/examples/qt3d/instanced-arrays-qml/main.qml @@ -85,21 +85,38 @@ Entity { Material { id: instancedPhongMaterial effect: Effect { - techniques: Technique { - graphicsApiFilter { - api: GraphicsApiFilter.OpenGL - profile: GraphicsApiFilter.CoreProfile - minorVersion: 2 - majorVersion: 3 - } - filterKeys: FilterKey { name: "renderingStyle"; value: "forward" } - renderPasses: RenderPass { - shaderProgram: ShaderProgram { - vertexShaderCode: loadSource("qrc:/instanced.vert") - fragmentShaderCode: loadSource("qrc:/instanced.frag") + techniques: [ + Technique { + graphicsApiFilter { + api: GraphicsApiFilter.OpenGL + profile: GraphicsApiFilter.CoreProfile + minorVersion: 2 + majorVersion: 3 + } + filterKeys: FilterKey { name: "renderingStyle"; value: "forward" } + renderPasses: RenderPass { + shaderProgram: ShaderProgram { + vertexShaderCode: loadSource("qrc:/gl3/instanced.vert") + fragmentShaderCode: loadSource("qrc:/gl3/instanced.frag") + } + } + }, + Technique { + graphicsApiFilter { + api: GraphicsApiFilter.RHI + profile: GraphicsApiFilter.NoProfile + minorVersion: 1 + majorVersion: 0 + } + filterKeys: FilterKey { name: "renderingStyle"; value: "forward" } + renderPasses: RenderPass { + shaderProgram: ShaderProgram { + vertexShaderCode: loadSource("qrc:/gl45/instanced.vert") + fragmentShaderCode: loadSource("qrc:/gl45/instanced.frag") + } } } - } + ] } } |