From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Matrixes

Header File: GPU_matrix.h

uniform mat4 b_ModelViewMatrix;
uniform mat4 b_ProjectionMatrix;
uniform mat4 b_ModelViewProjectionMatrix;
uniform mat4 b_TextureMatrix[b_MaxTextureCoords];

The common matrix library is designed based on the legacy OpenGL matrix stack.

In addition it contains re-implementations of GLU functions, some convenience functions, and some functions that are useful for Blender.

Where there is normally a float and double version of the function, only the floating point version is provided and no 'f' suffix is needed.

OpenGL Replacements

Where a GLenum is called for, it has the same value as from OpenGL with the same meaning.

void gpuPushMatrix(void);
void gpuPopMatrix(void);
 
void gpuMatrixMode(GLenum mode);
 
void gpuLoadMatrix(const GLfloat* m);
void gpuLoadIdentity(void);
 
void gpuMultMatrix(const GLfloat*m);
void gpuMultMatrixd(const double *m);
 
void gpuTranslate(GLfloat x, GLfloat y, GLfloat z);
void gpuScale(GLfloat x, GLfloat y, GLfloat z);
void gpuOrtho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat nearVal, GLfloat farVal);
void gpuFrustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat nearVal, GLfloat farVal);

Get Replacements

State is queried without using deprecated GLenum values. For example, glGetFloatv(GL_MODELVIEW_MATRIX, ...) is replaced with gpuGetMatrix(GL_MODELVIEW_MATRIX, ...).

GLenum         gpuGetMatrixMode(void);
const GLfloat* gpuGetMatrix(GLenum type, GLfloat* m);

GLU Replacements

void gpuLookAt(GLfloat eyeX, GLfloat eyeY, GLfloat eyeZ, GLfloat centerX, GLfloat centerY, GLfloat centerZ, GLfloat upX, GLfloat upY, GLfloat upZ);
void gpuProject(const GLfloat obj[3], const GLfloat model[4][4], const GLfloat proj[4][4], const GLint view[4], GLfloat win[3]);
GLboolean gpuUnProject(const GLfloat win[3], const GLfloat model[4][4], const GLfloat proj[4][4], const GLint view[4], GLfloat obj[3]);

No OpenGL or GLU Equivalent

Angles are still given in degrees, not radians.

void gpuRotateVector(GLfloat deg, GLfloat vector[3]);
void gpuRotateAxis(GLfloat deg, char axis);
void gpuRotateRight(char type);
 
void gpuLoadOrtho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat nearVal, GLfloat farVal);
void gpuLoadFrustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat nearVal, GLfloat farVal);