summaryrefslogtreecommitdiff
path: root/test/frustum6.c
blob: f520168d96ea6dfa3f6f1288ef1646d79cc339f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <glu3.h>
#include <assert.h>

static GLboolean vec4_equals(const GLUvec4 *a, const GLUvec4 *b)
{
	int i;
	for (i = 0; i < 4; i++) {
		if (a->values[i] != b->values[i])
			return GL_FALSE;
	}

	return GL_TRUE;
}

static void vec4_divide(GLUvec4 *a)
{
	a->values[0] /= a->values[3];
	a->values[1] /= a->values[3];
	a->values[2] /= a->values[3];
	a->values[3] = 1.0;
}

int main(int argc, char **argv)
{
	GLUvec4 a = {{1.0, 2.0, 1.0, 1.0}};
	GLUvec4 b = {{-2.0, 3.0, 1.0, 1.0}};
	GLUvec4 result;
	GLUmat4 identity_frustum;

	(void)argc;
	(void)argv;

	gluFrustum6(&identity_frustum,
		    -1, 1,
		    -1, 1,
		    -1, 1);
	gluMult4m_4v(&result, &identity_frustum, &a);
	vec4_divide(&result);
	assert(vec4_equals(&result, &a));
	gluMult4m_4v(&result, &identity_frustum, &b);
	vec4_divide(&result);
	assert(vec4_equals(&result, &b));

	return 0;
}