mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-05 18:16:23 +03:00
Removed testgrids 'bugs/vis' and '3rdparty'; tests have been redistributed across other grids. Moved testgrid 'v3d/ivtk' into dedicated 'vtk/ivtk'. Added testgrid 'vselect' dedicated to 3D viewer picking/selection functionality and filled with tests from 'v3d/vertex', 'v3d/face' and similar groups. Added testgrid 'opengl' dedicated to OpenGL driver low-level functionality (GLSL programs and similar) and filled with tests from 'v3d/glsl', 'v3d/raytrace', '3rdparty/fonts', 'bugs/vis' (portion) and similar. Added testgrid 'opengles3' dedicated to OpenGL ES 3.0 driver low-level functionality and reusing tests from 'opengl' testgrid. Subgroup 'opengles3/raytrace' is disabled on Windows, as Ray-Tracing currently requires OpenGL ES 3.2. while ANGLE library implements only OpenGL ES 3.0. Added testgrid 'opengles2' dedicated to OpenGL ES 2.0 driver low-level functionality and reusing a limited subset of passing tests from 'opengl' testgrid. Currently testgrid is activated only on Windows platform when using ANGLE library (properietary OpenGL ES drivers do not allow creation of restricted 2.0 context). Test cases have been cleaned out to put bug description into log, to properly load necessary plugins and to explicitly dump viewer.
60 lines
1.5 KiB
Plaintext
60 lines
1.5 KiB
Plaintext
puts "========"
|
|
puts "0029074: Visualization, TKOpenGl - support Geometry Shader definition"
|
|
puts "========"
|
|
|
|
pload MODELING VISUALIZATION
|
|
|
|
set aShaderVert "
|
|
out vec4 VertColor;
|
|
void main() {
|
|
VertColor = occColor;
|
|
gl_Position = occVertex;
|
|
}"
|
|
|
|
# define a Geometry shader drawing shrinked triangles
|
|
set aShaderGeom "
|
|
layout(triangles) in;
|
|
layout(triangle_strip, max_vertices=3) out;
|
|
in vec4 VertColor\[3\];
|
|
out vec4 Color;
|
|
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);
|
|
Color = VertColor\[aTriVertIter\] * 2.0;
|
|
EmitVertex();
|
|
}
|
|
EndPrimitive();
|
|
}"
|
|
|
|
set aShaderFrag "
|
|
in vec4 Color;
|
|
void main() {
|
|
occFragColor = Color;
|
|
}"
|
|
|
|
# draw a box
|
|
box b 1 2 3
|
|
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
|
|
vfit
|
|
vrotate 0.2 0.0 0.0
|
|
vdump $::imagedir/${::casename}_normal.png
|
|
|
|
vshaderprog b -vert $aShaderVert -geom $aShaderGeom -frag $aShaderFrag
|
|
vdump $::imagedir/${::casename}_geom.png
|