Replace GLU with linmath.h in examples
This commit is contained in:
parent
1057bd38cf
commit
dd01dd7bef
@ -63,6 +63,8 @@ GLFW bundles a number of dependencies in the `deps/` directory.
|
|||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
- Changed minimum required CMake version to 2.8.12
|
- Changed minimum required CMake version to 2.8.12
|
||||||
|
- Replaced GLU with [linmath.h](https://github.com/datenwolf/linmath.h) in
|
||||||
|
example programs
|
||||||
- Bugfix: Initialization failed on headless systems
|
- Bugfix: Initialization failed on headless systems
|
||||||
- Bugfix: The cached current context could get out of sync
|
- Bugfix: The cached current context could get out of sync
|
||||||
- [Win32] Renamed hybrid GPU override compile-time option to
|
- [Win32] Renamed hybrid GPU override compile-time option to
|
||||||
|
@ -90,11 +90,10 @@ Once you have Xcode installed, move on to @ref compile_generate.
|
|||||||
To compile GLFW for X11, you need to have the X11 and OpenGL header packages
|
To compile GLFW for X11, you need to have the X11 and OpenGL header packages
|
||||||
installed, as well as the basic development tools like GCC and make. For
|
installed, as well as the basic development tools like GCC and make. For
|
||||||
example, on Ubuntu and other distributions based on Debian GNU/Linux, you need
|
example, on Ubuntu and other distributions based on Debian GNU/Linux, you need
|
||||||
to install the `xorg-dev` and `libglu1-mesa-dev` packages. The former pulls in
|
to install the `xorg-dev` and `libgl1-mesa-dev` packages. The former pulls in
|
||||||
all X.org header packages and the latter pulls in the Mesa OpenGL and GLU
|
all X.org header packages and the latter pulls in the Mesa OpenGL development
|
||||||
packages. GLFW itself doesn't need or use GLU, but some of the examples do.
|
packages. Note that using header files and libraries from Mesa during
|
||||||
Note that using header files and libraries from Mesa during compilation
|
compilation _will not_ tie your binaries to the Mesa implementation of OpenGL.
|
||||||
_will not_ tie your binaries to the Mesa implementation of OpenGL.
|
|
||||||
|
|
||||||
Once you have installed the necessary packages, move on to @ref
|
Once you have installed the necessary packages, move on to @ref
|
||||||
compile_generate.
|
compile_generate.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
link_libraries(glfw "${OPENGL_glu_LIBRARY}")
|
link_libraries(glfw)
|
||||||
|
|
||||||
if (BUILD_SHARED_LIBS)
|
if (BUILD_SHARED_LIBS)
|
||||||
add_definitions(-DGLFW_DLL)
|
add_definitions(-DGLFW_DLL)
|
||||||
|
@ -36,9 +36,10 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#define GLFW_INCLUDE_GLU
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
#include <linmath.h>
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Various declarations and macros
|
* Various declarations and macros
|
||||||
@ -167,28 +168,6 @@ void CrossProduct( vertex_t a, vertex_t b, vertex_t c, vertex_t *n )
|
|||||||
n->z = u1 * v2 - v1 * u2;
|
n->z = u1 * v2 - v1 * u2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* Calculate the angle to be passed to gluPerspective() so that a scene
|
|
||||||
* is visible. This function originates from the OpenGL Red Book.
|
|
||||||
*
|
|
||||||
* Parms : size
|
|
||||||
* The size of the segment when the angle is intersected at "dist"
|
|
||||||
* (ie at the outermost edge of the angle of vision).
|
|
||||||
*
|
|
||||||
* dist
|
|
||||||
* Distance from viewpoint to scene.
|
|
||||||
*****************************************************************************/
|
|
||||||
GLfloat PerspectiveAngle( GLfloat size,
|
|
||||||
GLfloat dist )
|
|
||||||
{
|
|
||||||
GLfloat radTheta, degTheta;
|
|
||||||
|
|
||||||
radTheta = 2.f * (GLfloat) atan2( size / 2.f, dist );
|
|
||||||
degTheta = (180.f * radTheta) / (GLfloat) M_PI;
|
|
||||||
return degTheta;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define BOING_DEBUG 0
|
#define BOING_DEBUG 0
|
||||||
|
|
||||||
@ -233,22 +212,25 @@ void display(void)
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
void reshape( GLFWwindow* window, int w, int h )
|
void reshape( GLFWwindow* window, int w, int h )
|
||||||
{
|
{
|
||||||
|
mat4x4 projection, view;
|
||||||
|
|
||||||
glViewport( 0, 0, (GLsizei)w, (GLsizei)h );
|
glViewport( 0, 0, (GLsizei)w, (GLsizei)h );
|
||||||
|
|
||||||
glMatrixMode( GL_PROJECTION );
|
glMatrixMode( GL_PROJECTION );
|
||||||
glLoadIdentity();
|
mat4x4_perspective( projection,
|
||||||
|
2.f * (float) atan2( RADIUS, 200.f ),
|
||||||
gluPerspective( PerspectiveAngle( RADIUS * 2, 200 ),
|
(float)w / (float)h,
|
||||||
(GLfloat)w / (GLfloat)h,
|
1.f, VIEW_SCENE_DIST );
|
||||||
1.0,
|
glLoadMatrixf((const GLfloat*) projection);
|
||||||
VIEW_SCENE_DIST );
|
|
||||||
|
|
||||||
glMatrixMode( GL_MODELVIEW );
|
glMatrixMode( GL_MODELVIEW );
|
||||||
glLoadIdentity();
|
{
|
||||||
|
vec3 eye = { 0.f, 0.f, VIEW_SCENE_DIST };
|
||||||
gluLookAt( 0.0, 0.0, VIEW_SCENE_DIST,/* eye */
|
vec3 center = { 0.f, 0.f, 0.f };
|
||||||
0.0, 0.0, 0.0, /* center of vision */
|
vec3 up = { 0.f, -1.f, 0.f };
|
||||||
0.0, -1.0, 0.0 ); /* up vector */
|
mat4x4_look_at( view, eye, center, up );
|
||||||
|
}
|
||||||
|
glLoadMatrixf((const GLfloat*) view);
|
||||||
}
|
}
|
||||||
|
|
||||||
void key_callback( GLFWwindow* window, int key, int scancode, int action, int mods )
|
void key_callback( GLFWwindow* window, int key, int scancode, int action, int mods )
|
||||||
|
@ -37,8 +37,8 @@
|
|||||||
|
|
||||||
#include <tinycthread.h>
|
#include <tinycthread.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
#include <linmath.h>
|
||||||
|
|
||||||
#define GLFW_INCLUDE_GLU
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
// Define tokens for GL_EXT_separate_specular_color if not already defined
|
// Define tokens for GL_EXT_separate_specular_color if not already defined
|
||||||
@ -785,17 +785,22 @@ static void draw_scene(GLFWwindow* window, double t)
|
|||||||
double xpos, ypos, zpos, angle_x, angle_y, angle_z;
|
double xpos, ypos, zpos, angle_x, angle_y, angle_z;
|
||||||
static double t_old = 0.0;
|
static double t_old = 0.0;
|
||||||
float dt;
|
float dt;
|
||||||
|
mat4x4 projection;
|
||||||
|
|
||||||
// Calculate frame-to-frame delta time
|
// Calculate frame-to-frame delta time
|
||||||
dt = (float) (t - t_old);
|
dt = (float) (t - t_old);
|
||||||
t_old = t;
|
t_old = t;
|
||||||
|
|
||||||
|
mat4x4_perspective(projection,
|
||||||
|
65.f * (float) M_PI / 180.f,
|
||||||
|
aspect_ratio,
|
||||||
|
1.0, 60.0);
|
||||||
|
|
||||||
glClearColor(0.1f, 0.1f, 0.1f, 1.f);
|
glClearColor(0.1f, 0.1f, 0.1f, 1.f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadMatrixf((const GLfloat*) projection);
|
||||||
gluPerspective(65.0, aspect_ratio, 1.0, 60.0);
|
|
||||||
|
|
||||||
// Setup camera
|
// Setup camera
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
// because I am not a friend of orthogonal projections)
|
// because I am not a friend of orthogonal projections)
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
#define GLFW_INCLUDE_GLU
|
|
||||||
#define GLFW_INCLUDE_GLEXT
|
#define GLFW_INCLUDE_GLEXT
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
@ -23,6 +22,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <linmath.h>
|
||||||
|
|
||||||
|
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// Global variables
|
// Global variables
|
||||||
@ -151,6 +152,7 @@ static void drawGrid(float scale, int steps)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
float x, y;
|
float x, y;
|
||||||
|
mat4x4 view;
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
@ -159,10 +161,13 @@ static void drawGrid(float scale, int steps)
|
|||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
// Setup modelview matrix (flat XY view)
|
// Setup modelview matrix (flat XY view)
|
||||||
glLoadIdentity();
|
{
|
||||||
gluLookAt(0.0, 0.0, 1.0,
|
vec3 eye = { 0.f, 0.f, 1.f };
|
||||||
0.0, 0.0, 0.0,
|
vec3 center = { 0.f, 0.f, 0.f };
|
||||||
0.0, 1.0, 0.0);
|
vec3 up = { 0.f, 1.f, 0.f };
|
||||||
|
mat4x4_look_at(view, eye, center, up);
|
||||||
|
}
|
||||||
|
glLoadMatrixf((const GLfloat*) view);
|
||||||
|
|
||||||
// We don't want to update the Z-buffer
|
// We don't want to update the Z-buffer
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
@ -211,13 +216,14 @@ static void drawAllViews(void)
|
|||||||
const GLfloat light_diffuse[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
const GLfloat light_diffuse[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
const GLfloat light_specular[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
const GLfloat light_specular[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
const GLfloat light_ambient[4] = {0.2f, 0.2f, 0.3f, 1.0f};
|
const GLfloat light_ambient[4] = {0.2f, 0.2f, 0.3f, 1.0f};
|
||||||
double aspect;
|
float aspect;
|
||||||
|
mat4x4 view, projection;
|
||||||
|
|
||||||
// Calculate aspect of window
|
// Calculate aspect of window
|
||||||
if (height > 0)
|
if (height > 0)
|
||||||
aspect = (double) width / (double) height;
|
aspect = (float) width / (float) height;
|
||||||
else
|
else
|
||||||
aspect = 1.0;
|
aspect = 1.f;
|
||||||
|
|
||||||
// Clear screen
|
// Clear screen
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
@ -249,10 +255,13 @@ static void drawAllViews(void)
|
|||||||
glViewport(0, height / 2, width / 2, height / 2);
|
glViewport(0, height / 2, width / 2, height / 2);
|
||||||
glScissor(0, height / 2, width / 2, height / 2);
|
glScissor(0, height / 2, width / 2, height / 2);
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glLoadIdentity();
|
{
|
||||||
gluLookAt(0.0f, 10.0f, 1e-3f, // Eye-position (above)
|
vec3 eye = { 0.f, 10.f, 1e-3f };
|
||||||
0.0f, 0.0f, 0.0f, // View-point
|
vec3 center = { 0.f, 0.f, 0.f };
|
||||||
0.0f, 1.0f, 0.0f); // Up-vector
|
vec3 up = { 0.f, 1.f, 0.f };
|
||||||
|
mat4x4_look_at( view, eye, center, up );
|
||||||
|
}
|
||||||
|
glLoadMatrixf((const GLfloat*) view);
|
||||||
drawGrid(0.5, 12);
|
drawGrid(0.5, 12);
|
||||||
drawScene();
|
drawScene();
|
||||||
|
|
||||||
@ -260,10 +269,13 @@ static void drawAllViews(void)
|
|||||||
glViewport(0, 0, width / 2, height / 2);
|
glViewport(0, 0, width / 2, height / 2);
|
||||||
glScissor(0, 0, width / 2, height / 2);
|
glScissor(0, 0, width / 2, height / 2);
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glLoadIdentity();
|
{
|
||||||
gluLookAt(0.0f, 0.0f, 10.0f, // Eye-position (in front of)
|
vec3 eye = { 0.f, 0.f, 10.f };
|
||||||
0.0f, 0.0f, 0.0f, // View-point
|
vec3 center = { 0.f, 0.f, 0.f };
|
||||||
0.0f, 1.0f, 0.0f); // Up-vector
|
vec3 up = { 0.f, 1.f, 0.f };
|
||||||
|
mat4x4_look_at( view, eye, center, up );
|
||||||
|
}
|
||||||
|
glLoadMatrixf((const GLfloat*) view);
|
||||||
drawGrid(0.5, 12);
|
drawGrid(0.5, 12);
|
||||||
drawScene();
|
drawScene();
|
||||||
|
|
||||||
@ -271,10 +283,13 @@ static void drawAllViews(void)
|
|||||||
glViewport(width / 2, 0, width / 2, height / 2);
|
glViewport(width / 2, 0, width / 2, height / 2);
|
||||||
glScissor(width / 2, 0, width / 2, height / 2);
|
glScissor(width / 2, 0, width / 2, height / 2);
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glLoadIdentity();
|
{
|
||||||
gluLookAt(10.0f, 0.0f, 0.0f, // Eye-position (to the right)
|
vec3 eye = { 10.f, 0.f, 0.f };
|
||||||
0.0f, 0.0f, 0.0f, // View-point
|
vec3 center = { 0.f, 0.f, 0.f };
|
||||||
0.0f, 1.0f, 0.0f); // Up-vector
|
vec3 up = { 0.f, 1.f, 0.f };
|
||||||
|
mat4x4_look_at( view, eye, center, up );
|
||||||
|
}
|
||||||
|
glLoadMatrixf((const GLfloat*) view);
|
||||||
drawGrid(0.5, 12);
|
drawGrid(0.5, 12);
|
||||||
drawScene();
|
drawScene();
|
||||||
|
|
||||||
@ -294,17 +309,23 @@ static void drawAllViews(void)
|
|||||||
|
|
||||||
// Setup perspective projection matrix
|
// Setup perspective projection matrix
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
mat4x4_perspective(projection,
|
||||||
gluPerspective(65.0f, aspect, 1.0f, 50.0f);
|
65.f * (float) M_PI / 180.f,
|
||||||
|
aspect,
|
||||||
|
1.f, 50.f);
|
||||||
|
glLoadMatrixf((const GLfloat*) projection);
|
||||||
|
|
||||||
// Upper right view (PERSPECTIVE VIEW)
|
// Upper right view (PERSPECTIVE VIEW)
|
||||||
glViewport(width / 2, height / 2, width / 2, height / 2);
|
glViewport(width / 2, height / 2, width / 2, height / 2);
|
||||||
glScissor(width / 2, height / 2, width / 2, height / 2);
|
glScissor(width / 2, height / 2, width / 2, height / 2);
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glLoadIdentity();
|
{
|
||||||
gluLookAt(3.0f, 1.5f, 3.0f, // Eye-position
|
vec3 eye = { 3.f, 1.5f, 3.f };
|
||||||
0.0f, 0.0f, 0.0f, // View-point
|
vec3 center = { 0.f, 0.f, 0.f };
|
||||||
0.0f, 1.0f, 0.0f); // Up-vector
|
vec3 up = { 0.f, 1.f, 0.f };
|
||||||
|
mat4x4_look_at( view, eye, center, up );
|
||||||
|
}
|
||||||
|
glLoadMatrixf((const GLfloat*) view);
|
||||||
|
|
||||||
// Configure and enable light source 1
|
// Configure and enable light source 1
|
||||||
glLightfv(GL_LIGHT1, GL_POSITION, light_position);
|
glLightfv(GL_LIGHT1, GL_POSITION, light_position);
|
||||||
|
@ -17,9 +17,10 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#define GLFW_INCLUDE_GLU
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
#include <linmath.h>
|
||||||
|
|
||||||
// Maximum delta T to allow for differential calculations
|
// Maximum delta T to allow for differential calculations
|
||||||
#define MAX_DELTA_T 0.01
|
#define MAX_DELTA_T 0.01
|
||||||
|
|
||||||
@ -363,6 +364,7 @@ void scroll_callback(GLFWwindow* window, double x, double y)
|
|||||||
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
||||||
{
|
{
|
||||||
float ratio = 1.f;
|
float ratio = 1.f;
|
||||||
|
mat4x4 projection;
|
||||||
|
|
||||||
if (height > 0)
|
if (height > 0)
|
||||||
ratio = (float) width / (float) height;
|
ratio = (float) width / (float) height;
|
||||||
@ -372,8 +374,11 @@ void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
|||||||
|
|
||||||
// Change to the projection matrix and set our viewing volume
|
// Change to the projection matrix and set our viewing volume
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
mat4x4_perspective(projection,
|
||||||
gluPerspective(60.0, ratio, 1.0, 1024.0);
|
60.f * (float) M_PI / 180.f,
|
||||||
|
ratio,
|
||||||
|
1.f, 1024.f);
|
||||||
|
glLoadMatrixf((const GLfloat*) projection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user