summaryrefslogtreecommitdiffstats
path: root/src/glut/directfb/state.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glut/directfb/state.c')
-rw-r--r--src/glut/directfb/state.c258
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 ) );
+}
+
+