Stellarium 0.15.2
List of all members | Classes | Public Types | Public Member Functions | Static Public Member Functions | Friends
StelPainter Class Reference

Provides functions for performing openGL drawing operations. More...

#include <StelPainter.hpp>

+ Inheritance diagram for StelPainter:
+ Collaboration diagram for StelPainter:

Public Types

enum  SphericalPolygonDrawMode { SphericalPolygonDrawModeFill =0, SphericalPolygonDrawModeBoundary =1, SphericalPolygonDrawModeTextureFill =2, SphericalPolygonDrawModeTextureFillColormodulated =3 }
 Define the drawing mode when drawing polygons. More...
 
enum  DrawingMode {
  Points = 0x0000, Lines = 0x0001, LineLoop = 0x0002, LineStrip = 0x0003,
  Triangles = 0x0004, TriangleStrip = 0x0005, TriangleFan = 0x0006
}
 Define the drawing mode when drawing vertex. More...
 

Public Member Functions

 StelPainter (const StelProjectorP &prj)
 
QOpenGLFunctions * glFuncs ()
 Returns a QOpenGLFunctions object suitable for drawing directly with OpenGL while this StelPainter is active. More...
 
const StelProjectorPgetProjector () const
 Return the instance of projector associated to this painter. More...
 
void setProjector (const StelProjectorP &p)
 
void drawViewportShape (void)
 Fill with black around the viewport. More...
 
void drawText (float x, float y, const QString &str, float angleDeg=0.f, float xshift=0.f, float yshift=0.f, bool noGravity=true)
 Draw the string at the given position and angle with the given font. More...
 
void drawText (const Vec3d &v, const QString &str, float angleDeg=0.f, float xshift=0.f, float yshift=0.f, bool noGravity=true)
 
void drawSphericalRegion (const SphericalRegion *region, SphericalPolygonDrawMode drawMode=SphericalPolygonDrawModeFill, const SphericalCap *clippingCap=NULL, bool doSubDivise=true, double maxSqDistortion=5.)
 Draw the given SphericalRegion. More...
 
void drawGreatCircleArcs (const StelVertexArray &va, const SphericalCap *clippingCap=NULL)
 
void drawSphericalTriangles (const StelVertexArray &va, bool textured, bool colored, const SphericalCap *clippingCap=NULL, bool doSubDivide=true, double maxSqDistortion=5.)
 
void drawSmallCircleArc (const Vec3d &start, const Vec3d &stop, const Vec3d &rotCenter, void(*viewportEdgeIntersectCallback)(const Vec3d &screenPos, const Vec3d &direction, void *userData)=NULL, void *userData=NULL)
 Draw a small circle arc between points start and stop with rotation point in rotCenter. More...
 
void drawGreatCircleArc (const Vec3d &start, const Vec3d &stop, const SphericalCap *clippingCap=NULL, void(*viewportEdgeIntersectCallback)(const Vec3d &screenPos, const Vec3d &direction, void *userData)=NULL, void *userData=NULL)
 Draw a great circle arc between points start and stop. More...
 
void drawPath (const QVector< Vec3d > &points, const QVector< Vec4f > &colors)
 Draw a curve defined by a list of points. More...
 
void drawCircle (float x, float y, float r)
 Draw a simple circle, 2d viewport coordinates in pixel. More...
 
void drawSprite2dMode (float x, float y, float radius)
 Draw a square using the current texture at the given projected 2d position. More...
 
void drawSprite2dMode (const Vec3d &v, float radius)
 
void drawSprite2dModeNoDeviceScale (float x, float y, float radius)
 Same as drawSprite2dMode but don't scale according to display device scaling. More...
 
void drawSprite2dMode (float x, float y, float radius, float rotation)
 Draw a rotated square using the current texture at the given projected 2d position. More...
 
void drawPoint2d (float x, float y)
 Draw a GL_POINT at the given position. More...
 
void drawLine2d (float x1, float y1, float x2, float y2)
 Draw a line between the 2 points. More...
 
void drawRect2d (float x, float y, float width, float height, bool textured=true)
 Draw a rectangle using the current texture at the given projected 2d position. More...
 
