futzing around with opengl
This commit is contained in:
parent
3d24f88327
commit
bb504b7c61
1
Makefile
1
Makefile
@ -1,5 +1,6 @@
|
|||||||
all:
|
all:
|
||||||
cd ./basics && $(MAKE)
|
cd ./basics && $(MAKE)
|
||||||
|
cd ./opengl && $(MAKE)
|
||||||
|
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
|
19
opengl/Makefile
Normal file
19
opengl/Makefile
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
CPPC := g++
|
||||||
|
BINDIR := $(PWD)/bin
|
||||||
|
|
||||||
|
ALL_TARGETS = $(BINDIR)/demo
|
||||||
|
|
||||||
|
|
||||||
|
all: $(ALL_TARGETS)
|
||||||
|
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -vf ./bin/*
|
||||||
|
|
||||||
|
|
||||||
|
$(BINDIR)/demo:
|
||||||
|
cd src && \
|
||||||
|
gcc -o $(BINDIR)/demo demo.c -lX11 -lGL -lGLU
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY: all clean
|
92
opengl/src/demo.c
Normal file
92
opengl/src/demo.c
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<X11/X.h>
|
||||||
|
#include<X11/Xlib.h>
|
||||||
|
#include<GL/gl.h>
|
||||||
|
#include<GL/glx.h>
|
||||||
|
#include<GL/glu.h>
|
||||||
|
|
||||||
|
Display *dpy;
|
||||||
|
Window root;
|
||||||
|
GLint att[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None };
|
||||||
|
XVisualInfo *vi;
|
||||||
|
Colormap cmap;
|
||||||
|
XSetWindowAttributes swa;
|
||||||
|
Window win;
|
||||||
|
GLXContext glc;
|
||||||
|
XWindowAttributes gwa;
|
||||||
|
XEvent xev;
|
||||||
|
|
||||||
|
|
||||||
|
void DrawAQuad() {
|
||||||
|
glClearColor(1.0, 1.0, 1.0, 1.0);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
glOrtho(-1., 1., -1., 1., 1., 20.);
|
||||||
|
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
gluLookAt(0., 0., 10., 0., 0., 0., 0., 1., 0.);
|
||||||
|
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
glColor3f(1., 0., 0.); glVertex3f(-.75, -.75, 0.);
|
||||||
|
glColor3f(0., 1., 0.); glVertex3f( .75, -.75, 0.);
|
||||||
|
glColor3f(0., 0., 1.); glVertex3f( .75, .75, 0.);
|
||||||
|
glColor3f(1., 1., 0.); glVertex3f(-.75, .75, 0.);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
|
dpy = XOpenDisplay(NULL);
|
||||||
|
|
||||||
|
if(dpy == NULL) {
|
||||||
|
printf("\n\tcannot connect to X server\n\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
root = DefaultRootWindow(dpy);
|
||||||
|
|
||||||
|
vi = glXChooseVisual(dpy, 0, att);
|
||||||
|
|
||||||
|
if(vi == NULL) {
|
||||||
|
printf("\n\tno appropriate visual found\n\n");
|
||||||
|
exit(0); }
|
||||||
|
else {
|
||||||
|
printf("\n\tvisual %p selected\n", (void *)vi->visualid); } /* %p creates hexadecimal output like in glxinfo */
|
||||||
|
|
||||||
|
cmap = XCreateColormap(dpy, root, vi->visual, AllocNone);
|
||||||
|
|
||||||
|
swa.colormap = cmap;
|
||||||
|
swa.event_mask = ExposureMask | KeyPressMask;
|
||||||
|
|
||||||
|
win = XCreateWindow(dpy, root, 0, 0, 600, 600, 0, vi->depth, InputOutput, vi->visual, CWColormap | CWEventMask, &swa);
|
||||||
|
|
||||||
|
XMapWindow(dpy, win);
|
||||||
|
|
||||||
|
XStoreName(dpy, win, "VERY SIMPLE APPLICATION");
|
||||||
|
|
||||||
|
glc = glXCreateContext(dpy, vi, NULL, GL_TRUE);
|
||||||
|
glXMakeCurrent(dpy, win, glc);
|
||||||
|
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
XNextEvent(dpy, &xev);
|
||||||
|
|
||||||
|
if(xev.type == Expose) {
|
||||||
|
XGetWindowAttributes(dpy, win, &gwa);
|
||||||
|
glViewport(0, 0, gwa.width, gwa.height);
|
||||||
|
DrawAQuad();
|
||||||
|
glXSwapBuffers(dpy, win); }
|
||||||
|
|
||||||
|
else if(xev.type == KeyPress) {
|
||||||
|
glXMakeCurrent(dpy, None, NULL);
|
||||||
|
glXDestroyContext(dpy, glc);
|
||||||
|
XDestroyWindow(dpy, win);
|
||||||
|
XCloseDisplay(dpy);
|
||||||
|
exit(0); }
|
||||||
|
} /* this closes while(1) { */
|
||||||
|
} /* this is the } which closes int main(int argc, char *argv[]) { */
|
Loading…
Reference in New Issue
Block a user