diff options
author | Claudio Ciccani <[email protected]> | 2006-05-31 17:02:45 +0000 |
---|---|---|
committer | Claudio Ciccani <[email protected]> | 2006-05-31 17:02:45 +0000 |
commit | b18191cf306c255fe5eff7762fc8e419e043a621 (patch) | |
tree | f83208c8d975dad0047ee0a6755ecbcd12d346a7 /src/glut/directfb/state.c | |
parent | 9400550c168f685e82a2ab7bfaf3344f985127ca (diff) |
Added DirectFB GLUT implementation.
Diffstat (limited to 'src/glut/directfb/state.c')
-rw-r--r-- | src/glut/directfb/state.c | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/src/glut/directfb/state.c b/src/glut/directfb/state.c new file mode 100644 index 00000000000..c6800ffecd4 --- /dev/null +++ b/src/glut/directfb/state.c @@ -0,0 +1,258 @@ +/* + * Copyright (C) 2006 Claudio Ciccani <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/time.h> + +#include "GL/glu.h" + +#include "internal.h" + + +int GLUTAPIENTRY +glutGet( GLenum type ) +{ + switch (type) { + case GLUT_WINDOW_X: + if (g_current && g_current->window) { + int x; + g_current->window->GetPosition( g_current->window, &x, 0 ); + return x; + } + break; + case GLUT_WINDOW_Y: + if (g_current && g_current->window) { + int y; + g_current->window->GetPosition( g_current->window, 0, &y ); + return y; + } + break; + + case GLUT_WINDOW_WIDTH: + if (g_current) { + int w; + g_current->surface->GetSize( g_current->surface, &w, 0 ); + return w; + } + break; + case GLUT_WINDOW_HEIGHT: + if (g_current) { + int h; + g_current->surface->GetSize( g_current->surface, 0, &h ); + return h; + } + break; + + case GLUT_WINDOW_BUFFER_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.buffer_size; + } + break; + case GLUT_WINDOW_STENCIL_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.stencil_size; + } + break; + case GLUT_WINDOW_DEPTH_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.depth_size; + } + break; + case GLUT_WINDOW_RED_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.red_size; + } + break; + case GLUT_WINDOW_GREEN_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.green_size; + } + break; + case GLUT_WINDOW_BLUE_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.blue_size; + } + break; + case GLUT_WINDOW_ALPHA_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.alpha_size; + } + break; + case GLUT_WINDOW_ACCUM_RED_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.accum_red_size; + } + break; + case GLUT_WINDOW_ACCUM_GREEN_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.accum_green_size; + } + break; + case GLUT_WINDOW_ACCUM_BLUE_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.accum_blue_size; + } + break; + case GLUT_WINDOW_ACCUM_ALPHA_SIZE: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.accum_alpha_size; + } + break; + case GLUT_WINDOW_DOUBLEBUFFER: + if (g_current) { + DFBGLAttributes a; + g_current->gl->GetAttributes( g_current->gl, &a ); + return a.double_buffer; + } + break; + + case GLUT_WINDOW_RGBA: + return 1; + + case GLUT_WINDOW_CURSOR: + if (g_current) + return g_current->cursor; + break; + + case GLUT_SCREEN_WIDTH: + if (primary) { + DFBDisplayLayerConfig c; + primary->GetConfiguration( primary, &c ); + return c.width; + } + break; + case GLUT_SCREEN_HEIGHT: + if (primary) { + DFBDisplayLayerConfig c; + primary->GetConfiguration( primary, &c ); + return c.height; + } + break; + + case GLUT_INIT_DISPLAY_MODE: + return g_display_mode; + case GLUT_INIT_WINDOW_X: + return g_xpos; + case GLUT_INIT_WINDOW_Y: + return g_ypos; + case GLUT_INIT_WINDOW_WIDTH: + return g_width; + case GLUT_INIT_WINDOW_HEIGHT: + return g_height; + + case GLUT_ELAPSED_TIME: + { + static long long start = -1; + struct timeval t; + + gettimeofday( &t, NULL ); + if (start == -1) { + start = t.tv_sec * 1000ll + t.tv_usec / 1000ll; + return 0; + } + return (t.tv_sec * 1000ll + t.tv_usec / 1000ll - start); + } + break; + + default: + break; + } + + return 0; +} + + +int GLUTAPIENTRY +glutLayerGet( GLenum type ) +{ + return 0; +} + +int GLUTAPIENTRY +glutDeviceGet( GLenum type ) +{ + switch (type) { + case GLUT_HAS_KEYBOARD: + return (keyboard != NULL); + case GLUT_HAS_MOUSE: + return (mouse != NULL); + case GLUT_NUM_MOUSE_BUTTONS: + if (mouse) { + DFBInputDeviceDescription dsc; + mouse->GetDescription( mouse, &dsc ); + return dsc.max_button+1; + } + break; + case GLUT_HAS_JOYSTICK: + return (g_game && joystick); /* only available in game mode */ + case GLUT_JOYSTICK_BUTTONS: + if (joystick) { + DFBInputDeviceDescription dsc; + joystick->GetDescription( joystick, &dsc ); + return dsc.max_button+1; + } + break; + case GLUT_JOYSTICK_AXES: + if (joystick) { + DFBInputDeviceDescription dsc; + joystick->GetDescription( joystick, &dsc ); + return dsc.max_axis+1; + } + break; + default: + break; + } + + return 0; +} + + +void GLUTAPIENTRY +glutReportErrors( void ) +{ + GLenum error; + + while ((error = glGetError()) != GL_NO_ERROR) + __glutWarning( "**OpenGL Error** %s", gluErrorString( error ) ); +} + + |