home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 2000 April & May / AMIGA_2000_04.iso / patches / mesa3.1 / mesa-glut.lha / src-glut.aos / glutGet.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-08-24  |  5.0 KB  |  209 lines

  1. /*
  2.  * Amiga GLUT graphics library toolkit
  3.  * Version:  1.1
  4.  * Copyright (C) 1998 Jarno van der Linden
  5.  *
  6.  * This library is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU Library General Public
  8.  * License as published by the Free Software Foundation; either
  9.  * version 2 of the License, or (at your option) any later version.
  10.  *
  11.  * This library is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.  * Library General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU Library General Public
  17.  * License along with this library; if not, write to the Free
  18.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  */
  20.  
  21. /*
  22.  * glutGet.c
  23.  *
  24.  * Version 1.0  27 Jun 1998
  25.  * by Jarno van der Linden
  26.  * jarno@kcbbs.gen.nz
  27.  *
  28.  */
  29.  
  30. #include <inline/intuition.h>
  31. #include "glutstuff.h"
  32.  
  33. int glutGet(GLenum state) {
  34.  
  35.   /* independent */
  36.   switch (state) {
  37.     case GLUT_DISPLAY_MODE_POSSIBLE:
  38.       return TRUE;
  39.     case GLUT_ELAPSED_TIME: {
  40.     ULONG secs, micros;
  41.  
  42.     CurrentTime(&secs, µs);
  43.     if (!glutstuff.havebasetime) {
  44.       glutstuff.basetime_secs = secs;
  45.       glutstuff.basetime_micros = micros;
  46.       glutstuff.havebasetime = TRUE;
  47.     }
  48.  
  49.     return (((int)(secs - glutstuff.basetime_secs)) * 1000 + ((int)(micros - glutstuff.basetime_micros)) / 1000);
  50.       }
  51.     case GLUT_INIT_DISPLAY_MODE:
  52.       return glutstuff.initdisplaymode;
  53.     case GLUT_INIT_WINDOW_X:
  54.       return glutstuff.initposx;
  55.     case GLUT_INIT_WINDOW_Y:
  56.       return glutstuff.initposy;
  57.     case GLUT_INIT_WINDOW_WIDTH:
  58.       return glutstuff.initwidth;
  59.     case GLUT_INIT_WINDOW_HEIGHT:
  60.       return glutstuff.initheight;
  61.     case GLUT_SCREEN_WIDTH:
  62.       return glutstuff.scrwidth;
  63.     case GLUT_SCREEN_HEIGHT:
  64.       return glutstuff.scrheight;
  65.     case GLUT_SCREEN_WIDTH_MM:
  66.     case GLUT_SCREEN_HEIGHT_MM:
  67.       return 0;
  68.     default:
  69.       break;
  70.   }
  71.  
  72.   if (!glutstuff.curwin) {
  73.     DEBUGOUT(1, "something get wrong in glutGet(%d): no window\n", state);
  74.     return -1;
  75.   }
  76.   /* window dependent */
  77.   switch (state) {
  78.     case GLUT_MENU_NUM_ITEMS:
  79.       return glutstuff.curmenu ? glutstuff.curmenu->NumEntries : 0;
  80.     case GLUT_WINDOW_CURSOR:
  81.       return glutstuff.curwin->cursor;
  82.     case GLUT_WINDOW_X:
  83.       return glutstuff.curwin->wincurx;
  84.     case GLUT_WINDOW_Y:
  85.       return glutstuff.curwin->wincury;
  86.     case GLUT_WINDOW_WIDTH:
  87.       return glutstuff.curwin->wincurwidth;
  88.     case GLUT_WINDOW_HEIGHT:
  89.       return glutstuff.curwin->wincurheight;
  90.     case GLUT_WINDOW_NUM_CHILDREN:
  91.       return glutstuff.curwin->NumChildren;
  92.     case GLUT_WINDOW_PARENT:
  93.       return glutstuff.curwin->SubWindowParent ? glutstuff.curwin->SubWindowParent->WinID : 0;
  94.     default:
  95.       break;
  96.   }
  97.  
  98.   if (!glutstuff.curwin->context) {
  99.     DEBUGOUT(1, "something get wrong in glutGet(%d): no context\n", state);
  100.     return -1;
  101.   }
  102.   /* context dependent */
  103.   switch (state) {
  104.     case GLUT_WINDOW_NUM_SAMPLES:
  105.       return 0;
  106.     case GLUT_WINDOW_DOUBLEBUFFER: {
  107.     GLboolean db;
  108.  
  109.     glGetBooleanv(GL_DOUBLEBUFFER, &db);
  110.     return (db ? TRUE : FALSE);
  111.       }
  112.     case GLUT_WINDOW_RGBA: {
  113.     GLboolean rgb;
  114.  
  115.     glGetBooleanv(GL_RGBA_MODE, &rgb);
  116.     return (rgb ? TRUE : FALSE);
  117.       }
  118.     case GLUT_WINDOW_COLORMAP_SIZE: {
  119.     GLint idx;
  120.  
  121.     glGetIntegerv(GL_INDEX_BITS, &idx);
  122.     return idx ? 1 << idx : idx;
  123.       }
  124.     case GLUT_WINDOW_BUFFER_SIZE: {
  125.     if(glutGet(GLUT_WINDOW_RGBA))
  126.       return glutGet(GLUT_WINDOW_RED_SIZE) +
  127.          glutGet(GLUT_WINDOW_GREEN_SIZE) +
  128.          glutGet(GLUT_WINDOW_BLUE_SIZE) +
  129.          glutGet(GLUT_WINDOW_ALPHA_SIZE);
  130.     else {
  131.       GLint size;
  132.  
  133.       glGetIntegerv(GL_INDEX_BITS, &size);
  134.       return size;
  135.     }
  136.       }
  137.     case GLUT_WINDOW_STEREO: {
  138.     GLboolean stereo;
  139.  
  140.     glGetBooleanv(GL_STEREO, &stereo);
  141.     return (stereo ? TRUE : FALSE);
  142.       }
  143.     case GLUT_WINDOW_STENCIL_SIZE: {
  144.     GLint size;
  145.  
  146.     glGetIntegerv(GL_STENCIL_BITS, &size);
  147.     return size;
  148.       }
  149.     case GLUT_WINDOW_DEPTH_SIZE: {
  150.     GLint size;
  151.  
  152.     glGetIntegerv(GL_DEPTH_BITS, &size);
  153.     return size;
  154.       }
  155.     case GLUT_WINDOW_RED_SIZE: {
  156.     GLint size;
  157.  
  158.     glGetIntegerv(GL_RED_BITS, &size);
  159.     return size;
  160.       }
  161.     case GLUT_WINDOW_GREEN_SIZE: {
  162.     GLint size;
  163.  
  164.     glGetIntegerv(GL_GREEN_BITS, &size);
  165.     return size;
  166.       }
  167.     case GLUT_WINDOW_BLUE_SIZE: {
  168.     GLint size;
  169.  
  170.     glGetIntegerv(GL_BLUE_BITS, &size);
  171.     return size;
  172.       }
  173.     case GLUT_WINDOW_ALPHA_SIZE: {
  174.     GLint size;
  175.  
  176.     glGetIntegerv(GL_ALPHA_BITS, &size);
  177.     return size;
  178.       }
  179.     case GLUT_WINDOW_ACCUM_RED_SIZE: {
  180.     GLint size;
  181.  
  182.     glGetIntegerv(GL_ACCUM_RED_BITS, &size);
  183.     return size;
  184.       }
  185.     case GLUT_WINDOW_ACCUM_GREEN_SIZE: {
  186.     GLint size;
  187.  
  188.     glGetIntegerv(GL_ACCUM_GREEN_BITS, &size);
  189.     return size;
  190.       }
  191.     case GLUT_WINDOW_ACCUM_BLUE_SIZE: {
  192.     GLint size;
  193.  
  194.     glGetIntegerv(GL_ACCUM_BLUE_BITS, &size);
  195.     return size;
  196.       }
  197.     case GLUT_WINDOW_ACCUM_ALPHA_SIZE: {
  198.     GLint size;
  199.  
  200.     glGetIntegerv(GL_ACCUM_ALPHA_BITS, &size);
  201.     return size;
  202.       }
  203.     default:
  204.       break;
  205.   }
  206.  
  207.   return -1;
  208. }
  209.