~ubuntu-branches/ubuntu/quantal/mesa-glw/quantal

« back to all changes in this revision

Viewing changes to progs/redbook/texsub.c

  • Committer: Bazaar Package Importer
  • Author(s): Morten Kjeldgaard
  • Date: 2008-05-06 16:19:15 UTC
  • Revision ID: james.westby@ubuntu.com-20080506161915-uynz7nftmfixu6bq
Tags: upstream-7.0.3
ImportĀ upstreamĀ versionĀ 7.0.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 1993-1997, Silicon Graphics, Inc.
 
3
 * ALL RIGHTS RESERVED
 
4
 * Permission to use, copy, modify, and distribute this software for
 
5
 * any purpose and without fee is hereby granted, provided that the above
 
6
 * copyright notice appear in all copies and that both the copyright notice
 
7
 * and this permission notice appear in supporting documentation, and that
 
8
 * the name of Silicon Graphics, Inc. not be used in advertising
 
9
 * or publicity pertaining to distribution of the software without specific,
 
10
 * written prior permission.
 
11
 *
 
12
 * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
 
13
 * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
 
14
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
 
15
 * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
 
16
 * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
 
17
 * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
 
18
 * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
 
19
 * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
 
20
 * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
 
21
 * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
 
22
 * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
 
23
 * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
 
24
 *
 
25
 * US Government Users Restricted Rights
 
26
 * Use, duplication, or disclosure by the Government is subject to
 
27
 * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
 
28
 * (c)(1)(ii) of the Rights in Technical Data and Computer Software
 
29
 * clause at DFARS 252.227-7013 and/or in similar or successor
 
30
 * clauses in the FAR or the DOD or NASA FAR Supplement.
 
31
 * Unpublished-- rights reserved under the copyright laws of the
 
32
 * United States.  Contractor/manufacturer is Silicon Graphics,
 
33
 * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
 
34
 *
 
35
 * OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
 
36
 */
 
37
 
 
38
/*  texsub.c
 
39
 *  This program texture maps a checkerboard image onto
 
40
 *  two rectangles.  This program clamps the texture, if
 
41
 *  the texture coordinates fall outside 0.0 and 1.0.
 
42
 *  If the s key is pressed, a texture subimage is used to
 
43
 *  alter the original texture.  If the r key is pressed,
 
44
 *  the original texture is restored.
 
45
 */
 
46
#include <GL/glut.h>
 
47
#include <stdlib.h>
 
48
#include <stdio.h>
 
49
 
 
50
#ifdef GL_VERSION_1_1
 
51
/*  Create checkerboard textures  */
 
52
#define checkImageWidth 64
 
53
#define checkImageHeight 64
 
54
#define subImageWidth 16
 
55
#define subImageHeight 16
 
56
static GLubyte checkImage[checkImageHeight][checkImageWidth][4];
 
57
static GLubyte subImage[subImageHeight][subImageWidth][4];
 
58
 
 
59
static GLuint texName;
 
60
 
 
61
void makeCheckImages(void)
 
62
{
 
63
   int i, j, c;
 
64
 
 
65
   for (i = 0; i < checkImageHeight; i++) {
 
66
      for (j = 0; j < checkImageWidth; j++) {
 
67
         c = ((((i&0x8)==0)^((j&0x8)==0)))*255;
 
68
         checkImage[i][j][0] = (GLubyte) c;
 
69
         checkImage[i][j][1] = (GLubyte) c;
 
70
         checkImage[i][j][2] = (GLubyte) c;
 
71
         checkImage[i][j][3] = (GLubyte) 255;
 
72
      }
 
73
   }
 
74
   for (i = 0; i < subImageHeight; i++) {
 
75
      for (j = 0; j < subImageWidth; j++) {
 
76
         c = ((((i&0x4)==0)^((j&0x4)==0)))*255;
 
77
         subImage[i][j][0] = (GLubyte) c;
 
78
         subImage[i][j][1] = (GLubyte) 0;
 
79
         subImage[i][j][2] = (GLubyte) 0;
 
80
         subImage[i][j][3] = (GLubyte) 255;
 
81
      }
 
82
   }
 
83
}
 
