--- /dev/null
+puts "========"
+puts "0029074: Visualization, TKOpenGl - support of Tessellation Shaders"
+puts "========"
+
+pload MODELING VISUALIZATION
+
+set aShaderVert "
+out vec4 VertColor;
+void main() {
+ VertColor = occColor;
+ gl_Position = occVertex;
+}"
+
+set aShaderTessCtrl "
+layout(vertices = 3) out;
+void main() {
+ if (gl_InvocationID == 0) {
+ gl_TessLevelInner\[0\] = 7.0;
+ gl_TessLevelOuter\[0\] = 2.0;
+ gl_TessLevelOuter\[1\] = 3.0;
+ gl_TessLevelOuter\[2\] = 7.0;
+ }
+ gl_out\[gl_InvocationID\].gl_Position = gl_in\[gl_InvocationID\].gl_Position;
+}"
+
+set aShaderTessEval "
+layout(triangles, equal_spacing, ccw) in;
+void main() {
+ vec3 aPnt0 = gl_TessCoord.x * gl_in\[0\].gl_Position.xyz;
+ vec3 aPnt1 = gl_TessCoord.y * gl_in\[1\].gl_Position.xyz;
+ vec3 aPnt2 = gl_TessCoord.z * gl_in\[2\].gl_Position.xyz;
+ gl_Position = vec4 (aPnt0 + aPnt1 + aPnt2, 1.0);
+}"
+
+set aShaderGeom "
+layout(triangles) in;
+layout(triangle_strip, max_vertices=3) out;
+void main() {
+ mat4 aMat = occProjectionMatrix * occWorldViewMatrix * occModelWorldMatrix;
+ vec3 aCenter = vec3 (0.0, 0.0, 0.0);
+ for (int aTriVertIter = 0; aTriVertIter < 3; ++aTriVertIter) {
+ aCenter += gl_in\[aTriVertIter\].gl_Position.xyz;
+ }
+ aCenter /= 3.0;
+ for (int aTriVertIter = 0; aTriVertIter < 3; ++aTriVertIter) {
+ vec3 aVec = gl_in\[aTriVertIter\].gl_Position.xyz - aCenter;
+ vec3 aVertRes = aCenter + normalize (aVec) * length (aVec) * 0.75;
+ gl_Position = aMat * vec4 (aVertRes, 1.0);
+ EmitVertex();
+ }
+ EndPrimitive();
+}"
+
+set aShaderFrag "
+void main() {
+ occFragColor = vec4(1.0, 0.0, 0.0, 1.0);
+}"
+
+# draw a box
+box b 1 2 3
+explode b F
+
+vcaps -core
+vclear
+vinit View1
+if { [string match "OpenGL ES 2.0*" [vglinfo VERSION]] || [string match "OpenGL ES 3.0*" [vglinfo VERSION]] } {
+ puts "Skipping test case: OpenGL ES 3.2+ is required"
+ return
+}
+vaxo
+vdisplay -dispMode 1 -mutable b_1
+vfit
+vrotate 0.2 0.0 0.0
+
+# take snapshot with built-in shader
+vdump $::imagedir/${::casename}_normal.png
+
+vshaderprog b_1 -vert $aShaderVert -tessCtrl $aShaderTessCtrl -tessEval $aShaderTessEval -geom $aShaderGeom -frag $aShaderFrag
+vdump $::imagedir/${::casename}_tess.png