Drawing tracks using PushVertices, added some comments, fixed formatting.
This commit is contained in:
parent
32784ea191
commit
a6c8beb73b
|
@ -68,7 +68,7 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
|
||||||
isFrameBufferInitialized = false;
|
isFrameBufferInitialized = false;
|
||||||
isUseShader = isUseShaders;
|
isUseShader = isUseShaders;
|
||||||
isShaderInitialized = false;
|
isShaderInitialized = false;
|
||||||
isGrouping = false;
|
isGrouping = false;
|
||||||
shaderPath = "../../common/gal/opengl/shader/";
|
shaderPath = "../../common/gal/opengl/shader/";
|
||||||
wxSize parentSize = aParent->GetSize();
|
wxSize parentSize = aParent->GetSize();
|
||||||
|
|
||||||
|
@ -615,20 +615,35 @@ inline void OPENGL_GAL::drawLineQuad( const VECTOR2D& aStartPoint, const VECTOR2
|
||||||
VECTOR2D perpendicularVector( -startEndVector.y * scale, startEndVector.x * scale );
|
VECTOR2D perpendicularVector( -startEndVector.y * scale, startEndVector.x * scale );
|
||||||
|
|
||||||
// Compute the edge points of the line
|
// Compute the edge points of the line
|
||||||
VECTOR2D point1 = aStartPoint + perpendicularVector;
|
VECTOR2D v0 = aStartPoint + perpendicularVector;
|
||||||
VECTOR2D point2 = aStartPoint - perpendicularVector;
|
VECTOR2D v1 = aStartPoint - perpendicularVector;
|
||||||
VECTOR2D point3 = aEndPoint + perpendicularVector;
|
VECTOR2D v2 = aEndPoint + perpendicularVector;
|
||||||
VECTOR2D point4 = aEndPoint - perpendicularVector;
|
VECTOR2D v3 = aEndPoint - perpendicularVector;
|
||||||
|
|
||||||
glBegin( GL_TRIANGLES );
|
if( isGrouping )
|
||||||
glVertex3d( point1.x, point1.y, layerDepth );
|
{
|
||||||
glVertex3d( point2.x, point2.y, layerDepth );
|
GLfloat newVertices[] = {
|
||||||
glVertex3d( point4.x, point4.y, layerDepth );
|
v0.x, v0.y, layerDepth, strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a,
|
||||||
|
v1.x, v1.y, layerDepth, strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a,
|
||||||
|
v3.x, v3.y, layerDepth, strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a,
|
||||||
|
v0.x, v0.y, layerDepth, strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a,
|
||||||
|
v3.x, v3.y, layerDepth, strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a,
|
||||||
|
v2.x, v2.y, layerDepth, strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a
|
||||||
|
};
|
||||||
|
curVboItem->PushVertices( newVertices, 6 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
glBegin( GL_TRIANGLES );
|
||||||
|
glVertex3d( v0.x, v0.y, layerDepth );
|
||||||
|
glVertex3d( v1.x, v1.y, layerDepth );
|
||||||
|
glVertex3d( v3.x, v3.y, layerDepth );
|
||||||
|
|
||||||
glVertex3d( point1.x, point1.y, layerDepth );
|
glVertex3d( v0.x, v0.y, layerDepth );
|
||||||
glVertex3d( point4.x, point4.y, layerDepth );
|
glVertex3d( v3.x, v3.y, layerDepth );
|
||||||
glVertex3d( point3.x, point3.y, layerDepth );
|
glVertex3d( v2.x, v2.y, layerDepth );
|
||||||
glEnd();
|
glEnd();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -637,7 +652,7 @@ void OPENGL_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndP
|
||||||
VECTOR2D startEndVector = aEndPoint - aStartPoint;
|
VECTOR2D startEndVector = aEndPoint - aStartPoint;
|
||||||
double lineAngle = atan2( startEndVector.y, startEndVector.x );
|
double lineAngle = atan2( startEndVector.y, startEndVector.x );
|
||||||
|
|
||||||
if ( isGrouping )
|
/*if ( isGrouping )
|
||||||
{
|
{
|
||||||
// Angle of a line perpendicular to the segment being drawn
|
// Angle of a line perpendicular to the segment being drawn
|
||||||
double beta = ( M_PI / 2.0 ) - lineAngle;
|
double beta = ( M_PI / 2.0 ) - lineAngle;
|
||||||
|
@ -662,37 +677,40 @@ void OPENGL_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndP
|
||||||
};
|
};
|
||||||
curVboItem->PushVertices( newVertices, 6 );
|
curVboItem->PushVertices( newVertices, 6 );
|
||||||
}
|
}
|
||||||
|
else*/
|
||||||
if( isFillEnabled )
|
|
||||||
{
|
{
|
||||||
glColor4d( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
|
if( isFillEnabled )
|
||||||
|
{
|
||||||
|
if( !isGrouping )
|
||||||
|
glColor4d( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
|
||||||
|
|
||||||
SetLineWidth( aWidth );
|
SetLineWidth( aWidth );
|
||||||
drawSemiCircle( aStartPoint, aWidth / 2, lineAngle + M_PI / 2, layerDepth );
|
drawSemiCircle( aStartPoint, aWidth / 2, lineAngle + M_PI / 2, layerDepth );
|
||||||
drawSemiCircle( aEndPoint, aWidth / 2, lineAngle - M_PI / 2, layerDepth );
|
drawSemiCircle( aEndPoint, aWidth / 2, lineAngle - M_PI / 2, layerDepth );
|
||||||
drawLineQuad( aStartPoint, aEndPoint );
|
drawLineQuad( aStartPoint, aEndPoint );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double lineLength = startEndVector.EuclideanNorm();
|
double lineLength = startEndVector.EuclideanNorm();
|
||||||
|
|
||||||
glColor4d( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
|
glColor4d( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
glTranslated( aStartPoint.x, aStartPoint.y, 0.0 );
|
glTranslated( aStartPoint.x, aStartPoint.y, 0.0 );
|
||||||
glRotated( lineAngle * ( 360 / ( 2 * M_PI ) ), 0, 0, 1 );
|
glRotated( lineAngle * ( 360 / ( 2 * M_PI ) ), 0, 0, 1 );
|
||||||
|
|
||||||
drawLineQuad( VECTOR2D( 0.0, aWidth / 2.0 ),
|
drawLineQuad( VECTOR2D( 0.0, aWidth / 2.0 ),
|
||||||
VECTOR2D( lineLength, aWidth / 2.0 ) );
|
VECTOR2D( lineLength, aWidth / 2.0 ) );
|
||||||
|
|
||||||
drawLineQuad( VECTOR2D( 0.0, -aWidth / 2.0 ),
|
drawLineQuad( VECTOR2D( 0.0, -aWidth / 2.0 ),
|
||||||
VECTOR2D( lineLength, -aWidth / 2.0 ) );
|
VECTOR2D( lineLength, -aWidth / 2.0 ) );
|
||||||
|
|
||||||
DrawArc( VECTOR2D( 0.0, 0.0 ), aWidth / 2.0, M_PI / 2.0, 3.0 * M_PI / 2.0 );
|
DrawArc( VECTOR2D( 0.0, 0.0 ), aWidth / 2.0, M_PI / 2.0, 3.0 * M_PI / 2.0 );
|
||||||
DrawArc( VECTOR2D( lineLength, 0.0 ), aWidth / 2.0, M_PI / 2.0, -M_PI / 2.0 );
|
DrawArc( VECTOR2D( lineLength, 0.0 ), aWidth / 2.0, M_PI / 2.0, -M_PI / 2.0 );
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
#version 120
|
#version 120
|
||||||
|
|
||||||
varying float aspect;
|
varying float aspect;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
@ -86,7 +86,7 @@ void VBO_ITEM::PushVertex( const GLfloat* aVertex )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void VBO_ITEM::PushVertices( const GLfloat* aVertex, GLuint aSize )
|
void VBO_ITEM::PushVertices( const GLfloat* aVertices, GLuint aSize )
|
||||||
{
|
{
|
||||||
int newSize = m_size + aSize;
|
int newSize = m_size + aSize;
|
||||||
GLfloat* newVertices = new GLfloat[newSize * VertStride];
|
GLfloat* newVertices = new GLfloat[newSize * VertStride];
|
||||||
|
@ -101,8 +101,8 @@ void VBO_ITEM::PushVertices( const GLfloat* aVertex, GLuint aSize )
|
||||||
}
|
}
|
||||||
m_vertices = newVertices;
|
m_vertices = newVertices;
|
||||||
|
|
||||||
// Add the new vertex
|
// Add new vertices
|
||||||
memcpy( &newVertices[m_size * VertStride], aVertex, aSize * VertSize );
|
memcpy( &newVertices[m_size * VertStride], aVertices, aSize * VertSize );
|
||||||
|
|
||||||
// Handle new indices
|
// Handle new indices
|
||||||
if( m_indices )
|
if( m_indices )
|
||||||
|
@ -160,7 +160,7 @@ void SetVbo( int aVboId )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int GetVbo()
|
int GetVbo() const
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -43,9 +43,23 @@ public:
|
||||||
VBO_ITEM();
|
VBO_ITEM();
|
||||||
~VBO_ITEM();
|
~VBO_ITEM();
|
||||||
|
|
||||||
// TODO comments
|
/**
|
||||||
|
* Function PushVertex()
|
||||||
|
* Adds a single vertex to the VBO_ITEM. Vertex contains information about coordinates and
|
||||||
|
* colors and has to follow the specified format {X,Y,Z,R,G,B,A}.
|
||||||
|
* @param aVertex is a vertex to be added.
|
||||||
|
*/
|
||||||
void PushVertex( const GLfloat* aVertex );
|
void PushVertex( const GLfloat* aVertex );
|
||||||
void PushVertices( const GLfloat* aVertex, GLuint aSize );
|
|
||||||
|
/**
|
||||||
|
* Function PushVertices()
|
||||||
|
* Adds multiple vertices to the VBO_ITEM. This function is recommended over multiple calls to
|
||||||
|
* PushVertex, as it does less memory reallocations. Vertices contain information about
|
||||||
|
* coordinates and colors and has to follow the specified format {X,Y,Z,R,G,B,A}.
|
||||||
|
* @param aVertices are vertices to be added.
|
||||||
|
* @param aSize is an amount of vertices to be added.
|
||||||
|
*/
|
||||||
|
void PushVertices( const GLfloat* aVertices, GLuint aSize );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetVertices()
|
* Function GetVertices()
|
||||||
|
@ -79,7 +93,7 @@ public:
|
||||||
|
|
||||||
///< Functions for getting VBO ids.
|
///< Functions for getting VBO ids.
|
||||||
//void SetVbo( int aVboId );
|
//void SetVbo( int aVboId );
|
||||||
//int GetVbo();
|
//int GetVbo() const;
|
||||||
|
|
||||||
///< Data organization information for vertices.
|
///< Data organization information for vertices.
|
||||||
static const int VertStride = 7;
|
static const int VertStride = 7;
|
||||||
|
@ -94,21 +108,21 @@ private:
|
||||||
|
|
||||||
///< Contains vertices coordinates and colors.
|
///< Contains vertices coordinates and colors.
|
||||||
///< Packed by 7 floats for each vertex: {X, Y, Z, R, G, B, A}
|
///< Packed by 7 floats for each vertex: {X, Y, Z, R, G, B, A}
|
||||||
GLfloat* m_vertices;
|
GLfloat* m_vertices;
|
||||||
|
|
||||||
///< Indices of vertices
|
///< Indices of vertices
|
||||||
GLuint* m_indices;
|
GLuint* m_indices;
|
||||||
|
|
||||||
///< Offset and size of data in VBO.
|
///< Offset and size of data in VBO.
|
||||||
int m_offset;
|
int m_offset;
|
||||||
int m_size;
|
int m_size;
|
||||||
|
|
||||||
///< Shader data used for rendering.
|
///< Shader data used for rendering.
|
||||||
int m_shader;
|
int m_shader;
|
||||||
int m_shaderAttrib;
|
int m_shaderAttrib;
|
||||||
|
|
||||||
///< Flag telling if the item should be recached in VBO or not.
|
///< Flag telling if the item should be recached in VBO or not.
|
||||||
bool m_isDirty;
|
bool m_isDirty;
|
||||||
};
|
};
|
||||||
} // namespace KiGfx
|
} // namespace KiGfx
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue