windows-nt/Source/XPSP1/NT/multimedia/opengl/test/demos/insect/gl42ogl.c

194 lines
3.1 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
#undef GEORGE_DEBUG
#ifdef GEORGE_DEBUG
# include <stdio.h>
#endif
#include <windows.h>
#include <math.h>
#include <stdio.h>
#include <GL/gl.h>
#include "tk.h"
#include "gl42ogl.h"
int windX, windY;
void
getorigin (long *x, long *y) {
*x = windX;
*y = windY;
}
long
getvaluator (Device dev) {
/* gl4: origin in bottom right
*/
long originX, originY;
int mouseX, mouseY;
long val;
/* cost in performance in repeated calls,
* but hey you want an easy port as possible
*/
getorigin (&originX, &originY);
switch (dev) {
case MOUSEX:
tkGetMouseLoc (&mouseX, &mouseY);
val = mouseX + originX;
break;
case MOUSEY:
tkGetMouseLoc (&mouseX, &mouseY);
val = YOUR_SCREEN_MAXY - (mouseY + originY);
break;
default:
fprintf (stderr, "unsupported device: %d\n", dev);
break;
}
return (val);
}
#define PI 3.141593
void
gl_sincos (GLfloat ang, float *sine, float *cosine) {
float rads = ang * PI / 1800;
*sine = (float)sin (rads);
*cosine = (float)cos (rads);
}
void
glGetMatrix (GLfloat mat[]) {
short i;
GLint mode, ptr;
static GLfloat tmp[100];
glGetIntegerv (GL_MATRIX_MODE, &mode);
switch (mode) {
case GL_MODELVIEW:
glGetIntegerv (GL_MODELVIEW_STACK_DEPTH, &ptr);
glGetFloatv (GL_MODELVIEW_MATRIX, tmp);
break;
case GL_PROJECTION:
glGetIntegerv (GL_PROJECTION_STACK_DEPTH, &ptr);
glGetFloatv (GL_PROJECTION_MATRIX, tmp);
break;
case GL_TEXTURE:
glGetIntegerv (GL_TEXTURE_STACK_DEPTH, &ptr);
glGetFloatv (GL_TEXTURE_MATRIX, tmp);
break;
default:
fprintf (stderr, "unknown matrix mode: %d\n", mode);
break;
}
for (i = 0; i < 16; i++)
mat[i] = tmp[i];
}
void
mapcolor (Colorindex index, short r, short g, short b) {
/* gl4 -> rgb = [1,255]
* ogl -> rgb = [0,1]
*/
tkSetOneColor (index, r/255.0, g/255.0, b/255.0);
}
void
polf2i (long n, Icoord parray[][2]) {
register long i;
glBegin (GL_POLYGON);
for (i = 0; i < n; i++)
glVertex2iv (parray[i]);
glEnd();
}
void
polf2 (long n, Coord parray[][2]) {
register long i;
glBegin (GL_POLYGON);
for (i = 0; i < n; i++)
glVertex2fv (parray[i]);
glEnd();
}
void
polfi (long n, Icoord parray[][3]) {
register long i;
glBegin (GL_POLYGON);
for (i = 0; i < n; i++)
glVertex3iv (parray[i]);
glEnd();
}
void
polf (long n, Coord parray[][3]) {
register long i;
glBegin (GL_POLYGON);
for (i = 0; i < n; i++)
glVertex3fv (parray[i]);
glEnd();
}
void
poly2i (long n, Icoord parray[][2]) {
register long i;
glBegin (GL_LINE_LOOP);
for (i = 0; i < n; i++)
glVertex2iv (parray[i]);
glEnd();
}
void
poly2 (long n, Coord parray[][2]) {
register long i;
glBegin (GL_LINE_LOOP);
for (i = 0; i < n; i++)
glVertex2fv (parray[i]);
glEnd();
}
void
polyi (long n, Icoord parray[][3]) {
register long i;
glBegin (GL_LINE_LOOP);
for (i = 0; i < n; i++)
glVertex3iv (parray[i]);
glEnd();
}
void
poly (long n, Coord parray[][3]) {
register long i;
glBegin (GL_LINE_LOOP);
for (i = 0; i < n; i++)
glVertex3fv (parray[i]);
glEnd();
}