void sSphere (float radius, float oneMinusOblateness, int slices, int stacks, int orientInside=0, bool flipTexture=false, float topAngle=0.0f, float bottomAngle=M_PI)
 
void sCylinder (float radius, float height, int slices, int orientInside=0)
 Re-implementation of gluCylinder : glu is overridden for non-standard projection. More...
 
void sSphereMap (float radius, int slices, int stacks, float textureFov=2.f *M_PI, int orientInside=0)
 Draw a fisheye texture in a sphere. More...
 
void setFont (const QFont &font)
 Set the font to use for subsequent text drawing. More...
 
void setColor (float r, float g, float b, float a=1.f)
 Set the color to use for subsequent drawing. More...
 
Vec4f getColor () const
 Get the color currently used for drawing. More...
 
QFontMetrics getFontMetrics () const
 Get the font metrics for the current font. More...
 
void setBlending (bool enableBlending, GLenum blendSrc=GL_SRC_ALPHA, GLenum blendDst=GL_ONE_MINUS_SRC_ALPHA)
 Enable OpenGL blending. More...
 
void setDepthTest (bool enable)
 
void setDepthMask (bool enable)
 
void setCullFace (bool enable)
 Set the OpenGL GL_CULL_FACE state, by default face culling is disabled. More...
 
void setLineSmooth (bool enable)
 Enables/disables line smoothing. By default, smoothing is disabled. More...
 
void setLineWidth (float width)
 Sets the line width. Default is 1.0f. More...
 
void setVertexPointer (int size, int type, const void *pointer)
 use instead of glVertexPointer More...
 
void setTexCoordPointer (int size, int type, const void *pointer)
 use instead of glTexCoordPointer More...
 
void setColorPointer (int size, int type, const void *pointer)
 use instead of glColorPointer More...
 
void setNormalPointer (int type, const void *pointer)
 use instead of glNormalPointer More...
 
void enableClientStates (bool vertex, bool texture=false, bool color=false, bool normal=false)
 Simulates glEnableClientState, basically you describe what data the ::drawFromArray call has available. More...
 
void setArrays (const Vec3d *vertices, const Vec2f *texCoords=NULL, const Vec3f *colorArray=NULL, const Vec3f *normalArray=NULL)
 convenience method that enable and set all the given arrays. More...
 
void setArrays (const Vec3f *vertices, const Vec2f *texCoords=NULL, const Vec3f *colorArray=NULL, const Vec3f *normalArray=NULL)
 
void drawFromArray (DrawingMode mode, int count, int offset=0, bool doProj=true, const unsigned short *indices=NULL)
 Draws primitives using vertices from the arrays specified by setVertexArray(). More...
 
void drawStelVertexArray (const StelVertexArray &arr, bool checkDiscontinuity=true)
 Draws the primitives defined in the StelVertexArray. More...
 

Static Public Member Functions

static StelVertexArray computeSphereNoLight (float radius, float oneMinusOblateness, int slices, int stacks, int orientInside=0, bool flipTexture=false, float topAngle=0.0f, float bottomAngle=M_PI)
 Generate a StelVertexArray for a sphere. More...
 
static void computeFanDisk (float radius, int innerFanSlices, int level, QVector< double > &vertexArr, QVector< float > &texCoordArr)
 Draw a disk with a special texturing mode having texture center at center of disk. More...
 
static void initGLShaders ()
 Create the OpenGL shaders programs used by the StelPainter. More...
 
static void deinitGLShaders ()
 Delete the OpenGL shaders objects. More...
 
static bool linkProg (class QOpenGLShaderProgram *prog, const QString &name)
 Link an opengl program and show a message in case of error or warnings. More...
 

Friends

class VertexArrayProjector
 
class StelTextureMgr
 
class StelTexture
 

Detailed Description

Provides functions for performing openGL drawing operations.

All coordinates are converted using the StelProjector instance passed at construction. Because openGL is not thread safe, only one instance of StelPainter can exist at a time, enforcing thread safety. As a coding rule, no openGL calls should be performed when no instance of StelPainter exist. Typical usage is to create a local instance of StelPainter where drawing operations are needed.

Definition at line 40 of file StelPainter.hpp.

