texenvprogram: fix for ARB_draw_buffers.
[mesa.git] / progs / es1 / screen / tri.c
1 /*
2 * Copyright (C) 2009 Chia-I Wu <olv@0xlab.org>
3 *
4 * Based on egltri by
5 * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
6 * Copyright (C) 2008 Brian Paul All Rights Reserved.
7 * Copyright (C) 2008 Jakob Bornecrantz All Rights Reserved.
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 */
26
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <string.h>
30 #include <GLES/gl.h>
31 #include "winsys.h"
32
33 static GLfloat view_rotx = 0.0, view_roty = 0.0, view_rotz = 0.0;
34
35 static void tri_init()
36 {
37 glClearColor(0.4, 0.4, 0.4, 0.0);
38 }
39
40 static void tri_reshape(int width, int height)
41 {
42 GLfloat ar = (GLfloat) width / (GLfloat) height;
43
44 glViewport(0, 0, (GLint) width, (GLint) height);
45
46 glMatrixMode(GL_PROJECTION);
47 glLoadIdentity();
48 glFrustumf(-ar, ar, -1, 1, 5.0, 60.0);
49
50 glMatrixMode(GL_MODELVIEW);
51 glLoadIdentity();
52 glTranslatef(0.0, 0.0, -10.0);
53 }
54
55 static void tri_draw(void *data)
56 {
57 static const GLfloat verts[3][2] = {
58 { -1, -1 },
59 { 1, -1 },
60 { 0, 1 }
61 };
62 static const GLfloat colors[3][4] = {
63 { 1, 0, 0, 1 },
64 { 0, 1, 0, 1 },
65 { 0, 0, 1, 1 }
66 };
67
68 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
69
70 glPushMatrix();
71 glRotatef(view_rotx, 1, 0, 0);
72 glRotatef(view_roty, 0, 1, 0);
73 glRotatef(view_rotz, 0, 0, 1);
74
75 {
76 glVertexPointer(2, GL_FLOAT, 0, verts);
77 glColorPointer(4, GL_FLOAT, 0, colors);
78 glEnableClientState(GL_VERTEX_ARRAY);
79 glEnableClientState(GL_COLOR_ARRAY);
80
81 glDrawArrays(GL_TRIANGLES, 0, 3);
82
83 glDisableClientState(GL_VERTEX_ARRAY);
84 glDisableClientState(GL_COLOR_ARRAY);
85 }
86
87 glPopMatrix();
88 }
89
90 static void tri_run(void)
91 {
92 winsysRun(3.0, tri_draw, NULL);
93 }
94
95 int main(int argc, char *argv[])
96 {
97 EGLint width, height;
98 GLboolean printInfo = GL_FALSE;
99 int i;
100
101 /* parse cmd line args */
102 for (i = 1; i < argc; i++) {
103 if (strcmp(argv[i], "-info") == 0) {
104 printInfo = GL_TRUE;
105 }
106 else {
107 printf("Warning: unknown parameter: %s\n", argv[i]);
108 }
109 }
110
111 if (!winsysInitScreen())
112 exit(1);
113 winsysQueryScreenSize(&width, &height);
114
115 if (printInfo) {
116 printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
117 printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
118 printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
119 printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS));
120 }
121
122 tri_init();
123 tri_reshape(width, height);
124 tri_run();
125
126 winsysFiniScreen();
127
128 return 0;
129 }