Commit 408fb4f1 authored by Maciej Suminski's avatar Maciej Suminski

Removed pointers where they were not necessary.

parent e29a829a
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
*/ */
#include <gal/opengl/opengl_gal.h> #include <gal/opengl/opengl_gal.h>
#include <gal/opengl/vbo_container.h>
#include <gal/definitions.h> #include <gal/definitions.h>
#include <wx/log.h> #include <wx/log.h>
...@@ -53,7 +52,8 @@ const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 1 ...@@ -53,7 +52,8 @@ const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 1
OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener, OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
wxEvtHandler* aPaintListener, bool isUseShaders, const wxString& aName ) : wxEvtHandler* aPaintListener, bool isUseShaders, const wxString& aName ) :
wxGLCanvas( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize, wxGLCanvas( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize,
wxEXPAND, aName ) wxEXPAND, aName ),
verticesCircle( &precomputedContainer )
{ {
// Create the OpenGL-Context // Create the OpenGL-Context
glContext = new wxGLContext( this ); glContext = new wxGLContext( this );
...@@ -106,8 +106,6 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener, ...@@ -106,8 +106,6 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) ); Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
#endif #endif
vboContainer = new VBO_CONTAINER;
// Tesselator initialization // Tesselator initialization
tesselator = gluNewTess(); tesselator = gluNewTess();
InitTesselatorCallbacks( tesselator ); InitTesselatorCallbacks( tesselator );
...@@ -127,9 +125,6 @@ OPENGL_GAL::~OPENGL_GAL() ...@@ -127,9 +125,6 @@ OPENGL_GAL::~OPENGL_GAL()
if( glIsList( displayListCircle ) ) if( glIsList( displayListCircle ) )
glDeleteLists( displayListCircle, 1 ); glDeleteLists( displayListCircle, 1 );
delete verticesCircle;
delete precomputedContainer;
// Delete the buffers // Delete the buffers
if( isFrameBufferInitialized ) if( isFrameBufferInitialized )
{ {
...@@ -143,7 +138,6 @@ OPENGL_GAL::~OPENGL_GAL() ...@@ -143,7 +138,6 @@ OPENGL_GAL::~OPENGL_GAL()
{ {
ClearCache(); ClearCache();
deleteVertexBufferObjects(); deleteVertexBufferObjects();
delete vboContainer;
} }
delete glContext; delete glContext;
...@@ -433,7 +427,7 @@ void OPENGL_GAL::BeginDrawing() ...@@ -433,7 +427,7 @@ void OPENGL_GAL::BeginDrawing()
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, vboIndices ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, vboIndices );
// Discard old buffer, so we can use it again // Discard old buffer, so we can use it again
glBufferData( GL_ELEMENT_ARRAY_BUFFER, vboContainer->GetSize() * VBO_ITEM::IndByteSize, glBufferData( GL_ELEMENT_ARRAY_BUFFER, vboContainer.GetSize() * VBO_ITEM::IndByteSize,
NULL, GL_STREAM_DRAW ); NULL, GL_STREAM_DRAW );
// Map the GPU memory, so we can store indices that are going to be drawn // Map the GPU memory, so we can store indices that are going to be drawn
...@@ -549,17 +543,17 @@ void OPENGL_GAL::rebuildVbo() ...@@ -549,17 +543,17 @@ void OPENGL_GAL::rebuildVbo()
prof_start( &totalTime, false ); prof_start( &totalTime, false );
#endif /* __WXDEBUG__ */ #endif /* __WXDEBUG__ */
GLfloat* data = (GLfloat*) vboContainer->GetAllVertices(); GLfloat* data = (GLfloat*) vboContainer.GetAllVertices();
// Upload vertices coordinates and shader types to GPU memory // Upload vertices coordinates and shader types to GPU memory
glBindBuffer( GL_ARRAY_BUFFER, vboVertices ); glBindBuffer( GL_ARRAY_BUFFER, vboVertices );
glBufferData( GL_ARRAY_BUFFER, vboContainer->GetSize() * VBO_ITEM::VertByteSize, glBufferData( GL_ARRAY_BUFFER, vboContainer.GetSize() * VBO_ITEM::VertByteSize,
data, GL_DYNAMIC_DRAW ); data, GL_DYNAMIC_DRAW );
glBindBuffer( GL_ARRAY_BUFFER, 0 ); glBindBuffer( GL_ARRAY_BUFFER, 0 );
// Allocate the biggest possible buffer for indices // Allocate the biggest possible buffer for indices
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, vboIndices ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, vboIndices );
glBufferData( GL_ELEMENT_ARRAY_BUFFER, vboContainer->GetSize() * VBO_ITEM::IndByteSize, glBufferData( GL_ELEMENT_ARRAY_BUFFER, vboContainer.GetSize() * VBO_ITEM::IndByteSize,
NULL, GL_STREAM_DRAW ); NULL, GL_STREAM_DRAW );
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
...@@ -569,7 +563,7 @@ void OPENGL_GAL::rebuildVbo() ...@@ -569,7 +563,7 @@ void OPENGL_GAL::rebuildVbo()
prof_end( &totalTime ); prof_end( &totalTime );
wxLogDebug( wxT( "Rebuilding VBO::%d vertices / %.1f ms" ), wxLogDebug( wxT( "Rebuilding VBO::%d vertices / %.1f ms" ),
vboContainer->GetSize(), (double) totalTime.value / 1000.0 ); vboContainer.GetSize(), (double) totalTime.value / 1000.0 );
#endif /* __WXDEBUG__ */ #endif /* __WXDEBUG__ */
} }
...@@ -852,7 +846,7 @@ void OPENGL_GAL::DrawCircle( const VECTOR2D& aCenterPoint, double aRadius ) ...@@ -852,7 +846,7 @@ void OPENGL_GAL::DrawCircle( const VECTOR2D& aCenterPoint, double aRadius )
if( innerScale < outerScale ) if( innerScale < outerScale )
{ {
// Draw the outline // Draw the outline
VBO_VERTEX* circle = verticesCircle->GetVertices(); VBO_VERTEX* circle = verticesCircle.GetVertices();
int next; int next;
color4( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a ); color4( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
...@@ -910,7 +904,7 @@ void OPENGL_GAL::DrawCircle( const VECTOR2D& aCenterPoint, double aRadius ) ...@@ -910,7 +904,7 @@ void OPENGL_GAL::DrawCircle( const VECTOR2D& aCenterPoint, double aRadius )
if( isGrouping ) if( isGrouping )
{ {
currentGroup->PushVertices( verticesCircle->GetVertices(), CIRCLE_POINTS * 3 ); currentGroup->PushVertices( verticesCircle.GetVertices(), CIRCLE_POINTS * 3 );
} }
else else
{ {
...@@ -975,7 +969,7 @@ void OPENGL_GAL::drawFilledSemiCircle( const VECTOR2D& aCenterPoint, double aRad ...@@ -975,7 +969,7 @@ void OPENGL_GAL::drawFilledSemiCircle( const VECTOR2D& aCenterPoint, double aRad
if( isGrouping ) if( isGrouping )
{ {
// It is enough just to push just a half of the circle vertices to make a semicircle // It is enough just to push just a half of the circle vertices to make a semicircle
currentGroup->PushVertices( verticesCircle->GetVertices(), CIRCLE_POINTS / 2 * 3 ); currentGroup->PushVertices( verticesCircle.GetVertices(), CIRCLE_POINTS / 2 * 3 );
} }
else else
{ {
...@@ -1031,7 +1025,7 @@ void OPENGL_GAL::drawStrokedSemiCircle( const VECTOR2D& aCenterPoint, double aRa ...@@ -1031,7 +1025,7 @@ void OPENGL_GAL::drawStrokedSemiCircle( const VECTOR2D& aCenterPoint, double aRa
Rotate( aAngle ); Rotate( aAngle );
// Draw the outline // Draw the outline
VBO_VERTEX* circle = verticesCircle->GetVertices(); VBO_VERTEX* circle = verticesCircle.GetVertices();
int next; int next;
begin( GL_TRIANGLES ); begin( GL_TRIANGLES );
...@@ -1402,7 +1396,7 @@ void OPENGL_GAL::Save() ...@@ -1402,7 +1396,7 @@ void OPENGL_GAL::Save()
if( isGrouping ) if( isGrouping )
{ {
transformStack.push( transform ); transformStack.push( transform );
vboContainer->SetTransformMatrix( &transform ); vboContainer.SetTransformMatrix( &transform );
} }
else else
{ {
...@@ -1421,7 +1415,7 @@ void OPENGL_GAL::Restore() ...@@ -1421,7 +1415,7 @@ void OPENGL_GAL::Restore()
if( transformStack.empty() ) if( transformStack.empty() )
{ {
// Disable transforming, as the selected matrix is identity // Disable transforming, as the selected matrix is identity
vboContainer->SetTransformMatrix( NULL ); vboContainer.SetTransformMatrix( NULL );
} }
} }
else else
...@@ -1439,7 +1433,7 @@ int OPENGL_GAL::BeginGroup() ...@@ -1439,7 +1433,7 @@ int OPENGL_GAL::BeginGroup()
vboNeedsUpdate = true; vboNeedsUpdate = true;
// Save the pointer for caching the current item // Save the pointer for caching the current item
currentGroup = new VBO_ITEM( vboContainer ); currentGroup = new VBO_ITEM( &vboContainer );
int groupNumber = getGroupNumber(); int groupNumber = getGroupNumber();
groups.insert( std::make_pair( groupNumber, currentGroup ) ); groups.insert( std::make_pair( groupNumber, currentGroup ) );
...@@ -1503,10 +1497,6 @@ void OPENGL_GAL::ChangeGroupDepth( int aGroupNumber, int aDepth ) ...@@ -1503,10 +1497,6 @@ void OPENGL_GAL::ChangeGroupDepth( int aGroupNumber, int aDepth )
void OPENGL_GAL::computeCircleVbo() void OPENGL_GAL::computeCircleVbo()
{ {
// (3 vertices per triangle) * (number of points to draw a circle)
precomputedContainer = new VBO_CONTAINER( 3 * CIRCLE_POINTS );
verticesCircle = new VBO_ITEM( precomputedContainer );
// Compute the circle points for a given number of segments // Compute the circle points for a given number of segments
// Insert in a display list and a vector // Insert in a display list and a vector
const VBO_VERTEX v0 = { 0.0f, 0.0f, 0.0f }; const VBO_VERTEX v0 = { 0.0f, 0.0f, 0.0f };
...@@ -1524,12 +1514,12 @@ void OPENGL_GAL::computeCircleVbo() ...@@ -1524,12 +1514,12 @@ void OPENGL_GAL::computeCircleVbo()
0.0f // z 0.0f // z
}; };
verticesCircle->PushVertex( &v0 ); verticesCircle.PushVertex( &v0 );
verticesCircle->PushVertex( &v1 ); verticesCircle.PushVertex( &v1 );
verticesCircle->PushVertex( &v2 ); verticesCircle.PushVertex( &v2 );
} }
verticesCircle->Finish(); verticesCircle.Finish();
} }
......
...@@ -338,8 +338,8 @@ private: ...@@ -338,8 +338,8 @@ private:
wxEvtHandler* paintListener; wxEvtHandler* paintListener;
// VBO buffers & display lists (used in immediate mode) // VBO buffers & display lists (used in immediate mode)
VBO_CONTAINER* precomputedContainer; ///< Container for storing display lists VBO_CONTAINER precomputedContainer; ///< Container for storing display lists
VBO_ITEM* verticesCircle; ///< Buffer for circle & semicircle vertices VBO_ITEM verticesCircle; ///< Buffer for circle & semicircle vertices
GLuint displayListCircle; ///< Circle display list GLuint displayListCircle; ///< Circle display list
GLuint displayListSemiCircle; ///< Semi circle display list GLuint displayListSemiCircle; ///< Semi circle display list
...@@ -348,7 +348,7 @@ private: ...@@ -348,7 +348,7 @@ private:
GroupsMap groups; ///< Stores informations about VBO objects (groups) GroupsMap groups; ///< Stores informations about VBO objects (groups)
unsigned int groupCounter; ///< Counter used for generating keys for groups unsigned int groupCounter; ///< Counter used for generating keys for groups
VBO_ITEM* currentGroup; ///< Currently used VBO_ITEM (for grouping) VBO_ITEM* currentGroup; ///< Currently used VBO_ITEM (for grouping)
VBO_CONTAINER* vboContainer; ///< Container for storing VBO_ITEMs VBO_CONTAINER vboContainer; ///< Container for storing VBO_ITEMs
GLuint vboVertices; ///< Currently used vertices VBO handle GLuint vboVertices; ///< Currently used vertices VBO handle
GLuint vboIndices; ///< Currently used indices VBO handle GLuint vboIndices; ///< Currently used indices VBO handle
bool vboNeedsUpdate; ///< Flag indicating if VBO should be rebuilt bool vboNeedsUpdate; ///< Flag indicating if VBO should be rebuilt
...@@ -399,7 +399,8 @@ private: ...@@ -399,7 +399,8 @@ private:
bool isGrouping; ///< Was a group started? bool isGrouping; ///< Was a group started?
/** /**
* @brief Draw a semi circle (used for line caps). * @brief Draw a semi circle. Depending on settings (isStrokeEnabled & isFilledEnabled) it runs
* the proper function (drawStrokedSemiCircle or drawFilledSemiCircle).
* *
* @param aCenterPoint is the center point. * @param aCenterPoint is the center point.
* @param aRadius is the radius of the semi-circle. * @param aRadius is the radius of the semi-circle.
...@@ -408,7 +409,24 @@ private: ...@@ -408,7 +409,24 @@ private:
*/ */
void drawSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle ); void drawSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle );
/**
* @brief Draw a filled semi circle.
*
* @param aCenterPoint is the center point.
* @param aRadius is the radius of the semi-circle.
* @param aAngle is the angle of the semi-circle.
*
*/
void drawFilledSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle ); void drawFilledSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle );
/**
* @brief Draw a stroked semi circle.
*
* @param aCenterPoint is the center point.
* @param aRadius is the radius of the semi-circle.
* @param aAngle is the angle of the semi-circle.
*
*/
void drawStrokedSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle ); void drawStrokedSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle );
/// Compute the points of an unit circle & semicircle and store them in VBO. /// Compute the points of an unit circle & semicircle and store them in VBO.
...@@ -584,7 +602,7 @@ private: ...@@ -584,7 +602,7 @@ private:
{ {
if( isGrouping ) if( isGrouping )
{ {
vboContainer->UseColor( aRed, aGreen, aBlue, aAlpha ); vboContainer.UseColor( aRed, aGreen, aBlue, aAlpha );
} }
else else
{ {
...@@ -603,7 +621,7 @@ private: ...@@ -603,7 +621,7 @@ private:
{ {
if( isGrouping ) if( isGrouping )
{ {
vboContainer->UseColor( aColor ); vboContainer.UseColor( aColor );
} }
else else
{ {
...@@ -625,7 +643,7 @@ private: ...@@ -625,7 +643,7 @@ private:
{ {
const GLfloat shader[] = { aShader, aParam1, aParam2, aParam3 }; const GLfloat shader[] = { aShader, aParam1, aParam2, aParam3 };
vboContainer->UseShader( shader ); vboContainer.UseShader( shader );
} }
} }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment