Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5098 clevermous 1
/*
2
 * Example of using the 1.1 texture object functions.
3
 * Also, this demo utilizes Mesa's fast texture map path.
4
 *
5
 * Brian Paul   June 1996
6
 */
7
 
8
#include 
9
#include 
10
#include 
11
#include 
12
 
13
#include 
14
#include 
15
#include "ui.h"
16
 
17
static GLuint TexObj[2];
18
static GLfloat Angle = 0.0f;
19
 
20
static int cnt=0,v=0;
21
 
22
void
23
draw(void)
24
{
25
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
26
 
27
  glColor3f(1.0, 1.0, 1.0);
28
 
29
  /* draw first polygon */
30
  glPushMatrix();
31
  glTranslatef(-1.0, 0.0, 0.0);
32
  glRotatef(Angle, 0.0, 0.0, 1.0);
33
  glBindTexture(GL_TEXTURE_2D, TexObj[v]);
34
 
35
  glEnable(GL_TEXTURE_2D);
36
  glBegin(GL_QUADS);
37
  glTexCoord2f(0.0, 0.0);
38
  glVertex2f(-1.0, -1.0);
39
  glTexCoord2f(1.0, 0.0);
40
  glVertex2f(1.0, -1.0);
41
  glTexCoord2f(1.0, 1.0);
42
  glVertex2f(1.0, 1.0);
43
  glTexCoord2f(0.0, 1.0);
44
  glVertex2f(-1.0, 1.0);
45
  glEnd();
46
  glDisable(GL_TEXTURE_2D);
47
  glPopMatrix();
48
 
49
  /* draw second polygon */
50
  glPushMatrix();
51
  glTranslatef(1.0, 0.0, 0.0);
52
  glRotatef(Angle - 90.0, 0.0, 1.0, 0.0);
53
 
54
  glBindTexture(GL_TEXTURE_2D, TexObj[1-v]);
55
 
56
  glEnable(GL_TEXTURE_2D);
57
  glBegin(GL_QUADS);
58
  glTexCoord2f(0.0, 0.0);
59
  glVertex2f(-1.0, -1.0);
60
  glTexCoord2f(1.0, 0.0);
61
  glVertex2f(1.0, -1.0);
62
  glTexCoord2f(1.0, 1.0);
63
  glVertex2f(1.0, 1.0);
64
  glTexCoord2f(0.0, 1.0);
65
  glVertex2f(-1.0, 1.0);
66
  glEnd();
67
  glDisable(GL_TEXTURE_2D);
68
 
69
  glPopMatrix();
70
 
71
  tkSwapBuffers();
72
}
73
 
74
 
75
/* new window size or exposure */
76
void
77
reshape(int width, int height)
78
{
79
  glViewport(0, 0, (GLint) width, (GLint) height);
80
  glMatrixMode(GL_PROJECTION);
81
  glLoadIdentity();
82
  /* glOrtho( -3.0, 3.0, -3.0, 3.0, -10.0, 10.0 ); */
83
  glFrustum(-2.0, 2.0, -2.0, 2.0, 6.0, 20.0);
84
  glMatrixMode(GL_MODELVIEW);
85
  glLoadIdentity();
86
  glTranslatef(0.0, 0.0, -8.0);
87
}
88
 
89
 
90
void bind_texture(int texobj,int image)
91
{
92
  static int width = 8, height = 8;
93
  static int color[2][3]={
94
    {255,0,0},
95
    {0,255,0},
96
  };
97
  GLubyte tex[64][3];
98
  static GLubyte texchar[2][8*8] = {
99
  {
100
    0, 0, 0, 0, 0, 0, 0, 0,
101
    0, 0, 0, 0, 1, 0, 0, 0,
102
    0, 0, 0, 1, 1, 0, 0, 0,
103
    0, 0, 0, 0, 1, 0, 0, 0,
104
    0, 0, 0, 0, 1, 0, 0, 0,
105
    0, 0, 0, 0, 1, 0, 0, 0,
106
    0, 0, 0, 1, 1, 1, 0, 0,
107
    0, 0, 0, 0, 0, 0, 0, 0},
108
  {
109
    0, 0, 0, 0, 0, 0, 0, 0,
110
    0, 0, 0, 2, 2, 0, 0, 0,
111
    0, 0, 2, 0, 0, 2, 0, 0,
112
    0, 0, 0, 0, 0, 2, 0, 0,
113
    0, 0, 0, 0, 2, 0, 0, 0,
114
    0, 0, 0, 2, 0, 0, 0, 0,
115
    0, 0, 2, 2, 2, 2, 0, 0,
116
    0, 0, 0, 0, 0, 0, 0, 0}};
117
 
118
  int i,j;
119
 
120
  glBindTexture(GL_TEXTURE_2D, texobj);
121
 
122
  /* red on white */
123
  for (i = 0; i < height; i++) {
124
    for (j = 0; j < width; j++) {
125
      int p = i * width + j;
126
      if (texchar[image][(height - i - 1) * width + j]) {
127
        tex[p][0] = color[image][0];
128
        tex[p][1] = color[image][1];
129
        tex[p][2] = color[image][2];
130
      } else {
131
        tex[p][0] = 255;
132
        tex[p][1] = 255;
133
        tex[p][2] = 255;
134
      }
135
    }
136
  }
137
  glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0,
138
    GL_RGB, GL_UNSIGNED_BYTE, tex);
139
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
140
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
141
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
142
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
143
  /* end of texture object */
144
}
145
 
146
 
147
 
148
void
149
init(void)
150
{
151
  glEnable(GL_DEPTH_TEST);
152
 
153
  /* Setup texturing */
154
  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
155
  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
156
 
157
  /* generate texture object IDs */
158
  glGenTextures(2, TexObj);
159
  bind_texture(TexObj[0],0);
160
  bind_texture(TexObj[1],1);
161
 
162
}
163
 
164
void
165
idle(void)
166
{
167
 
168
  Angle += 2.0;
169
 
170
  if (++cnt==5) {
171
    cnt=0;
172
    v=!v;
173
  }
174
  draw();
175
}
176
 
177
/* change view angle, exit upon ESC */
178
GLenum key(int k, GLenum mask)
179
{
180
   switch (k) {
181
      case 'q':
182
      case KEY_ESCAPE:
183
          exit(0);
184
   }
185
   return GL_FALSE;
186
}
187
 
188
int main(int argc, char **argv)
189
{
190
    return ui_loop(argc, argv, "texobj");
191
}
192