blob: 194d5bbb62614425bb6af067878f97271af8216f [file] [log] [blame]
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* 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;
}
void GLUTAPIENTRY
glutReportErrors( void )
{
GLenum error;
while ((error = glGetError()) != GL_NO_ERROR)
__glutWarning( "**OpenGL Error** %s", gluErrorString( error ) );
}