static void clip(double x1,double y1,double z1,double u1,double v1,double w1, double x2,double y2,double z2,double u2,double v2,double w2, double x3,double y3,double z3,double u3,double v3,double w3) { //TODO: FIX CLIPPING ERROR int w1N = w1 < pseudoNear, w2N = w2 < pseudoNear, w3N = w3 < pseudoNear; if(w1N && !w2N && !w3N) { clipQuad(x1,y1,z1,u1,v1,w1, x2,y2,z2,u2,v2,w2, x3,y3,z3,u3,v3,w3); } else if(!w1N && w2N && !w3N) { clipQuad(x2,y2,z2,u2,v2,w2, x3,y3,z3,u3,v3,w3, x1,y1,z1,u1,v1,w1); } else if(!w1N && !w2N && w3N) { clipQuad(x3,y3,z3,u3,v3,w3, x1,y1,z1,u1,v1,w1, x2,y2,z2,u2,v2,w2); } else if(!w1N) { clipTriangle(x1,y1,z1,u1,v1,w1, x2,y2,z2,u2,v2,w2, x3,y3,z3,u3,v3,w3); } else if(!w2N) { clipTriangle(x2,y2,z2,u2,v2,w2, x3,y3,z3,u3,v3,w3, x1,y1,z1,u1,v1,w1); } else if(!w3N) { clipTriangle(x3,y3,z3,u3,v3,w3, x1,y1,z1,u1,v1,w1, x2,y2,z2,u2,v2,w2); } }
void VirtualFont::addTransformedCluster(const Cluster &cluster, const Vec2f &position) { for (auto &shape : cluster.shapes) { Quad quad; auto glyph = cluster.font->fillQuad(quad, shape, position, sizeRatio); if (glyph) { if (!hasClip || clipQuad(quad, glyph->texture)) { auto batch = batchMap->getBatch(glyph->texture); matrix.addTransformedQuad(quad, batch->vertices); incrementSequence(batch); } } } }
void VirtualFont::addCluster(const Cluster &cluster, const Vec3f &position) { for (auto &shape : cluster.shapes) { Vec2f p = properties.useMipmap ? position.xy() : Vec2f(snap(position.x), snap(position.y)); Quad quad; auto glyph = cluster.font->fillQuad(quad, shape, p, sizeRatio); if (glyph) { if (!hasClip || clipQuad(quad, glyph->texture)) { auto batch = batchMap->getBatch(glyph->texture); batch->addQuad(quad, position.z); incrementSequence(batch); } } } }