Fixed stroke semicircles drawing using shaderless OpenGL backend.

This commit is contained in:
Maciej Suminski 2013-07-02 09:27:12 +02:00
parent f38935459b
commit 2061947138
1 changed files with 37 additions and 42 deletions

View File

@ -1024,15 +1024,11 @@ void OPENGL_GAL::drawStrokedSemiCircle( const VECTOR2D& aCenterPoint, double aRa
else else
{ {
// Compute the factors for the unit circle // Compute the factors for the unit circle
double outerScale = lineWidth / aRadius / 2; double innerScale = 1.0 - lineWidth / aRadius;
double innerScale = -outerScale;
outerScale += 1.0;
innerScale += 1.0;
if( innerScale < outerScale )
{
Save(); Save();
Translate( aCenterPoint ); Translate( aCenterPoint );
Scale( VECTOR2D( aRadius, aRadius ) );
Rotate( aAngle ); Rotate( aAngle );
// Draw the outline // Draw the outline
@ -1062,11 +1058,11 @@ void OPENGL_GAL::drawStrokedSemiCircle( const VECTOR2D& aCenterPoint, double aRa
} }
vertex3( circle[i].x * innerScale, circle[i].y * innerScale, layerDepth ); vertex3( circle[i].x * innerScale, circle[i].y * innerScale, layerDepth );
vertex3( circle[i].x * outerScale, circle[i].y * outerScale, layerDepth ); vertex3( circle[i].x, circle[i].y, layerDepth );
vertex3( circle[next].x * innerScale, circle[next].y * innerScale, layerDepth ); vertex3( circle[next].x * innerScale, circle[next].y * innerScale, layerDepth );
vertex3( circle[i].x * outerScale, circle[i].y * outerScale, layerDepth ); vertex3( circle[i].x, circle[i].y, layerDepth );
vertex3( circle[next].x * outerScale, circle[next].y * outerScale, layerDepth ); vertex3( circle[next].x, circle[next].y, layerDepth );
vertex3( circle[next].x * innerScale, circle[next].y * innerScale, layerDepth ); vertex3( circle[next].x * innerScale, circle[next].y * innerScale, layerDepth );
} }
@ -1075,7 +1071,6 @@ void OPENGL_GAL::drawStrokedSemiCircle( const VECTOR2D& aCenterPoint, double aRa
Restore(); Restore();
} }
} }
}
// FIXME Optimize // FIXME Optimize