Stellarium 0.12.0
Home · All Namespaces · All Classes · Functions · Coding Style · Scripting · Plugins · Renderer · File Structure

StelQGLRenderer Class Reference

Base class for renderer based on OpenGL and at the same time Qt's QGL. More...

#include <StelQGLRenderer.hpp>

List of all members.

Classes

struct  FrameTimeQueue
 Stores times (relative to start) of most recent frames in a queue (using a circular array).
struct  TexturedVertex
 2D vertex with a position and texture coordinates.

Public Member Functions

 StelQGLRenderer (QGraphicsView *const parent, const bool pvrSupported)
 Construct a StelQGLRenderer.
virtual bool init ()
 Initialize the renderer.
virtual QImage screenshot ()
 Take a screenshot and return it.
virtual void renderFrame (StelRenderClient &renderClient)
 Render a frame.
virtual void viewportHasBeenResized (const QSize size)
 Must be called once at startup and on every GL viewport resize, specifying new size.
virtual QSize getViewportSize () const
 Get size of the viewport in pixels.
StelIndexBuffercreateIndexBuffer (const IndexType type)
 Create an empty index buffer and return a pointer to it.
virtual void drawText (const TextParams &params)
 Draw text with specified parameters.
virtual void setFont (const QFont &font)
 Set font to use for drawing text.
virtual void bindTextureBackend (StelTextureBackend *const textureBackend, const int textureUnit)
 Bind a texture (following draw calls will use this texture on specified texture unit).
void ensureTextureNotBound (StelTextureBackend *const textureBackend)
 Must be called by texture backend destructor to ensure we don't keep any pointers to it.
virtual void destroyTextureBackend (StelTextureBackend *const textureBackend)
 Destroy a StelTextureBackend.
virtual void setGlobalColor (const Vec4f &color)
 Set the global vertex color.
virtual void setCulledFaces (const CullFace cullFace)
 Set which faces (triangles) should be culled.
virtual void setBlendMode (const BlendMode mode)
 Set blend mode.
virtual void setDepthTest (const DepthTest test)
 Set depth test mode.
virtual void clearDepthBuffer ()
 Clear the depth buffer to zeroes, removing any depth information.
virtual void setStencilTest (const StencilTest test)
 Set stencil test mode.
virtual void clearStencilBuffer ()
 Clear the stencil buffer to zeroes, removing any stencil information.
virtual void swapBuffers ()
 Swap front and back buffers.
virtual void drawRect (const float x, const float y, const float width, const float height, const float angle=0.0f)
 Draw a rectangle to the screen.
virtual void drawTexturedRect (const float x, const float y, const float width, const float height, const float angle=0.0f)
 Draw a textured rectangle to the screen.
virtual StelRendererStatisticsgetStatistics ()
 Access statistics data.
virtual void makeGLContextCurrent ()
 Make Stellarium GL context the currently used GL context. Call this before GL calls.
QGLContext * getGLContext ()
 Used to access the GL context.
QGLFunctions & getGLFunctions ()
 Used for GL/GLES-compatible function wrappers and to determine which GL features are available.
QThread * getLoaderThread ()
 Get a pointer to the thread used for loading graphics data (e.g. textures).
const Vec4fgetGlobalColor () const
 Get global vertex color (used for drawing).
virtual bool areNonPowerOfTwoTexturesSupported () const =0
 Returns true if non-power-of-two textures are supported, false otherwise.
QPaintEngine::Type qtPaintEngineType () const
 Get the paint engine type used for Qt drawing.

Protected Member Functions

virtual StelTextureBackendcreateTextureBackend (const QString &filename, const TextureParams &params, const TextureLoadingMode loadingMode)
 Implementation of createTexture.
virtual StelTextureBackendcreateTextureBackend (QImage &image, const TextureParams &params)
 Implementation of createTexture loading from image.
virtual StelTextureBackendcreateTextureBackend (const void *data, const QSize size, const TextureDataFormat format, const TextureParams &params)
 Implementation of createTexture loading from raw data.
virtual StelTextureBackendgetViewportTextureBackend ()
 Implementation of getViewportTexture.
virtual int getTextureUnitCountBackend ()=0
 Return the number of texture units (implementation).
virtual void invariant () const
 Asserts that we're in a valid state.
void setupGLState (StelProjector *projector)
 Set up GL state common between the GL1 and GL2 backends before drawing.
void restoreGLState (StelProjector *projector)
 Reset GL state after drawing.
template<class VBufferBackend >
void updateDrawStatistics (VBufferBackend *vertexBuffer, StelQGLIndexBuffer *indexBuffer)
 Update statistics in a drawVertexBufferBackend() call.

Protected Attributes

