Stellarium  0.17.0
Public Types | Public Member Functions
ShaderMgr Class Reference

A simple shader cache class that gives us the correct shader depending on desired configuration. More...

#include <ShaderManager.hpp>

Public Types

enum  UNIFORM {
  UNIFORM_MAT_MODELVIEW, UNIFORM_MAT_PROJECTION, UNIFORM_MAT_MVP, UNIFORM_MAT_NORMAL,
  UNIFORM_MAT_SHADOW0, UNIFORM_MAT_SHADOW1, UNIFORM_MAT_SHADOW2, UNIFORM_MAT_SHADOW3,
  UNIFORM_MAT_CUBEMVP, UNIFORM_TEX_DIFFUSE, UNIFORM_TEX_EMISSIVE, UNIFORM_TEX_BUMP,
  UNIFORM_TEX_HEIGHT, UNIFORM_TEX_SHADOW0, UNIFORM_TEX_SHADOW1, UNIFORM_TEX_SHADOW2,
  UNIFORM_TEX_SHADOW3, UNIFORM_MTL_SHININESS, UNIFORM_MTL_ALPHA, UNIFORM_MIX_AMBIENT,
  UNIFORM_MIX_DIFFUSE, UNIFORM_MIX_SPECULAR, UNIFORM_MIX_TORCHDIFFUSE, UNIFORM_MIX_EMISSIVE,
  UNIFORM_LIGHT_DIRECTION_VIEW, UNIFORM_TORCH_ATTENUATION, UNIFORM_VEC_COLOR, UNIFORM_VEC_SPLITDATA,
  UNIFORM_VEC_LIGHTORTHOSCALE, UNIFORM_FLOAT_ALPHA_THRESH
}
 Enum for OpenGL shader uniform locations (faster than accessing by string each time) More...
 

Public Member Functions

QOpenGLShaderProgram * getShader (const GlobalShaderParameters &globals, const S3DScene::Material *mat=Q_NULLPTR)
 Returns a shader that supports the specified operations. Must be called within a GL context.
 
QOpenGLShaderProgram * getDebugShader ()
 Returns the Frustum/Boundingbox Debug shader.
 
QOpenGLShaderProgram * getCubeShader ()
 Returns the cubemapping shader.
 
QOpenGLShaderProgram * getTextureShader ()
 Returns the basic texturing shader.
 
GLint uniformLocation (const QOpenGLShaderProgram *shad, UNIFORM uni)
 Returns the location of this uniform for this shader, or -1 if this uniform does not exist. More...
 
void clearCache ()
 Clears the shaders that have been created by this manager. Must be called within a GL context.
 

Detailed Description

It also contains a uniform cache to avoid unnecessary glUniformLocation calls

Member Enumeration Documentation

Enumerator
UNIFORM_MAT_MODELVIEW 

Defines the ModelView matrix.

UNIFORM_MAT_PROJECTION 

Defines the Projection matrix.

UNIFORM_MAT_MVP 

Defines the combined ModelViewProjection matrix, used if shader needs no separation of the 2 for a bit of a speedup.

UNIFORM_MAT_NORMAL 

Defines the 3x3 Normal matrix (transpose of the inverse MV matrix)

UNIFORM_MAT_SHADOW0 

The shadow matrices (4x 4x4 Matrices)

UNIFORM_MAT_CUBEMVP 

The first cube MVP (array mat4, total 6)

UNIFORM_TEX_DIFFUSE 

Defines the Diffuse texture slot.

UNIFORM_TEX_EMISSIVE 

Defines the emissive texture slot.

UNIFORM_TEX_BUMP 

Defines the Bump texture slot.

UNIFORM_TEX_HEIGHT 

Defines the Height texture slot.

UNIFORM_TEX_SHADOW0 

Shadow maps, 4x.

UNIFORM_MTL_SHININESS 

Material specular shininess (exponent)

UNIFORM_MTL_ALPHA 

Material global transparency.

UNIFORM_MIX_AMBIENT 

(Light ambient + const factor) * Material ambient or diffuse, depending on Illum model

UNIFORM_MIX_DIFFUSE 

Light directional * Material diffuse.

UNIFORM_MIX_SPECULAR 

Light specular * Material specular color.

UNIFORM_MIX_TORCHDIFFUSE 

Torch color * mat diffuse.

UNIFORM_MIX_EMISSIVE 

Material emissive color * light emissive.

UNIFORM_LIGHT_DIRECTION_VIEW 

Light direction vector (view space)

UNIFORM_TORCH_ATTENUATION 

Torchlight attenuation factor (1 float, like in the second model at http://framebunker.com/blog/lighting-2-attenuation/)

UNIFORM_VEC_COLOR 

simple color vec4

UNIFORM_VEC_SPLITDATA 

Squared frustum splits (vec4)

UNIFORM_VEC_LIGHTORTHOSCALE 

Scaling of each frustum's light ortho projection (4xvec2)

UNIFORM_FLOAT_ALPHA_THRESH 

Alpha test threshold.

Member Function Documentation

GLint ShaderMgr::uniformLocation ( const QOpenGLShaderProgram *  shad,
UNIFORM  uni 
)
inline

This is cached to elimate the overhead of the glGet calls