diff --git a/GNUmakefile b/GNUmakefile index 343874d..14f118d 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -68,7 +68,7 @@ L_CFLAGS += -DUSE_X11 L_OBJS += src/backend/x11.o L_LIBS += -lX11 -lXrender -lXext -GL = -lGL +GL = -lGL -lGLU E_LIBS += -lm @@ -80,7 +80,7 @@ L_LDFLAGS += -Wl,--out-implib,src/libMw.lib -static-libgcc L_OBJS += src/backend/gdi.o L_LIBS += -lgdi32 -GL = -lopengl32 +GL = -lopengl32 -lglu32 SO = .dll EXEC = .exe @@ -90,7 +90,7 @@ EXAMPLES = examples/example$(EXEC) examples/rotate$(EXEC) examples/image$(EXEC) ifeq ($(OPENGL),1) L_OBJS += src/widget/opengl.o -EXAMPLES += examples/gltriangle$(EXEC) examples/glgears$(EXEC) examples/glboing$(EXEC) +EXAMPLES += examples/gltriangle$(EXEC) examples/glgears$(EXEC) examples/glboing$(EXEC) examples/glcube$(EXEC) endif ifeq ($(VULKAN),1) diff --git a/examples/glcube.c b/examples/glcube.c new file mode 100644 index 0000000..a82b89a --- /dev/null +++ b/examples/glcube.c @@ -0,0 +1,74 @@ +/* $Id$ */ +#define TITLE "cube" +#include "oldglut.c" + +#include + +static double deg = 0; + +static void draw(void) { + int i; + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glPushMatrix(); + glRotatef(deg, 1, 0, 0); + glRotatef(deg, 0, 1, 0); + glRotatef(deg, 0, 0, 1); + + for(i = 0; i < 6; i++) { + if(i == 0) glColor3f(1, 0, 0); + if(i == 1) glColor3f(0, 1, 0); + if(i == 2) glColor3f(1, 1, 0); + if(i == 3) glColor3f(0, 0, 1); + if(i == 4) glColor3f(1, 0, 1); + if(i == 5) glColor3f(0, 1, 1); + + glBegin(GL_QUADS); + glNormal3f(0, 1, 0); + glVertex3f(-1, 1, -1); + glVertex3f(-1, 1, 1); + glVertex3f(1, 1, 1); + glVertex3f(1, 1, -1); + glEnd(); + + if(i < 3) glRotatef(90, 0, 0, 1); + if(i == 3) glRotatef(90, 1, 0, 0); + if(i == 4) glRotatef(180, 0, 0, 1); + } + glPopMatrix(); +} + +static void idle(void) { + deg += 1.0; +} + +static void reshape(int width, int height) { + GLfloat lpos[4]; + + lpos[0] = 2; + lpos[1] = 2; + lpos[2] = 2; + lpos[3] = 0; + + glViewport(0, 0, width, height); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(60, (double)width / height, 1, 100); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt(2, 2, 2, 0, 0, 0, 0, 1, 0); + + glLightfv(GL_LIGHT0, GL_POSITION, lpos); +} + +static void init(void) { + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glEnable(GL_COLOR_MATERIAL); + glEnable(GL_CULL_FACE); + + glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); +}