QString glVendorString
 OpenGL vendor string (used to enable/disable features based on driver).
QString glRendererString
 OpenGL renderer (usually GPU) string (can be used to enable/disable features based on GPU).
StelRendererStatistics statistics
 Statistics collected during program run (such as estimated texture memory usage, etc.).
QGLFunctions gl
 Wraps some GL functions for compatibility across GL and GLES.

Detailed Description

Base class for renderer based on OpenGL and at the same time Qt's QGL.

Note:
This is an internal class of the Renderer subsystem and should not be used elsewhere.

Definition at line 83 of file StelQGLRenderer.hpp.


Constructor & Destructor Documentation

StelQGLRenderer::StelQGLRenderer ( QGraphicsView *const   parent,
const bool  pvrSupported 
) [inline]

Construct a StelQGLRenderer.

Parameters:
parent Parent widget for the renderer's GL widget.
pvrSupported Are .pvr (PVRTC - PowerVR hardware) textures supported on this platform? This should be true for mobile platforms with PowerVR GPUs.

Definition at line 91 of file StelQGLRenderer.hpp.


Member Function Documentation

virtual bool StelQGLRenderer::areNonPowerOfTwoTexturesSupported (  )  const [pure virtual]

Returns true if non-power-of-two textures are supported, false otherwise.

Implemented in StelQGL1Renderer, and StelQGL2Renderer.

virtual void StelQGLRenderer::bindTextureBackend ( StelTextureBackend *const   textureBackend,
const int  textureUnit 
) [virtual]

Bind a texture (following draw calls will use this texture on specified texture unit).

Parameters:
textureBackend Texture to bind.
textureUnit Texture unit to use. If multitexturing is not supported, binds to texture units other than 0 are ignored.

Implements StelRenderer.

virtual void StelQGLRenderer::clearDepthBuffer (  )  [inline, virtual]

Clear the depth buffer to zeroes, removing any depth information.

Implements StelRenderer.

Definition at line 256 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::clearStencilBuffer (  )  [inline, virtual]

Clear the stencil buffer to zeroes, removing any stencil information.

Implements StelRenderer.

Definition at line 273 of file StelQGLRenderer.hpp.

StelIndexBuffer* StelQGLRenderer::createIndexBuffer ( const IndexType  type  )  [inline, virtual]

Create an empty index buffer and return a pointer to it.

Implements StelRenderer.

Definition at line 199 of file StelQGLRenderer.hpp.

virtual StelTextureBackend* StelQGLRenderer::createTextureBackend ( const void *  data,
const QSize  size,
const TextureDataFormat  format,
const TextureParams params 
) [protected, virtual]

Implementation of createTexture loading from raw data.

Returns texture backend to be wrapped in a StelTextureNew. Must not fail, but can return a backend in error state.

See also:
createTexture

Implements StelRenderer.

virtual StelTextureBackend* StelQGLRenderer::createTextureBackend ( QImage &  image,
const TextureParams params 
) [protected, virtual]

Implementation of createTexture loading from image.

Returns texture backend to be wrapped in a StelTextureNew. Must not fail, but can return a backend in error state.

See also:
createTexture

Implements StelRenderer.

virtual StelTextureBackend* StelQGLRenderer::createTextureBackend ( const QString &  filename,
const TextureParams params,
const TextureLoadingMode  loadingMode 
) [protected, virtual]

Implementation of createTexture.

Returns texture backend to be wrapped in a StelTextureNew. Must not fail, but can return a backend in error state.

See also:
createTexture

Implements StelRenderer.

virtual void StelQGLRenderer::destroyTextureBackend ( StelTextureBackend *const   backend  )  [virtual]

Destroy a StelTextureBackend.

The backend might be destroyed, but the implementation might also cache the texture, not destroying it if it has muliple users.

Implements StelRenderer.

virtual void StelQGLRenderer::drawRect ( const float  x,
const float  y,
const float  width,
const float  height,
const float  angle = 0.0f 
) [virtual]

Draw a rectangle to the screen.

The rectangle will be colored by the global color (which can be specified by setGlobalColor()).

The rectangle can be rotated around its center by an angle specified in degrees.

Parameters:
x X position of the top left corner on the screen in pixels.
y Y position of the top left corner on the screen in pixels.
width Width in pixels.
height Height in pixels.
angle Angle to rotate the rectangle around its center in degrees.

Implements StelRenderer.

virtual void StelQGLRenderer::drawText ( const TextParams params  )  [virtual]

Draw text with specified parameters.

Parameters are specified by a builder-style struct.