84
 
 
85
void init(void)
 
86
{
 
87
   glClearColor (0.0, 0.0, 0.0, 0.0);
 
88
   glShadeModel(GL_FLAT);
 
89
   glEnable(GL_DEPTH_TEST);
 
90
 
 
91
   makeCheckImages();
 
92
   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
 
93
 
 
94
   glGenTextures(1, &texName);
 
95
   glBindTexture(GL_TEXTURE_2D, texName);
 
96
 
 
97
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
 
98
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 
99
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 
100
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 
101
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight,
 
102
                0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);
 
103
}
 
104
 
 
105
void display(void)
 
106
{
 
107
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
108
   glEnable(GL_TEXTURE_2D);
 
109
   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
 
110
   glBindTexture(GL_TEXTURE_2D, texName);
 
111
   glBegin(GL_QUADS);
 
112
   glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
 
113
   glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0);
 
114
   glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0);
 
115
   glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);
 
116
 
 
117
   glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0);
 
118
   glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0);
 
119
   glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421);
 
120
   glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421);
 
121
   glEnd();
 
122
   glFlush();
 
123
   glDisable(GL_TEXTURE_2D);
 
124
}
 
125
 
 
126
void reshape(int w, int h)
 
127
{
 
128
   glViewport(0, 0, (GLsizei) w, (GLsizei) h);
 
129
   glMatrixMode(GL_PROJECTION);
 
130
   glLoadIdentity();
 
131
   gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0);
 
132
   glMatrixMode(GL_MODELVIEW);
 
133
   glLoadIdentity();
 
134
   glTranslatef(0.0, 0.0, -3.6);
 
135
}
 
136
 
 
137
/* ARGSUSED1 */
 
138
void keyboard (unsigned char key, int x, int y)
 
139
{
 
140
   switch (key) {
 
141
      case 's':
 
142
      case 'S':
 
143
         glBindTexture(GL_TEXTURE_2D, texName);
 
144
         glTexSubImage2D(GL_TEXTURE_2D, 0, 12, 44, subImageWidth,
 
145
                         subImageHeight, GL_RGBA,
 
146
                         GL_UNSIGNED_BYTE, subImage);
 
147
         glutPostRedisplay();
 
148
         break;
 
149
      case 'r':
 
150
      case 'R':
 
151
         glBindTexture(GL_TEXTURE_2D, texName);
 
152
         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth,
 
153
                      checkImageHeight, 0, GL_RGBA,
 
154
                      GL_UNSIGNED_BYTE, checkImage);
 
155
         glutPostRedisplay();
 
156
         break;
 
157
      case 27:
 
158
         exit(0);
 
159
         break;
 
160
      default:
 
161
         break;
 
162
   }
 
163
}
 
164
 
 
165
int main(int argc, char** argv)
 
166
{
 
167
   glutInit(&argc, argv);
 
168
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
 
169
   glutInitWindowSize(250, 250);
 
170
   glutInitWindowPosition(100, 100);
 
171
   glutCreateWindow(argv[0]);
 
172
   init();
 
173
   glutDisplayFunc(display);
 
174
   glutReshapeFunc(reshape);
 
175
   glutKeyboardFunc(keyboard);
 
176
   glutMainLoop();
 
177
   return 0;
 
178
}
 
179
#else
 
180
int main(int argc, char** argv)
 
181
{
 
182
    fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0.\n");
 
183
    fprintf (stderr, "If your implementation of OpenGL Version 1.0 has the right extensions,\n");
 
184
    fprintf (stderr, "you may be able to modify this program to make it run.\n");
 
185
    return 0;
 
186
}
 
187
#endif