Member Enumeration Documentation

Define the drawing mode when drawing vertex.

Enumerator
Points 

GL_POINTS.

Lines 

GL_LINES.

LineLoop 

GL_LINE_LOOP.

LineStrip 

GL_LINE_STRIP.

Triangles 

GL_TRIANGLES.

TriangleStrip 

GL_TRIANGLE_STRIP.

TriangleFan 

GL_TRIANGLE_FAN.

Definition at line 55 of file StelPainter.hpp.

Define the drawing mode when drawing polygons.

Enumerator
SphericalPolygonDrawModeFill 

Draw the interior of the polygon.

SphericalPolygonDrawModeBoundary 

Draw the boundary of the polygon.

SphericalPolygonDrawModeTextureFill 

Draw the interior of the polygon filled with the current texture.

SphericalPolygonDrawModeTextureFillColormodulated 

Draw the interior of the polygon filled with the current texture multiplied by vertex colors.

Definition at line 46 of file StelPainter.hpp.

Member Function Documentation

static void StelPainter::computeFanDisk ( float  radius,
int  innerFanSlices,
int  level,
QVector< double > &  vertexArr,
QVector< float > &  texCoordArr 
)
static

Draw a disk with a special texturing mode having texture center at center of disk.

The disk is made up of concentric circles with increasing refinement. The number of slices of the outmost circle is (innerFanSlices<<level).

Parameters
radiusthe radius of the disk.
innerFanSlicesthe number of slices.
levelthe number of concentric circles.
vertexArrthe vertex array in which the resulting vertices are returned.
texCoordArrthe vertex array in which the resulting texture coordinates are returned.
static StelVertexArray StelPainter::computeSphereNoLight ( float  radius,
float  oneMinusOblateness,
int  slices,
int  stacks,
int  orientInside = 0,
bool  flipTexture = false,
float  topAngle = 0.0f,
float  bottomAngle = M_PI 
)
static

Generate a StelVertexArray for a sphere.

Parameters
radius
oneMinusOblateness
slicesnumber of vertical segments ("meridian zones")
stacksnumber of horizontal segments ("latitude zones")
orientInside1 to have normals point inside, e.g. for Milky Way, Zodiacal Light, etc.
flipTextureif texture should be mapped to inside of sphere, e.g. Milky Way.
topAngleGZ: new parameter. An opening angle [radians] at top of the sphere. Useful if there is an empty region around the top pole, like North Galactic Pole.
bottomAngleGZ: new parameter. An opening angle [radians] at bottom of the sphere. Useful if there is an empty region around the bottom pole, like South Galactic Pole.
static void StelPainter::deinitGLShaders ( )
static

Delete the OpenGL shaders objects.

This method needs to be called once before exit.

void StelPainter::drawCircle ( float  x,
float  y,
float  r 
)

Draw a simple circle, 2d viewport coordinates in pixel.

void StelPainter::drawFromArray ( DrawingMode  mode,
int  count,
int  offset = 0,
bool  doProj = true,
const unsigned short *  indices = NULL 
)

Draws primitives using vertices from the arrays specified by setVertexArray().

Parameters
modeThe type of primitive to draw. If
indicesis NULL, this operation will consume
countvalues from the enabled arrays, starting at
offset.Else it will consume
countelements of
indices,startingat
offset,whichare used to index into the enabled arrays.
void StelPainter::drawGreatCircleArc ( const Vec3d start,
const Vec3d stop,
const SphericalCap clippingCap = NULL,
void(*)(const Vec3d &screenPos, const Vec3d &direction, void *userData)  viewportEdgeIntersectCallback = NULL,
void *  userData = NULL 
)

Draw a great circle arc between points start and stop.

The angle between start and stop must be < 180 deg. The algorithm ensures that the line will look smooth, even for non linear distortion. Each time the small circle crosses the edge of the viewport, the viewportEdgeIntersectCallback is called with the screen 2d position, direction of the currently drawn arc toward the inside of the viewport.

Parameters
clippingCapif not set to NULL, tells the painter to try to clip part of the region outside the cap.
void StelPainter::drawLine2d ( float  x1,
float  y1,
float  x2,
float  y2 
)