Examples:

 // Note that text position and string must be always specified, so they 
 // are in the constructor.
 // Draw with default parameters (no rotation, no shift, no gravity, 2D projection).
 renderer->drawText(TextParams(16, 16, "Hello World"));
 // Rotate by 30 degrees.
 renderer->drawText(TextParams(16, 16 "Hello World!").angleDegrees(30.0f));
 // Rotate by 30 degrees and shift by (8, 4) in rotated direction.
 renderer->drawText(TextParams(16, 16 "Hello World!").angleDegrees(30.0f).shift(8.0f, 4.0f));
Parameters:
params Parameters of the text to draw.
See also:
TextParams

Implements StelRenderer.

virtual void StelQGLRenderer::drawTexturedRect ( const float  x,
const float  y,
const float  width,
const float  height,
const float  angle = 0.0f 
) [virtual]

Draw a textured rectangle to the screen.

The rectangle will be textured by the currently bound texture.

The rectangle can be rotated around its center by an angle specified in degrees.

Parameters:
x X position of the top left corner on the screen in pixels.
y Y position of the top left corner on the screen in pixels.
width Width in pixels.
height Height in pixels.
angle Angle to rotate the rectangle around its center in degrees.

Implements StelRenderer.

void StelQGLRenderer::ensureTextureNotBound ( StelTextureBackend *const   textureBackend  )  [inline]

Must be called by texture backend destructor to ensure we don't keep any pointers to it.

Not called by destroyTextureBackend as texture backends are sometimes constructed and destroyed internally (e.g. by drawText).

Definition at line 221 of file StelQGLRenderer.hpp.

QGLContext* StelQGLRenderer::getGLContext (  )  [inline]

Used to access the GL context.

Safer than making glContext protected as derived classes can't overwrite it.

Definition at line 315 of file StelQGLRenderer.hpp.

QGLFunctions& StelQGLRenderer::getGLFunctions (  )  [inline]

Used for GL/GLES-compatible function wrappers and to determine which GL features are available.

Definition at line 321 of file StelQGLRenderer.hpp.

const Vec4f& StelQGLRenderer::getGlobalColor (  )  const [inline]

Get global vertex color (used for drawing).

Definition at line 333 of file StelQGLRenderer.hpp.

QThread* StelQGLRenderer::getLoaderThread (  )  [inline]

Get a pointer to the thread used for loading graphics data (e.g. textures).

Definition at line 327 of file StelQGLRenderer.hpp.

virtual StelRendererStatistics& StelQGLRenderer::getStatistics (  )  [inline, virtual]

Access statistics data.

Contents are backend specific - might include thing like vertices per frame, estimated texture memory, etc. .

User code might add its own statistics as well (e.g. StelSkyDrawer).

Implements StelRenderer.

Definition at line 294 of file StelQGLRenderer.hpp.

virtual int StelQGLRenderer::getTextureUnitCountBackend (  )  [protected, pure virtual]

Return the number of texture units (implementation).

Implemented in StelQGL1Renderer, and StelQGL2Renderer.

virtual QSize StelQGLRenderer::getViewportSize (  )  const [inline, virtual]

Get size of the viewport in pixels.

Implements StelRenderer.

Definition at line 193 of file StelQGLRenderer.hpp.

virtual StelTextureBackend* StelQGLRenderer::getViewportTextureBackend (  )  [inline, protected, virtual]

Implementation of getViewportTexture.

See also:
getViewportTexture.

Implements StelRenderer.

Definition at line 367 of file StelQGLRenderer.hpp.

virtual bool StelQGLRenderer::init (  )  [inline, virtual]

Initialize the renderer.

Must be called before any other methods.

Returns:
true on success, false if there was an error.

Implements StelRenderer.

Reimplemented in StelQGL1Renderer, and StelQGL2Renderer.

Definition at line 163 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::invariant (  )  const [inline, protected, virtual]

Asserts that we're in a valid state.

Overriding methods should also call StelQGLRenderer::invariant().

Reimplemented in StelQGL1Renderer, and StelQGL2Renderer.

Definition at line 380 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::makeGLContextCurrent (  )  [inline, virtual]

Make Stellarium GL context the currently used GL context. Call this before GL calls.

Definition at line 300 of file StelQGLRenderer.hpp.

QPaintEngine::Type StelQGLRenderer::qtPaintEngineType (  )  const [inline]

Get the paint engine type used for Qt drawing.

Definition at line 342 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::renderFrame ( StelRenderClient renderClient  )  [virtual]

Render a frame.

This might not render the entire frame - if rendering takes too long, the backend may (or may not) suspend the rendering to finish it next time renderFrame is called.

Parameters:
renderClient Allows the renderer to draw the scene in parts.
See also:
StelRenderClient

Implements StelRenderer.

