/*****************************************************************************1*2* Elmer, A Finite Element Software for Multiphysical Problems3*4* Copyright 1st April 1995 - , CSC - IT Center for Science Ltd., Finland5*6* This program is free software; you can redistribute it and/or7* modify it under the terms of the GNU General Public License8* as published by the Free Software Foundation; either version 29* of the License, or (at your option) any later version.10*11* This program is distributed in the hope that it will be useful,12* but WITHOUT ANY WARRANTY; without even the implied warranty of13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the14* GNU General Public License for more details.15*16* You should have received a copy of the GNU General Public License17* along with this program (in file fem/GPL-2); if not, write to the18* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,19* Boston, MA 02110-1301, USA.20*21*****************************************************************************/2223/*******************************************************************************24*25* Includes for X & OpenGL.26*27*******************************************************************************28*29* Author: Juha Ruokolainen30*31* Address: CSC - IT Center for Science Ltd.32* Keilaranta 14, P.O. BOX 40533* 02101 Espoo, Finland34* Tel. +358 0 457 272335* Telefax: +358 0 457 230236* EMail: [email protected]37*38* Date: 26 Sep 199539*40* Modified by:41*42* Date of modification:43*44* $Id: graphics.h,v 1.3 2005/05/31 11:28:14 vierinen Exp $45*46* $Log: graphics.h,v $47* Revision 1.3 2005/05/31 11:28:14 vierinen48* ads49*50* Revision 1.2 2005/05/31 10:39:03 vierinen51* apple?52*53* Revision 1.1.1.1 2005/05/31 06:29:21 vierinen54* ads55*56* Revision 1.4 2001/06/29 12:00:05 jpr57* *** empty log message ***58*59* Revision 1.3 2001/06/13 07:55:53 jpr60* *** empty log message ***61*62* Revision 1.2 1998/07/31 13:36:55 jpr63*64* Added id, started log.65*66*67******************************************************************************/6869#include "../../config.h"7071#ifndef MINGW327273#include <X11/X.h>74#include <X11/keysymdef.h>75#include "../glaux/glaux.h"7677#else7879#include <GL/glaux.h>8081#endif8283#include <GL/gl.h>84#include <GL/glu.h>85868788/*89* Material for lightning computations90*/91typedef struct material_s92{93struct material_s *Next;9495char *Name;9697int Changed;9899float Shininess;100float Diffuse[4],Specular[4];101} material_t;102103/*104*105*/106typedef struct rgb_s107{108unsigned char r,g,b;109} rgb_t;110111typedef struct colormap_s112{113struct colormap_s *Next;114115char *Name;116117int Changed;118119rgb_t *Values;120int NumberOfEntries;121} colormap_t;122123#ifdef MODULE_GRAPHICS124125material_t DefaultMaterial =126{127NULL, NULL, TRUE, 20.0, { 0.8,0.8,0.8,1.0 }, { 0.0,0.0,0.0,1.0 }128};129material_t DefaultEdgeMaterial =130{131NULL, NULL, TRUE, 20.0, { 0.8,0.8,0.8,1.0 }, { 0.0,0.0,0.0,1.0 }132};133material_t def_mat =134{135NULL, NULL, TRUE, 20.0, { 0.8,0.8,0.8,1.0 }, { 0.0,0.0,0.0,1.0 }136};137138colormap_t DefaultColorMap =139{140NULL, NULL, TRUE, NULL, 0141};142colormap_t def_map =143{144NULL, NULL, TRUE, NULL, 0145};146147colormap_t *ArrowColorMap = &DefaultColorMap, *MeshColorMap = &DefaultColorMap,148*ContourColorMap = &DefaultColorMap, *IsoSurfaceColorMap = &DefaultColorMap,149*SphereColorMap = &DefaultColorMap, *ParticleColorMap = &DefaultColorMap;150151material_t *ArrowMaterial = &DefaultMaterial, *MeshMaterial = &DefaultMaterial,152*ContourMaterial = &DefaultMaterial, *IsoSurfaceMaterial = &DefaultMaterial,153*SphereMaterial = &DefaultMaterial, *ParticleMaterial = &DefaultMaterial;154155#else156157extern colormap_t DefaultColorMap,def_map;158159extern colormap_t *ArrowColorMap,*MeshColorMap,*ContourColorMap,160*IsoSurfaceColorMap,*SphereColorMap,*ParticleColorMap;161162extern material_t DefaultMaterial,DefaultEdgeMaterial,def_mat;163extern material_t *ArrowMaterial,*MeshMaterial,*ContourMaterial,164*IsoSurfaceMaterial,*SphereMaterial,*ParticleMaterial;165#endif166167168/*169* Try keeping direct softcalls to OpenGL in graphics module...170*/171#define GRA_FILL (GL_FILL)172#define GRA_LINE (GL_LINE)173174#define GRA_POINTS (GL_POINTS)175#define GRA_LINES (GL_LINES)176#define GRA_QUADS (GL_QUADS)177#define GRA_TRIANGLES (GL_TRIANGLES)178179#define gra_end() glEnd()180#define gra_begin( Mode ) glBegin( Mode )181182#define gra_lon() glEnable( GL_LIGHTING )183#define gra_loff() glDisable( GL_LIGHTING )184185#define gra_beg_lines() { glDisable( GL_LIGHTING ); glBegin( GL_LINES ); }186#define gra_end_lines() { glEnd(); glEnable( GL_LIGHTING ); }187188#define gra_line_width(a) glLineWidth(a)189190#define gra_push_matrix() glPushMatrix()191#define gra_pop_matrix() glPopMatrix()192#define gra_mult_matrix(Matrix) glMultMatrixd( (GLdouble *)Matrix )193#define gra_load_identity() glLoadIdentity()194195#define gra_look_at(fx,fy,fz,tx,ty,tz,ux,uy,uz) gluLookAt(fx,fy,fz,tx,ty,tz,ux,uy,uz)196197#define gra_polygon_mode( Mode ) glPolygonMode( GL_FRONT_AND_BACK, Mode )198199200201202