Draw a line between the 2 points.

Parameters
x1x position of point 1 in the viewport in pixels.
y1y position of point 1 in the viewport in pixels.
x2x position of point 2 in the viewport in pixels.
y2y position of point 2 in the viewport in pixels.
void StelPainter::drawPath ( const QVector< Vec3d > &  points,
const QVector< Vec4f > &  colors 
)

Draw a curve defined by a list of points.

The points should be already tesselated to ensure that the path will look smooth. The algorithm take care of cutting the path if it crosses a viewport discontinutiy.

void StelPainter::drawPoint2d ( float  x,
float  y 
)

Draw a GL_POINT at the given position.

Parameters
xx position in the viewport in pixels.
yy position in the viewport in pixels.
void StelPainter::drawRect2d ( float  x,
float  y,
float  width,
float  height,
bool  textured = true 
)

Draw a rectangle using the current texture at the given projected 2d position.

This method is not thread safe.

Parameters
xx position of the top left corner in the viewport in pixel.
yy position of the tope left corner in the viewport in pixel.
widthwidth in pixel.
heightheight in pixel.
texturedwhether the current texture should be used for painting.
void StelPainter::drawSmallCircleArc ( const Vec3d start,
const Vec3d stop,
const Vec3d rotCenter,
void(*)(const Vec3d &screenPos, const Vec3d &direction, void *userData)  viewportEdgeIntersectCallback = NULL,
void *  userData = NULL 
)

Draw a small circle arc between points start and stop with rotation point in rotCenter.

The angle between start and stop must be < 180 deg. The algorithm ensures that the line will look smooth, even for non linear distortion. Each time the small circle crosses the edge of the viewport, the viewportEdgeIntersectCallback is called with the screen 2d position, direction of the currently drawn arc toward the inside of the viewport. Example: A latitude circle has 0/0/sin(latitude) as rotCenter. If rotCenter is equal to 0,0,0, the method draws a great circle.

void StelPainter::drawSphericalRegion ( const SphericalRegion region,
SphericalPolygonDrawMode  drawMode = SphericalPolygonDrawModeFill,
const SphericalCap clippingCap = NULL,
bool  doSubDivise = true,
double  maxSqDistortion = 5. 
)

Draw the given SphericalRegion.

Parameters
regionThe SphericalRegion to draw.
drawModedefine whether to draw the outline or the fill or both.
clippingCapif not set to NULL, tells the painter to try to clip part of the region outside the cap.
doSubDiviseif true tesselates the object to follow projection distortions. Typically set that to false if you think that the region is fully contained in the viewport.
void StelPainter::drawSprite2dMode ( float  x,
float  y,
float  radius 
)

Draw a square using the current texture at the given projected 2d position.

This method is not thread safe.

Parameters
xx position in the viewport in pixel.
yy position in the viewport in pixel.
radiusthe half size of a square side in pixel.
vdirection vector of object to draw. Will draw only if this is in the visible hemisphere.
void StelPainter::drawSprite2dMode ( float  x,
float  y,
float  radius,
float  rotation 
)

Draw a rotated square using the current texture at the given projected 2d position.

This method is not thread safe.

Parameters
xx position in the viewport in pixel.
yy position in the viewport in pixel.
radiusthe half size of a square side in pixel.
rotationrotation angle in degree.
void StelPainter::drawSprite2dModeNoDeviceScale ( float  x,
float  y,
float  radius 
)

Same as drawSprite2dMode but don't scale according to display device scaling.

void StelPainter::drawStelVertexArray ( const StelVertexArray arr,
bool  checkDiscontinuity = true 
)

Draws the primitives defined in the StelVertexArray.

Parameters
checkDiscontinuitywill check and suppress discontinuities if necessary.
void StelPainter::drawText ( float  x,
float  y,
const QString &  str,
float  angleDeg = 0.f,
float  xshift = 0.f,
float  yshift = 0.f,
bool  noGravity = true 
)

Draw the string at the given position and angle with the given font.

If the gravity label flag is set, uses drawTextGravity180.

