forked from KolibriOS/kolibrios
switch build system to Tup
git-svn-id: svn://kolibrios.org@5098 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
193
programs/develop/libraries/TinyGL/examples/texobj.c
Normal file
193
programs/develop/libraries/TinyGL/examples/texobj.c
Normal file
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* Example of using the 1.1 texture object functions.
|
||||
* Also, this demo utilizes Mesa's fast texture map path.
|
||||
*
|
||||
* Brian Paul June 1996
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <GL/glx.h>
|
||||
#include <GL/gl.h>
|
||||
#include "ui.h"
|
||||
|
||||
static GLuint TexObj[2];
|
||||
static GLfloat Angle = 0.0f;
|
||||
|
||||
static int cnt=0,v=0;
|
||||
|
||||
void
|
||||
draw(void)
|
||||
{
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
glColor3f(1.0, 1.0, 1.0);
|
||||
|
||||
/* draw first polygon */
|
||||
glPushMatrix();
|
||||
glTranslatef(-1.0, 0.0, 0.0);
|
||||
glRotatef(Angle, 0.0, 0.0, 1.0);
|
||||
glBindTexture(GL_TEXTURE_2D, TexObj[v]);
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2f(0.0, 0.0);
|
||||
glVertex2f(-1.0, -1.0);
|
||||
glTexCoord2f(1.0, 0.0);
|
||||
glVertex2f(1.0, -1.0);
|
||||
glTexCoord2f(1.0, 1.0);
|
||||
glVertex2f(1.0, 1.0);
|
||||
glTexCoord2f(0.0, 1.0);
|
||||
glVertex2f(-1.0, 1.0);
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glPopMatrix();
|
||||
|
||||
/* draw second polygon */
|
||||
glPushMatrix();
|
||||
glTranslatef(1.0, 0.0, 0.0);
|
||||
glRotatef(Angle - 90.0, 0.0, 1.0, 0.0);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, TexObj[1-v]);
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2f(0.0, 0.0);
|
||||
glVertex2f(-1.0, -1.0);
|
||||
glTexCoord2f(1.0, 0.0);
|
||||
glVertex2f(1.0, -1.0);
|
||||
glTexCoord2f(1.0, 1.0);
|
||||
glVertex2f(1.0, 1.0);
|
||||
glTexCoord2f(0.0, 1.0);
|
||||
glVertex2f(-1.0, 1.0);
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
tkSwapBuffers();
|
||||
}
|
||||
|
||||
|
||||
/* new window size or exposure */
|
||||
void
|
||||
reshape(int width, int height)
|
||||
{
|
||||
glViewport(0, 0, (GLint) width, (GLint) height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
/* glOrtho( -3.0, 3.0, -3.0, 3.0, -10.0, 10.0 ); */
|
||||
glFrustum(-2.0, 2.0, -2.0, 2.0, 6.0, 20.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glTranslatef(0.0, 0.0, -8.0);
|
||||
}
|
||||
|
||||
|
||||
void bind_texture(int texobj,int image)
|
||||
{
|
||||
static int width = 8, height = 8;
|
||||
static int color[2][3]={
|
||||
{255,0,0},
|
||||
{0,255,0},
|
||||
};
|
||||
GLubyte tex[64][3];
|
||||
static GLubyte texchar[2][8*8] = {
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 1, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 1, 1, 1, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 2, 2, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 2, 0, 0,
|
||||
0, 0, 0, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 2, 0, 0, 0, 0,
|
||||
0, 0, 2, 2, 2, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0}};
|
||||
|
||||
int i,j;
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texobj);
|
||||
|
||||
/* red on white */
|
||||
for (i = 0; i < height; i++) {
|
||||
for (j = 0; j < width; j++) {
|
||||
int p = i * width + j;
|
||||
if (texchar[image][(height - i - 1) * width + j]) {
|
||||
tex[p][0] = color[image][0];
|
||||
tex[p][1] = color[image][1];
|
||||
tex[p][2] = color[image][2];
|
||||
} else {
|
||||
tex[p][0] = 255;
|
||||
tex[p][1] = 255;
|
||||
tex[p][2] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0,
|
||||
GL_RGB, GL_UNSIGNED_BYTE, tex);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
/* end of texture object */
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
init(void)
|
||||
{
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
/* Setup texturing */
|
||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
|
||||
|
||||
/* generate texture object IDs */
|
||||
glGenTextures(2, TexObj);
|
||||
bind_texture(TexObj[0],0);
|
||||
bind_texture(TexObj[1],1);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
idle(void)
|
||||
{
|
||||
|
||||
Angle += 2.0;
|
||||
|
||||
if (++cnt==5) {
|
||||
cnt=0;
|
||||
v=!v;
|
||||
}
|
||||
draw();
|
||||
}
|
||||
|
||||
/* change view angle, exit upon ESC */
|
||||
GLenum key(int k, GLenum mask)
|
||||
{
|
||||
switch (k) {
|
||||
case 'q':
|
||||
case KEY_ESCAPE:
|
||||
exit(0);
|
||||
}
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
return ui_loop(argc, argv, "texobj");
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user