void StelQGLRenderer::restoreGLState ( StelProjector projector  )  [inline, protected]

Reset GL state after drawing.

Definition at line 485 of file StelQGLRenderer.hpp.

virtual QImage StelQGLRenderer::screenshot (  )  [inline, virtual]

Take a screenshot and return it.

Implements StelRenderer.

Definition at line 178 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::setBlendMode ( const BlendMode  blendMode  )  [inline, virtual]

Set blend mode.

Used to enable/disable transparency and similar effects.

On startup, the blend mode is BlendMode_None.

Implements StelRenderer.

Definition at line 246 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::setCulledFaces ( const CullFace  cullFace  )  [inline, virtual]

Set which faces (triangles) should be culled.

Front faces are usually those whose vertices are in counter-clockwise order, but a StelProjector might flip this order after projection. If such a StelProjector is used with StelRenderer::drawVertexBuffer(), front faces will be clock wise. This doesn't affect the user in any way as the projection is done inside renderer.

However, if doing manual projection and sending the already projected vertices for drawing, this order will be flipped, so previously counter-clockwise(front) faces will be clock-wise (back) faces, so if culling is used, opposite face should be used with setCulledFaces().

Whether a StelProjector changes clockwise-counterclockwise winding can be determined by StelProjector::flipFrontBackFace().

Implements StelRenderer.

Definition at line 241 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::setDepthTest ( const DepthTest  test  )  [inline, virtual]

Set depth test mode.

Depth test is implemented to be as specific as possible, only supporting what Stellarium needs. This might be counterintuitive, as much of the power of OpenGL is removed. However, this makes it easier to implement different Renderer backends that might not necessarily be based on OpenGL.

Implements StelRenderer.

Definition at line 251 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::setFont ( const QFont &  font  )  [inline, virtual]

Set font to use for drawing text.

Implements StelRenderer.

Definition at line 207 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::setGlobalColor ( const Vec4f color  )  [inline, virtual]

Set the global vertex color.

Default color is white.

This color is used when rendering vertex formats that have no vertex color attribute, lines, non-textured rectangles, etc. .

Per-vertex color completely overrides this (this is to keep behavior from before the GL refactor unchanged).

Note:
Color channel values can be outside of the 0-1 range.

Implements StelRenderer.

Definition at line 236 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::setStencilTest ( const StencilTest  test  )  [inline, virtual]

Set stencil test mode.

Stencil test is implemented to be as specific as possible, only supporting what Stellarium needs. This might be counterintuitive, as much of the power of OpenGL is removed. However, this makes it easier to implement different Renderer backends that might not necessarily be based on OpenGL.

Implements StelRenderer.

Definition at line 268 of file StelQGLRenderer.hpp.

void StelQGLRenderer::setupGLState ( StelProjector projector  )  [inline, protected]

Set up GL state common between the GL1 and GL2 backends before drawing.

Definition at line 392 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::swapBuffers (  )  [inline, virtual]

Swap front and back buffers.

This is only needed before the Renderer takes control of frame start/end, e.g. during loading at startup.

Implements StelRenderer.

Definition at line 279 of file StelQGLRenderer.hpp.

template<class VBufferBackend >
void StelQGLRenderer::updateDrawStatistics ( VBufferBackend *  vertexBuffer,
StelQGLIndexBuffer indexBuffer 
) [inline, protected]

Update statistics in a drawVertexBufferBackend() call.

Parameters:
vertexBuffer Vertex buffer drawn.
indexBuffer Index buffer (if any), specifying which vertices to draw.

Definition at line 506 of file StelQGLRenderer.hpp.

virtual void StelQGLRenderer::viewportHasBeenResized ( const QSize  size  )  [inline, virtual]

Must be called once at startup and on every GL viewport resize, specifying new size.

Implements StelRenderer.

Definition at line 186 of file StelQGLRenderer.hpp.


Member Data Documentation

QGLFunctions StelQGLRenderer::gl [protected]

Wraps some GL functions for compatibility across GL and GLES.

Definition at line 791 of file StelQGLRenderer.hpp.

QString StelQGLRenderer::glRendererString [protected]

OpenGL renderer (usually GPU) string (can be used to enable/disable features based on GPU).

Definition at line 352 of file StelQGLRenderer.hpp.

QString StelQGLRenderer::glVendorString [protected]

OpenGL vendor string (used to enable/disable features based on driver).

Definition at line 349 of file StelQGLRenderer.hpp.

Statistics collected during program run (such as estimated texture memory usage, etc.).

Definition at line 355 of file StelQGLRenderer.hpp.


The documentation for this class was generated from the following file:
Generated on Thu Jan 31 14:05:46 2013 for Stellarium by  doxygen 1.6.3