Parameters
xhorizontal position of the lower left corner of the first character of the text in pixel.
yhorizontal position of the lower left corner of the first character of the text in pixel.
strthe text to print.
angleDegrotation angle in degree. Rotation is around x,y.
xshiftshift in pixel in the rotated x direction.
yshiftshift in pixel in the rotated y direction.
noGravitydon't take into account the fact that the text should be written with gravity.
vdirection vector of object to draw. GZ20120826: Will draw only if this is in the visible hemisphere.
void StelPainter::drawViewportShape ( void  )

Fill with black around the viewport.

void StelPainter::enableClientStates ( bool  vertex,
bool  texture = false,
bool  color = false,
bool  normal = false 
)

Simulates glEnableClientState, basically you describe what data the ::drawFromArray call has available.

Vec4f StelPainter::getColor ( ) const

Get the color currently used for drawing.

QFontMetrics StelPainter::getFontMetrics ( ) const

Get the font metrics for the current font.

const StelProjectorP& StelPainter::getProjector ( ) const
inline

Return the instance of projector associated to this painter.

Definition at line 75 of file StelPainter.hpp.

QOpenGLFunctions* StelPainter::glFuncs ( )
inline

Returns a QOpenGLFunctions object suitable for drawing directly with OpenGL while this StelPainter is active.

This is recommended to be used instead of QOpenGLContext::currentContext()->functions() when a StelPainter is available, and you only need to call a few GL functions directly.

Definition at line 72 of file StelPainter.hpp.

static void StelPainter::initGLShaders ( )
static

Create the OpenGL shaders programs used by the StelPainter.

This method needs to be called once at init.

static bool StelPainter::linkProg ( class QOpenGLShaderProgram *  prog,
const QString &  name 
)
static

Link an opengl program and show a message in case of error or warnings.

Returns
true if the link was successful.
void StelPainter::sCylinder ( float  radius,
float  height,
int  slices,
int  orientInside = 0 
)

Re-implementation of gluCylinder : glu is overridden for non-standard projection.

void StelPainter::setArrays ( const Vec3d vertices,
const Vec2f texCoords = NULL,
const Vec3f colorArray = NULL,
const Vec3f normalArray = NULL 
)

convenience method that enable and set all the given arrays.

It is equivalent to calling enableClientState and set the array pointer for each arrays.

void StelPainter::setBlending ( bool  enableBlending,
GLenum  blendSrc = GL_SRC_ALPHA,
GLenum  blendDst = GL_ONE_MINUS_SRC_ALPHA 
)

Enable OpenGL blending.

By default, blending is disabled. The additional parameters specify the blending mode, the default parameters are suitable for "normal" blending operations that you want in most cases. Blending will be automatically disabled when the StelPainter is destroyed.

void StelPainter::setColor ( float  r,
float  g,
float  b,
float  a = 1.f 
)

Set the color to use for subsequent drawing.

void StelPainter::setColorPointer ( int  size,
int  type,
const void *  pointer 
)
inline

use instead of glColorPointer

Definition at line 275 of file StelPainter.hpp.

void StelPainter::setCullFace ( bool  enable)

Set the OpenGL GL_CULL_FACE state, by default face culling is disabled.

void StelPainter::setFont ( const QFont &  font)

Set the font to use for subsequent text drawing.

void StelPainter::setLineSmooth ( bool  enable)

Enables/disables line smoothing. By default, smoothing is disabled.

void StelPainter::setLineWidth ( float  width)

Sets the line width. Default is 1.0f.

void StelPainter::setNormalPointer ( int  type,
const void *  pointer 
)
inline

use instead of glNormalPointer

Definition at line 281 of file StelPainter.hpp.

void StelPainter::setTexCoordPointer ( int  size,
int  type,
const void *  pointer 
)
inline

use instead of glTexCoordPointer

Definition at line 269 of file StelPainter.hpp.

void StelPainter::setVertexPointer ( int  size,
int  type,
const void *  pointer 
)
inline

use instead of glVertexPointer

Definition at line 264 of file StelPainter.hpp.

void StelPainter::sSphereMap ( float  radius,
int  slices,
int  stacks,
float  textureFov = 2.f *M_PI,
int  orientInside = 0 
)

Draw a fisheye texture in a sphere.


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