unfilledclip.c revision 32001f49
132001f49Smrg/*
232001f49Smrg * Copyright © 2008 Intel Corporation
332001f49Smrg *
432001f49Smrg * Permission is hereby granted, free of charge, to any person obtaining a
532001f49Smrg * copy of this software and associated documentation files (the "Software"),
632001f49Smrg * to deal in the Software without restriction, including without limitation
732001f49Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
832001f49Smrg * and/or sell copies of the Software, and to permit persons to whom the
932001f49Smrg * Software is furnished to do so, subject to the following conditions:
1032001f49Smrg *
1132001f49Smrg * The above copyright notice and this permission notice (including the next
1232001f49Smrg * paragraph) shall be included in all copies or substantial portions of the
1332001f49Smrg * Software.
1432001f49Smrg *
1532001f49Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1632001f49Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1732001f49Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1832001f49Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1932001f49Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2032001f49Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
2132001f49Smrg * IN THE SOFTWARE.
2232001f49Smrg *
2332001f49Smrg * Authors:
2432001f49Smrg *    Eric Anholt <eric@anholt.net>
2532001f49Smrg *
2632001f49Smrg */
2732001f49Smrg
2832001f49Smrg#include <stdlib.h>
2932001f49Smrg#include <GL/glew.h>
3032001f49Smrg#include "glut_wrap.h"
3132001f49Smrg
3232001f49Smrgstatic int win_width, win_height;
3332001f49Smrg
3432001f49Smrg#if 0
3532001f49Smrgstatic void
3632001f49Smrgline(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
3732001f49Smrg{
3832001f49Smrg	glBegin(GL_LINES);
3932001f49Smrg	glVertex2f(x1, y1);
4032001f49Smrg	glVertex2f(x2, y2);
4132001f49Smrg	glEnd();
4232001f49Smrg}
4332001f49Smrg#endif
4432001f49Smrg
4532001f49Smrgstatic void
4632001f49Smrgline3(GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2)
4732001f49Smrg{
4832001f49Smrg	glBegin(GL_LINES);
4932001f49Smrg	glVertex3f(x1, y1, z1);
5032001f49Smrg	glVertex3f(x2, y2, z2);
5132001f49Smrg	glEnd();
5232001f49Smrg}
5332001f49Smrg
5432001f49Smrgstatic void
5532001f49Smrgdisplay(void)
5632001f49Smrg{
5732001f49Smrg	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
5832001f49Smrg
5932001f49Smrg	glClearColor(0.0, 0.0, 0.0, 0.0);
6032001f49Smrg	glClear(GL_COLOR_BUFFER_BIT);
6132001f49Smrg
6232001f49Smrg	glColor3f(1.0, 0.0, 0.0);
6332001f49Smrg	/* clipped along xmin */
6432001f49Smrg	glBegin(GL_TRIANGLES);
6532001f49Smrg	glVertex2f(-20, win_height / 2 - 20);
6632001f49Smrg	glVertex2f(20, win_height / 2);
6732001f49Smrg	glVertex2f(-20, win_height / 2 + 20);
6832001f49Smrg	glEnd();
6932001f49Smrg
7032001f49Smrg	glColor3f(0.0, 1.0, 0.0);
7132001f49Smrg	/* clipped along ymax */
7232001f49Smrg	glBegin(GL_TRIANGLES);
7332001f49Smrg	glVertex2f(win_height / 2 - 20, win_height + 20);
7432001f49Smrg	glVertex2f(win_height / 2,      win_height - 20);
7532001f49Smrg	glVertex2f(win_height / 2 + 20, win_height + 20);
7632001f49Smrg	glEnd();
7732001f49Smrg
7832001f49Smrg	glColor3f(0.0, 0.0, 1.0);
7932001f49Smrg	/* clipped along xmax */
8032001f49Smrg	glBegin(GL_TRIANGLES);
8132001f49Smrg	glVertex2f(win_height + 20, win_height / 2 - 20);
8232001f49Smrg	glVertex2f(win_height - 20, win_height / 2);
8332001f49Smrg	glVertex2f(win_height + 20, win_height / 2 + 20);
8432001f49Smrg	glEnd();
8532001f49Smrg
8632001f49Smrg	glColor3f(1.0, 1.0, 1.0);
8732001f49Smrg	/* clipped along ymin */
8832001f49Smrg	glBegin(GL_TRIANGLES);
8932001f49Smrg	glVertex2f(win_height / 2 - 20, -20);
9032001f49Smrg	glVertex2f(win_height / 2,       20);
9132001f49Smrg	glVertex2f(win_height / 2 + 20, -20);
9232001f49Smrg	glEnd();
9332001f49Smrg
9432001f49Smrg	/* clipped along near */
9532001f49Smrg	glColor3f(1.0, 0.0, 1.0);
9632001f49Smrg	glBegin(GL_TRIANGLES);
9732001f49Smrg	glVertex3f(win_width / 2 - 20, win_height / 2 - 20,  0.5);
9832001f49Smrg	glVertex3f(win_width / 2 - 40, win_height / 2,      -0.5);
9932001f49Smrg	glVertex3f(win_width / 2 - 20, win_height / 2 + 20,  0.5);
10032001f49Smrg	glEnd();
10132001f49Smrg
10232001f49Smrg	/* clipped along far */
10332001f49Smrg	glColor3f(0.0, 1.0, 1.0);
10432001f49Smrg	glBegin(GL_TRIANGLES);
10532001f49Smrg	glVertex3f(win_width / 2 + 20, win_height / 2 - 20, 0.5);
10632001f49Smrg	glVertex3f(win_width / 2 + 40, win_height / 2,      1.5);
10732001f49Smrg	glVertex3f(win_width / 2 + 20, win_height / 2 + 20, 0.5);
10832001f49Smrg	glEnd();
10932001f49Smrg
11032001f49Smrg	/* entirely clipped along near/far */
11132001f49Smrg	glColor3f(.5, .5, .5);
11232001f49Smrg	glBegin(GL_TRIANGLES);
11332001f49Smrg	glVertex3f(win_width / 2 - 20, win_height / 2 + 20, -0.5);
11432001f49Smrg	glVertex3f(win_width / 2,      win_height / 2 + 40, -0.5);
11532001f49Smrg	glVertex3f(win_width / 2 + 20, win_height / 2 + 20, -0.5);
11632001f49Smrg	glEnd();
11732001f49Smrg
11832001f49Smrg	glBegin(GL_TRIANGLES);
11932001f49Smrg	glVertex3f(win_width / 2 - 20, win_height / 2 - 20, 1.5);
12032001f49Smrg	glVertex3f(win_width / 2,      win_height / 2 - 40, 1.5);
12132001f49Smrg	glVertex3f(win_width / 2 + 20, win_height / 2 - 20, 1.5);
12232001f49Smrg	glEnd();
12332001f49Smrg
12432001f49Smrg	glColor3f(.5, .5, .5);
12532001f49Smrg	line3(win_width / 2, win_height / 2 - 20, 1.5,
12632001f49Smrg	      win_width / 2, win_height / 2 + 20, 1.5);
12732001f49Smrg
12832001f49Smrg	glColor3f(1.0, 1.0, 0.0);
12932001f49Smrg	/* clipped along both x and y limits */
13032001f49Smrg	glBegin(GL_TRIANGLES); /* xmin, ymin */
13132001f49Smrg	glVertex2f(-5, 20);
13232001f49Smrg	glVertex2f(20, 20);
13332001f49Smrg	glVertex2f(20, -5);
13432001f49Smrg	glEnd();
13532001f49Smrg	glBegin(GL_TRIANGLES); /* xmin, ymax */
13632001f49Smrg	glVertex2f(-5, win_height - 20);
13732001f49Smrg	glVertex2f(20, win_height - 20);
13832001f49Smrg	glVertex2f(20, win_height + 5);
13932001f49Smrg	glEnd();
14032001f49Smrg	glBegin(GL_TRIANGLES); /* xmax, ymax */
14132001f49Smrg	glVertex2f(win_width - 20, win_height + 5);
14232001f49Smrg	glVertex2f(win_width - 20, win_height - 20);
14332001f49Smrg	glVertex2f(win_width + 5,  win_height - 20);
14432001f49Smrg	glEnd();
14532001f49Smrg	glBegin(GL_TRIANGLES); /* xmax, ymin */
14632001f49Smrg	glVertex2f(win_width + 5, 20);
14732001f49Smrg	glVertex2f(win_width - 20, 20);
14832001f49Smrg	glVertex2f(win_width - 20, -5);
14932001f49Smrg	glEnd();
15032001f49Smrg
15132001f49Smrg	glutSwapBuffers();
15232001f49Smrg}
15332001f49Smrg
15432001f49Smrgstatic void
15532001f49Smrgreshape(int width, int height)
15632001f49Smrg{
15732001f49Smrg	win_width = width;
15832001f49Smrg	win_height = height;
15932001f49Smrg	glViewport(0, 0, width, height);
16032001f49Smrg
16132001f49Smrg	glMatrixMode(GL_PROJECTION);
16232001f49Smrg	glLoadIdentity();
16332001f49Smrg	glOrtho(0, win_width, 0, win_height, 0.0, -1.0);
16432001f49Smrg
16532001f49Smrg	glMatrixMode(GL_MODELVIEW);
16632001f49Smrg	glLoadIdentity();
16732001f49Smrg	glTranslatef(.25, .25, 0);
16832001f49Smrg}
16932001f49Smrg
17032001f49Smrgstatic void key( unsigned char key, int x, int y )
17132001f49Smrg{
17232001f49Smrg	(void) x;
17332001f49Smrg	(void) y;
17432001f49Smrg
17532001f49Smrg	switch (key) {
17632001f49Smrg	case 27: /* esc */
17732001f49Smrg		exit(0);
17832001f49Smrg		break;
17932001f49Smrg	}
18032001f49Smrg
18132001f49Smrg	glutPostRedisplay();
18232001f49Smrg}
18332001f49Smrg
18432001f49Smrgstatic void
18532001f49Smrginit(void)
18632001f49Smrg{
18732001f49Smrg}
18832001f49Smrg
18932001f49Smrgint
19032001f49Smrgmain(int argc, char *argv[])
19132001f49Smrg{
19232001f49Smrg	win_width = 200;
19332001f49Smrg	win_height = 200;
19432001f49Smrg
19532001f49Smrg	glutInit(&argc, argv);
19632001f49Smrg	glutInitWindowPosition(0, 0);
19732001f49Smrg	glutInitWindowSize(win_width, win_height);
19832001f49Smrg	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
19932001f49Smrg	glutCreateWindow(argv[0]);
20032001f49Smrg        glewInit();
20132001f49Smrg	glutReshapeFunc(reshape);
20232001f49Smrg	glutKeyboardFunc(key);
20332001f49Smrg	glutDisplayFunc(display);
20432001f49Smrg
20532001f49Smrg	init();
20632001f49Smrg
20732001f49Smrg	glutMainLoop();
20832001f49Smrg	return 0;
20932001f49Smrg}
210