Out of practice from much needed C++ I attempt to learn OpenGL. - TopicsExpress



          

Out of practice from much needed C++ I attempt to learn OpenGL. The amount of hours I put in just to create these 2 objects. The left is the modern implementation where I use freeglut to handle window rendering. On most linux distros, my case Ubuntu (prefer Fedora BUT I cant seem to get AMDs Proprietary OpenGL drivers to work, AKA breaking the OS) its not easy to create a window. The reason why I moved to freeglut is it was simple and more modern than the example I used for the square. By the way this doesnt include OpenGL Context Creation. Meaning even with this you cant use modern hardware accelerated features with additional code. The only part I understand well is the DrawAQuad function which uses deprecated OpenGL functuality. // -- Written in C -- // #include #include #include #include #include #include #include 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[]) { */
Posted on: Mon, 17 Nov 2014 04:51:04 +0000

Trending Topics



Recently Viewed Topics




© 2015