3float cell_edge_factor(in vec2 bary) {
 
    4    return edge_factor1(1.0-(1.0 - bary.x)*(1.0 - bary.y));
 
    7float edge_factor(in vec4 bary) {
 
    8    float e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12;
 
   10    if(glup_primitive == GLUP_TRIANGLES) {
 
   11        return edge_factor3(bary.xyz);
 
   12    } 
else if(glup_primitive == GLUP_QUADS) {
 
   13        return edge_factor4(bary);
 
   14    } 
else if(glup_primitive == GLUP_TETRAHEDRA) {
 
   15        e1 = cell_edge_factor(bary.xy);
 
   16        e2 = cell_edge_factor(bary.xz);
 
   17        e3 = cell_edge_factor(bary.xw);
 
   18        e4 = cell_edge_factor(bary.yz);
 
   19        e5 = cell_edge_factor(bary.yw);
 
   20        e6 = cell_edge_factor(bary.zw);
 
   21        return min3(min(e1,e2),min(e3,e4),min(e5,e6));
 
   22    } 
else if(glup_primitive == GLUP_HEXAHEDRA) {
 
   25        e1 = cell_edge_factor(
vec2(u.x,u.y));
 
   26        e2 = cell_edge_factor(
vec2(u.x,u.z));
 
   27        e3 = cell_edge_factor(
vec2(u.x,U.y));
 
   28        e4 = cell_edge_factor(
vec2(u.x,U.z));
 
   29        e5 = cell_edge_factor(
vec2(U.x,u.y));
 
   30        e6 = cell_edge_factor(
vec2(U.x,u.z));
 
   31        e7 = cell_edge_factor(
vec2(U.x,U.y));
 
   32        e8 = cell_edge_factor(
vec2(U.x,U.z));
 
   33        e9  = cell_edge_factor(
vec2(u.y,u.z));
 
   34        e10 = cell_edge_factor(
vec2(u.y,U.z));
 
   35        e11 = cell_edge_factor(
vec2(U.y,u.z));
 
   36        e12 = cell_edge_factor(
vec2(U.y,U.z));
 
   37        r1 = min4(e1,e2,e3,e4);
 
   38        r2 = min4(e5,e6,e7,e8);
 
   39        r3 = min4(e9,e10,e11,e12);
 
   40        return min3(r1,r2,r3);
 
   41    } 
else if(glup_primitive == GLUP_PRISMS) {
 
   42        vec4 bary2 = 
vec4(bary.x, bary.y, bary.z, 1.0 - bary.w);
 
   43        e1 = cell_edge_factor(bary.xw);
 
   44        e2 = cell_edge_factor(bary.yw);
 
   45        e3 = cell_edge_factor(bary.zw);
 
   46        e4 = cell_edge_factor(bary2.xw);
 
   47        e5 = cell_edge_factor(bary2.yw);
 
   48        e6 = cell_edge_factor(bary2.zw);
 
   49        e7 = cell_edge_factor(bary.xy);
 
   50        e8 = cell_edge_factor(bary.yz);
 
   51        e9 = cell_edge_factor(bary.zx);
 
   52        return min(min3(e7,e8,e9),
 
   54                        min(e3,e4),min(e5,e6))
 
   60vec4 glup_draw_mesh(in vec4 color, in vec4 mesh_tex_coord) {
 
   61#ifdef GLUP_NO_MESH_TEX_COORDS 
   65        GLUP.mesh_color, color, edge_factor(mesh_tex_coord)
 
   74    in highp 
int primitive_id,
 
   75    in vec4 mesh_tex_coord
 
   77    if(glupIsEnabled(GLUP_PICKING)) {
 
   78        return glup_picking(primitive_id);
 
   81    if(glupIsEnabled(GLUP_VERTEX_COLORS)) {
 
   84        result = gl_FrontFacing ? GLUP.front_color : GLUP.back_color;
 
   86    if(glupIsEnabled(GLUP_TEXTURING) && !glupIsEnabled(GLUP_NORMAL_MAPPING)) {
 
   87        result = glup_texturing(result, tex_coord);
 
   89    if(glupIsEnabled(GLUP_LIGHTING)) {
 
   90        result = glup_lighting(result, normal);
 
   93        glupIsEnabled(GLUP_DRAW_MESH) && (
 
   94            (glup_primitive_dimension == 2) ||
 
   95            !glupIsEnabled(GLUP_CLIPPING) ||
 
   96            GLUP.clipping_mode != GLUP_CLIP_SLICE_CELLS
 
   99        result = glup_draw_mesh(result, mesh_tex_coord);
 
vecng< 3, Numeric::float64 > vec3
Represents points and vectors in 3d.
vecng< 4, Numeric::float64 > vec4
Represents points and vectors in 4d.
vecng< 2, Numeric::float64 > vec2
Represents points and vectors in 2d.