Omnidome
Fulldome Mapping Software Toolkit
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Static Public Attributes | Private Attributes
omni::visual::Circle Class Reference

Visualizer for drawing a circle with VBO. More...

#include <Circle.h>

Collaboration diagram for omni::visual::Circle:
Collaboration graph
[legend]

Public Member Functions

 Circle ()
 
void drawLine (QPointF const &_pos, float _rX, float _rY) const
 Draw lined circle. More...
 
void drawFill (QPointF const &_pos, float _rX, float _rY) const
 Draw filled circle with triangle fan. More...
 
void update ()
 Update circle mesh. More...
 

Static Public Attributes

static constexpr std::size_t numberSegments = 32
 Standard number of segments. More...
 

Private Attributes

VBO vertexVbo_
 
std::array< QVector2D,
numberSegments+2 > 
vertices_
 

Detailed Description

Visualizer for drawing a circle with VBO.

Constructor & Destructor Documentation

omni::visual::Circle::Circle ( )
26  {
27  update();
28  }
void update()
Update circle mesh.
Definition: Circle.cpp:67

Member Function Documentation

void omni::visual::Circle::drawFill ( QPointF const &  _pos,
float  _rX,
float  _rY 
) const

Draw filled circle with triangle fan.

49  {
50  withCurrentContext([&](QOpenGLFunctions& _) {
51  glPushMatrix();
52  glLoadIdentity();
53  glScalef(_rX, _rY, 1.0);
54  glTranslatef(_pos.x() / _rX, _pos.y() / _rY, 0.0);
55  glEnableClientState(GL_VERTEX_ARRAY);
56  _.glBindBuffer(GL_ARRAY_BUFFER, vertexVbo_.id());
57 
58  glVertexPointer(2, GL_FLOAT, 0, nullptr);
59  _.glDrawArrays(GL_TRIANGLE_FAN, 0, numberSegments + 2);
60 
61  _.glBindBuffer(GL_ARRAY_BUFFER, 0);
62  glDisableClientState(GL_VERTEX_ARRAY);
63  glPopMatrix();
64  });
65  }
void withCurrentContext(ContextFunctor f)
Do OpenGL operations with current context, if it exists.
Definition: ContextSwitch.cpp:45
GLuint id() const
Return buffer id.
Definition: VBO.cpp:65
VBO vertexVbo_
Definition: Circle.h:50
static constexpr std::size_t numberSegments
Standard number of segments.
Definition: Circle.h:34
void omni::visual::Circle::drawLine ( QPointF const &  _pos,
float  _rX,
float  _rY 
) const

Draw lined circle.

31  {
32  withCurrentContext([&](QOpenGLFunctions& _) {
33  glPushMatrix();
34  glScalef(_rX, _rY, 1.0);
35  glTranslatef(_pos.x() / _rX, _pos.y() / _rY, 0.0);
36  glEnableClientState(GL_VERTEX_ARRAY);
37  _.glBindBuffer(GL_ARRAY_BUFFER, vertexVbo_.id());
38 
39  glVertexPointer(2, GL_FLOAT, 0, nullptr);
40  _.glDrawArrays(GL_LINE_LOOP, 1, numberSegments);
41 
42  _.glBindBuffer(GL_ARRAY_BUFFER, 0);
43  glDisableClientState(GL_VERTEX_ARRAY);
44  glPopMatrix();
45  });
46  }
void withCurrentContext(ContextFunctor f)
Do OpenGL operations with current context, if it exists.
Definition: ContextSwitch.cpp:45
GLuint id() const
Return buffer id.
Definition: VBO.cpp:65
VBO vertexVbo_
Definition: Circle.h:50
static constexpr std::size_t numberSegments
Standard number of segments.
Definition: Circle.h:34
void omni::visual::Circle::update ( )

Update circle mesh.

67  {
68  vertexVbo_.gen();
69  glEnableClientState(GL_VERTEX_ARRAY);
70 
71  vertices_[0] = QVector2D(0.0, 0.0);
73  [&](size_t i, const QPointF& _p)
74  {
75  vertices_[i + 1] = QVector2D(_p);
76  });
77  vertices_[numberSegments + 1] = vertices_[1];
78 
79  vertexVbo_.bufferStaticArray(vertices_);
80  }
std::array< QVector2D, numberSegments+2 > vertices_
Definition: Circle.h:51
VBO vertexVbo_
Definition: Circle.h:50
void gen()
Generate a new VBO and get the associated ID.
Definition: VBO.cpp:38
void for_each_circle_point(size_t _numVertices, float _radius, F _f)
Definition: util.h:44
void bufferStaticArray(BUF const &_buf)
Copy static vertex array onto GPU.
Definition: VBO.h:44
static constexpr std::size_t numberSegments
Standard number of segments.
Definition: Circle.h:34

Field Documentation

constexpr std::size_t omni::visual::Circle::numberSegments = 32
static

Standard number of segments.

VBO omni::visual::Circle::vertexVbo_
private
std::array<QVector2D, numberSegments + 2> omni::visual::Circle::vertices_
private

The documentation for this class was generated from the following files: