0029074: Visualization, TKOpenGl - support Geometry Shader definition
[occt.git] / tests / v3d / glsl / tess1
1 puts "========"
2 puts "0029074: Visualization, TKOpenGl - support of Tessellation Shaders"
3 puts "========"
4
5 pload MODELING VISUALIZATION
6
7 set aShaderVert "
8 out vec4 VertColor;
9 void main() {
10   VertColor = occColor;
11   gl_Position = occVertex;
12 }"
13
14 set aShaderTessCtrl "
15 layout(vertices = 3) out;
16 void main() {
17   if (gl_InvocationID == 0) {
18     gl_TessLevelInner\[0\] = 7.0;
19     gl_TessLevelOuter\[0\] = 2.0;
20     gl_TessLevelOuter\[1\] = 3.0;
21     gl_TessLevelOuter\[2\] = 7.0;
22   }
23   gl_out\[gl_InvocationID\].gl_Position = gl_in\[gl_InvocationID\].gl_Position;
24 }"
25
26 set aShaderTessEval "
27 layout(triangles, equal_spacing, ccw) in;
28 void main() {
29   vec3 aPnt0 = gl_TessCoord.x * gl_in\[0\].gl_Position.xyz;
30   vec3 aPnt1 = gl_TessCoord.y * gl_in\[1\].gl_Position.xyz;
31   vec3 aPnt2 = gl_TessCoord.z * gl_in\[2\].gl_Position.xyz;
32   gl_Position = vec4 (aPnt0 + aPnt1 + aPnt2, 1.0);
33 }"
34
35 set aShaderGeom "
36 layout(triangles) in;
37 layout(triangle_strip, max_vertices=3) out;
38 void main() {
39   mat4 aMat = occProjectionMatrix * occWorldViewMatrix * occModelWorldMatrix;
40   vec3 aCenter = vec3 (0.0, 0.0, 0.0);
41   for (int aTriVertIter = 0; aTriVertIter < 3; ++aTriVertIter) {
42     aCenter += gl_in\[aTriVertIter\].gl_Position.xyz;
43   }
44   aCenter /= 3.0;
45   for (int aTriVertIter = 0; aTriVertIter < 3; ++aTriVertIter) {
46     vec3 aVec = gl_in\[aTriVertIter\].gl_Position.xyz - aCenter;
47     vec3 aVertRes = aCenter + normalize (aVec) * length (aVec) * 0.75;
48     gl_Position = aMat * vec4 (aVertRes, 1.0);
49     EmitVertex();
50   }
51   EndPrimitive();
52 }"
53
54 set aShaderFrag "
55 void main() {
56   occFragColor = vec4(1.0, 0.0, 0.0, 1.0);
57 }"
58
59 # draw a box
60 box b 1 2 3
61 explode b F
62
63 vcaps -core
64 vclear
65 vinit View1
66 vaxo
67 vdisplay -dispMode 1 -mutable b_1
68 vfit
69 vrotate 0.2 0.0 0.0
70
71 # take snapshot with built-in shader
72 vdump $::imagedir/${::casename}_normal.png
73
74 vshaderprog b_1 -vert $aShaderVert -tessCtrl $aShaderTessCtrl -tessEval $aShaderTessEval -geom $aShaderGeom -frag $aShaderFrag
75 vdump $::imagedir/${::casename}_tess.png