Blame view

Giac_maj/giac-1.4.9/src/Fl_Gl_Choice.H 3.5 KB
6663b6c9   adorian   projet complet av...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  //
  // "$Id: Fl_Gl_Choice.H,v 1.4.2.6.2.3 2001/12/18 11:00:09 matthiaswm Exp $"
  //
  // OpenGL definitions for the Fast Light Tool Kit (FLTK).
  //
  // Copyright 1998-2001 by Bill Spitzak and others.
  //
  // This library is free software; you can redistribute it and/or
  // modify it under the terms of the GNU Library 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
  // Library General Public License for more details.
  //
  // You should have received a copy of the GNU Library General Public
  // License along with this library. If not, see <http://www.gnu.org/licenses/>.
  //
  // Please report all bugs and problems to "fltk-bugs@easysw.com".
  //
  
  // Internal interface to set up OpenGL.
  //
  // A "Fl_Gl_Choice" is created from an OpenGL mode and holds information
  // necessary to create a window (on X) and to create an OpenGL "context"
  // (on both X and Win32).
  //
  // fl_create_gl_context takes a window (necessary only on Win32) and an
  // Fl_Gl_Choice and returns a new OpenGL context. All contexts share
  // display lists with each other.
  //
  // On X another fl_create_gl_context is provided to create it for any
  // X visual.
  //
  // fl_set_gl_context makes the given OpenGL context current and makes
  // it draw into the passed window. It tracks the current one context
  // to avoid calling the context switching code when the same context
  // is used, though it is a mystery to me why the GLX/WGL libraries
  // don't do this themselves...
  //
  // fl_no_gl_context clears that cache so the next fl_set_gl_context is
  // guaranteed to work.
  //
  // fl_delete_gl_context destroys the context.
  //
  // This code is used by Fl_Gl_Window, gl_start(), and gl_visual()
  
  #ifndef Fl_Gl_Choice_H
  #define Fl_Gl_Choice_H
  
  // Warning: whatever GLContext is defined to must take exactly the same
  // space in a structure as a void*!!!
  #ifdef WIN32
  #  include <FL/gl.h>
  #  define GLContext HGLRC
  #elif defined(__APPLE__)
  #  include <OpenGL/gl.h>
  #  include <AGL/agl.h>
  #  define GLContext AGLContext
  #else
  #  include <GL/glx.h>
  #  define GLContext GLXContext
  #endif
  
  // Describes crap needed to create a GLContext.
  class Fl_Gl_Choice {
    int mode;
    const int *alist;
    Fl_Gl_Choice *next;
  public:
  #ifdef WIN32
    int pixelformat;	// the visual to use
    PIXELFORMATDESCRIPTOR pfd; // some wgl calls need this thing
  #elif defined(__APPLE__)
    AGLPixelFormat pixelformat;
  #else
    XVisualInfo *vis;	// the visual to use
    Colormap colormap;	// a colormap for that visual
  #endif
    // Return one of these structures for a given gl mode.
    // The second argument is a glX attribute list, and is used if mode is
    // zero.  This is not supported on Win32:
    static Fl_Gl_Choice *find(int mode, const int *);
  };
  
  class Fl_Window;
  
  #ifdef WIN32
  
  GLContext fl_create_gl_context(Fl_Window*, const Fl_Gl_Choice*, int layer=0);
  
  #elif defined(__APPLE__)
  
  GLContext fl_create_gl_context(Fl_Window*, const Fl_Gl_Choice*, int layer=0);
  
  #else
  
  GLContext fl_create_gl_context(XVisualInfo* vis);
  
  static inline
  GLContext fl_create_gl_context(Fl_Window*, const Fl_Gl_Choice* g) {
    return fl_create_gl_context(g->vis);
  }
  
  #endif
  
  void fl_set_gl_context(Fl_Widget*, GLContext);
  void fl_no_gl_context();
  void fl_delete_gl_context(GLContext);
  
  #endif
  
  //
  // End of "$Id: Fl_Gl_Choice.H,v 1.4.2.6.2.3 2001/12/18 11:00:09 matthiaswm Exp $".
  //