Make sure all DrawOrGetDistance style code only draws in Paint();
Otherwise, GL reports errors when used with FBOs, as well as creates visual artifacts, especially when UI is also drawn with OpenGL.pull/3/head
parent
4b86fb89f8
commit
bbe4999033
|
@ -559,6 +559,7 @@ void Constraint::DrawOrGetDistance(Vector *labelPos) {
|
|||
break;
|
||||
}
|
||||
|
||||
if(dogd.drawing) {
|
||||
// Let's adjust the color of this constraint to have the same
|
||||
// rough luma as the point color, so that the constraint does not
|
||||
// stand out in an ugly way.
|
||||
|
@ -587,6 +588,7 @@ void Constraint::DrawOrGetDistance(Vector *labelPos) {
|
|||
}
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1029,7 +1031,7 @@ s:
|
|||
break;
|
||||
|
||||
case COMMENT: {
|
||||
if(disp.style.v) {
|
||||
if(dogd.drawing && disp.style.v) {
|
||||
ssglLineWidth(Style::Width(disp.style));
|
||||
ssglColorRGB(Style::Color(disp.style));
|
||||
}
|
||||
|
|
|
@ -520,12 +520,16 @@ void Entity::DrawOrGetDistance(void) {
|
|||
// dimmer for the ones at the model origin.
|
||||
int f = (i == 0 ? 100 : 255);
|
||||
if(hr.v == Request::HREQUEST_REFERENCE_XY.v) {
|
||||
if(dogd.drawing)
|
||||
ssglColorRGB(RGBi(0, 0, f));
|
||||
} else if(hr.v == Request::HREQUEST_REFERENCE_YZ.v) {
|
||||
if(dogd.drawing)
|
||||
ssglColorRGB(RGBi(f, 0, 0));
|
||||
} else if(hr.v == Request::HREQUEST_REFERENCE_ZX.v) {
|
||||
if(dogd.drawing)
|
||||
ssglColorRGB(RGBi(0, f, 0));
|
||||
} else {
|
||||
if(dogd.drawing)
|
||||
ssglColorRGB(Style::Color(Style::NORMALS));
|
||||
if(i > 0) break;
|
||||
}
|
||||
|
@ -534,6 +538,7 @@ void Entity::DrawOrGetDistance(void) {
|
|||
Vector tail;
|
||||
if(i == 0) {
|
||||
tail = SK.GetEntity(point[0])->PointGetNum();
|
||||
if(dogd.drawing)
|
||||
ssglLineWidth(1);
|
||||
} else {
|
||||
// Draw an extra copy of the x, y, and z axes, that's
|
||||
|
@ -544,9 +549,11 @@ void Entity::DrawOrGetDistance(void) {
|
|||
double w = 60 - SS.GW.width/2;
|
||||
tail = SS.GW.projRight.ScaledBy(w/s).Plus(
|
||||
SS.GW.projUp. ScaledBy(h/s)).Minus(SS.GW.offset);
|
||||
if(dogd.drawing) {
|
||||
ssglDepthRangeLockToFront(true);
|
||||
ssglLineWidth(2);
|
||||
}
|
||||
}
|
||||
|
||||
Vector v = (q.RotationN()).WithMagnitude(50/SS.GW.scale);
|
||||
Vector tip = tail.Plus(v);
|
||||
|
@ -557,6 +564,7 @@ void Entity::DrawOrGetDistance(void) {
|
|||
LineDrawOrGetDistance(tip,tip.Minus(v.RotatedAbout(axis, 0.6)));
|
||||
LineDrawOrGetDistance(tip,tip.Minus(v.RotatedAbout(axis,-0.6)));
|
||||
}
|
||||
if(dogd.drawing)
|
||||
ssglDepthRangeLockToFront(false);
|
||||
break;
|
||||
}
|
||||
|
@ -583,10 +591,13 @@ void Entity::DrawOrGetDistance(void) {
|
|||
Vector mm = p.Minus(us).Minus(vs), mm2 = mm;
|
||||
Vector mp = p.Minus(us).Plus (vs);
|
||||
|
||||
if(dogd.drawing) {
|
||||
ssglLineWidth(1);
|
||||
ssglColorRGB(Style::Color(Style::NORMALS));
|
||||
glEnable(GL_LINE_STIPPLE);
|
||||
glLineStipple(3, 0x1111);
|
||||
}
|
||||
|
||||
if(!h.isFromRequest()) {
|
||||
mm = mm.Plus(v.ScaledBy(60/SS.GW.scale));
|
||||
mm2 = mm2.Plus(u.ScaledBy(60/SS.GW.scale));
|
||||
|
@ -596,6 +607,8 @@ void Entity::DrawOrGetDistance(void) {
|
|||
LineDrawOrGetDistance(pm, mm2);
|
||||
LineDrawOrGetDistance(mm, mp);
|
||||
LineDrawOrGetDistance(mp, pp);
|
||||
|
||||
if(dogd.drawing)
|
||||
glDisable(GL_LINE_STIPPLE);
|
||||
|
||||
char *str = DescriptionString()+5;
|
||||
|
|
|
@ -347,10 +347,12 @@ void TextWindow::DrawOrHitTestIcons(int how, double mx, double my)
|
|||
int x = 20, y = 33 + LINE_HEIGHT;
|
||||
y -= scrollPos*(LINE_HEIGHT/2);
|
||||
|
||||
if(how == PAINT) {
|
||||
double grey = 30.0/255;
|
||||
double top = y - 28, bot = y + 4;
|
||||
glColor4d(grey, grey, grey, 1.0);
|
||||
ssglAxisAlignedQuad(0, width, top, bot);
|
||||
}
|
||||
|
||||
HideShowIcon *oldHovered = hoveredIcon;
|
||||
if(how != PAINT) {
|
||||
|
|
Loading…
Reference in New Issue