00001 #include <gra/framebuffer/FrameBufferGLUT.h>
00002 #include <GL/gl.h>
00003
00004 #ifdef HAVE_FREE_GLUT
00005 #include <GL/freeglut.h>
00006 #else
00007 #include <GL/glut.h>
00008 #endif
00009
00010 using namespace gra;
00011
00012 FrameBufferGLUT::FrameBufferGLUT(unsigned mode,
00013 char* label,
00014 int width,
00015 int height)
00016 : FrameBufferGL(width, height, mode)
00017 {
00018 unsigned glutMode = 0;
00019 if (_fbMode & FB_RGBA) glutMode |= GLUT_RGBA;
00020 if (_fbMode & FB_INDEX) glutMode |= GLUT_INDEX;
00021 if (_fbMode & FB_SINGLE) glutMode |= GLUT_SINGLE;
00022 if (_fbMode & FB_DOUBLE) glutMode |= GLUT_DOUBLE;
00023 if (_fbMode & FB_DEPTH) glutMode |= GLUT_DEPTH;
00024
00025 glutInitDisplayMode(glutMode);
00026 glutInitWindowSize(width, height);
00027 _id = glutCreateWindow(label);
00028 if (_id) {
00029 glutReshapeWindow(width, height);
00030 glMatrixMode(GL_MODELVIEW);
00031 glLoadIdentity();
00032 }
00033
00034 glMatrixMode(GL_PROJECTION);
00035 glLoadIdentity();
00036 glOrtho(0, width, 0, height, -1, 1);
00037 glDisable(GL_LIGHTING);
00038 glMatrixMode(GL_MODELVIEW);
00039 }
00040
00041 FrameBufferGLUT::FrameBufferGLUT(unsigned mode,
00042 int id,
00043 int x,
00044 int y,
00045 int width,
00046 int height)
00047 : FrameBufferGL(width, height, mode)
00048 {
00049 unsigned glutMode = 0;
00050 if (_fbMode & FB_RGBA) glutMode |= GLUT_RGBA;
00051 if (_fbMode & FB_INDEX) glutMode |= GLUT_INDEX;
00052 if (_fbMode & FB_SINGLE) glutMode |= GLUT_SINGLE;
00053 if (_fbMode & FB_DOUBLE) glutMode |= GLUT_DOUBLE;
00054 if (_fbMode & FB_DEPTH) glutMode |= GLUT_DEPTH;
00055
00056 glutInitDisplayMode(glutMode);
00057 _id = glutCreateSubWindow(id, x, y, width, height);
00058 if (_id) {
00059 glutReshapeWindow(width, height);
00060 glMatrixMode(GL_MODELVIEW);
00061 glLoadIdentity();
00062 }
00063
00064 glMatrixMode(GL_PROJECTION);
00065 glLoadIdentity();
00066 glOrtho(0, width, 0, height, -1, 1);
00067 glDisable(GL_LIGHTING);
00068 glMatrixMode(GL_MODELVIEW);
00069 }
00070
00071 void FrameBufferGLUT::showContent()
00072 {
00073 if (_fbMode & FB_DOUBLE) glutSwapBuffers();
00074 }
00075
00076 #if 0
00077 unsigned FrameBufferGLUT::getWidth() const
00078 {
00079 return glutGet((GLenum)GLUT_WINDOW_WIDTH);
00080 }
00081
00082 unsigned FrameBufferGLUT::getHeight() const
00083 {
00084 return glutGet((GLenum)GLUT_WINDOW_HEIGHT);
00085 }
00086
00087 void FrameBufferGLUT::setWidth(unsigned w)
00088 {
00089 glutReshapeWindow(w, glutGet((GLenum)GLUT_WINDOW_HEIGHT));
00090 }
00091
00092 void FrameBufferGLUT::setHeight(unsigned h)
00093 {
00094 glutReshapeWindow(glutGet((GLenum)GLUT_WINDOW_WIDTH), h);
00095 }
00096 #endif
00097
00098
00099
00100
00101
00102
00103
00104