Files
test/source/blender/gpu/GPU_matrix.h
Mike Erwin 1d469f3780 OpenGL: remove double precision matrix functions
Proper fp64 is a GL 4.x feature. Pretending to support it in our API is just clutter.
2016-09-22 12:19:24 +02:00

103 lines
3.6 KiB
C

#ifndef _GPU_MATRIX_H_
#define _GPU_MATRIX_H_
/*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2012 Blender Foundation.
* All rights reserved.
*
* The Original Code is: all of this file.
*
* Contributor(s): Alexandr Kuznetsov, Jason Wilkins
*
* ***** END GPL LICENSE BLOCK *****
*/
/** \file source/blender/gpu/GPU_matrix.h
* \ingroup gpu
*/
#include "GPU_glew.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef enum eGPUMatrixMode {
GPU_MODELVIEW_MATRIX = 0,
GPU_PROJECTION_MATRIX = 1,
GPU_TEXTURE_MATRIX = 2
} eGPUMatrixMode;
void gpuPushMatrix(eGPUMatrixMode stack);
void gpuPopMatrix(eGPUMatrixMode stack);
void gpuLoadMatrix(eGPUMatrixMode stack, const float m[16]);
const float *gpuGetMatrix(eGPUMatrixMode stack, float m[16]);
void gpuLoadIdentity(eGPUMatrixMode stack);
void gpuMultMatrix(eGPUMatrixMode stack, const float m[16]);
void gpuTranslate(eGPUMatrixMode stack, float x, float y, float z);
void gpuScale(eGPUMatrixMode stack, GLfloat x, GLfloat y, GLfloat z);
void gpuRotateVector(eGPUMatrixMode stack, GLfloat deg, GLfloat vector[3]);
void gpuRotateAxis(eGPUMatrixMode stack, GLfloat deg, char axis);
void gpuRotateRight(eGPUMatrixMode stack, char type);
void gpuOrtho(eGPUMatrixMode stack, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat nearVal, GLfloat farVal);
void gpuFrustum(eGPUMatrixMode stack, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat nearVal, GLfloat farVal);
void gpuLoadOrtho(eGPUMatrixMode stack, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat nearVal, GLfloat farVal);
void gpuLoadFrustum(eGPUMatrixMode stack, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat nearVal, GLfloat farVal);
void gpuLookAt(eGPUMatrixMode stack, 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[16], const GLfloat proj[16], const GLint view[4], GLfloat win[3]);
GLboolean gpuUnProject(const GLfloat win[3], const GLfloat model[16], const GLfloat proj[16], const GLint view[4], GLfloat obj[3]);
void gpu_commit_matrix(void);
void GPU_feedback_vertex_3fv(GLenum type, GLfloat x, GLfloat y, GLfloat z, GLfloat out[3]);
void GPU_feedback_vertex_4fv(GLenum type, GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat out[4]);
#if defined(GLEW_ES_ONLY)
/* ES 2.0 doesn't define these symbolic constants, but the matrix stack replacement library emulates them
* (GL core has deprecated matrix stacks, but it should still be in the header) */
#ifndef GL_MODELVIEW_MATRIX
#define GL_MODELVIEW_MATRIX 0x0BA6
#endif
#ifndef GL_PROJECTION_MATRIX
#define GL_PROJECTION_MATRIX 0x0BA7
#endif
#ifndef GL_TEXTURE_MATRIX
#define GL_TEXTURE_MATRIX 0x0BA8
#endif
#endif
#ifdef __cplusplus
}
#endif
#endif /* GPU_MATRIX_H */