togl.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:8k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. /* $Id: togl.h,v 1.4 1998/10/28 13:54:04 magi Exp $ */
  2. /*
  3.  * Togl - a Tk OpenGL widget
  4.  * Version 1.5
  5.  * Copyright (C) 1996-1997  Brian Paul and Ben Bederson
  6.  * See the LICENSE file for copyright details.
  7.  */
  8. /*
  9.  * $Log: togl.h,v $
  10.  * Revision 1.4  1998/10/28 13:54:04  magi
  11.  * cache static images as bitmap for fast redraws -- only render when necessary
  12.  *
  13.  * Revision 1.3  1998/06/17 01:37:19  magi
  14.  * add per-togl support for timers
  15.  *
  16.  * Revision 1.2  1998/04/29 00:58:42  magi
  17.  * updated Togl code to version 1.5 beta 3 -- because 1.4 wasn't working
  18.  * under Tcl/Tk 8.0 -- note that I had to make one change to togl.c
  19.  * in ToglCmdDeletedProc, or it faults when trying to destroy the widget
  20.  * (only if there's an overlay buffer) because tkwin is NULL.
  21.  *
  22.  * Revision 1.17  1997/11/15 04:14:37  brianp
  23.  * changed version to 1.5
  24.  *
  25.  * Revision 1.16  1997/11/15 02:58:48  brianp
  26.  * added Togl_TkWin() per Glenn Lewis
  27.  *
  28.  * Revision 1.15  1997/10/01 02:49:45  brianp
  29.  * added SGI stereo functions from Ben Evans
  30.  *
  31.  * Revision 1.14  1997/08/26 02:05:19  brianp
  32.  * added Togl_ResetDefaultCallbacks() and Togl_ClientData() (Greg Couch)
  33.  *
  34.  * Revision 1.13  1997/08/26 01:35:41  brianp
  35.  * added Togl_Set*Func() functions from Matthias Ott
  36.  *
  37.  * Revision 1.12  1997/08/22 02:48:25  brianp
  38.  * added WIN32 header stuff.  changed Togl version to 1.4.
  39.  *
  40.  * Revision 1.11  1997/04/11 01:37:22  brianp
  41.  * added Togl_TimerFunc() and related code from Elmar Gerwalin
  42.  *
  43.  * Revision 1.10  1997/02/16 10:03:33  brianp
  44.  * removed GL/glx.h include, added X11/Xlib.h include
  45.  *
  46.  * Revision 1.9  1997/02/16 01:25:34  brianp
  47.  * added new overlay and EPS functions from Miguel A. De Riera Pasenau
  48.  *
  49.  * Revision 1.8  1996/12/13 21:24:41  brianp
  50.  * added Togl_DestroyFunc() contributed by scotter@iname.com
  51.  *
  52.  * Revision 1.7  1996/11/14 00:49:54  brianp
  53.  * added Togl_Get/SetClientData() functions
  54.  *
  55.  * Revision 1.6  1996/11/05 02:40:12  brianp
  56.  * added Togl_Configure() and Togl_UnloadBitmapFont()
  57.  *
  58.  * Revision 1.5  1996/10/25 03:44:06  brianp
  59.  * updated version to 1.2
  60.  *
  61.  * Revision 1.4  1996/10/24 01:20:17  brianp
  62.  * added overlay constants and functions
  63.  *
  64.  * Revision 1.3  1996/10/24 00:13:34  brianp
  65.  * added const qualifier to many function parameters
  66.  *
  67.  * Revision 1.2  1996/10/23 23:28:06  brianp
  68.  * updated version to 1.1
  69.  * added TOGL_BITMAP_* constants
  70.  * added Togl_LoadBitmapFont()
  71.  *
  72.  * Revision 1.1  1996/10/23 23:15:27  brianp
  73.  * Initial revision
  74.  *
  75.  */
  76. #ifndef TOGL_H
  77. #define TOGL_H
  78. /*** Windows headers ***/
  79. #ifdef WIN32
  80. #define WIN32_LEAN_AND_MEAN
  81. #include <windows.h>
  82. #undef WIN32_LEAN_AND_MEAN
  83. #include <winnt.h>
  84. #endif /*WIN32*/
  85. #include <tcl.h>
  86. #include <tk.h>
  87. #include <GL/gl.h>
  88. #ifdef TOGL_X11
  89. #include <X11/Xlib.h>
  90. #endif
  91. #ifdef __sgi
  92. #include <GL/glx.h>
  93. #include <X11/extensions/SGIStereo.h>
  94. #endif
  95. #ifndef NULL
  96. #define NULL    0
  97. #endif
  98. #ifdef __cplusplus
  99. extern "C" {
  100. #endif
  101. #define TOGL_VERSION "1.5"
  102. #define TOGL_MAJOR_VERSION 1
  103. #define TOGL_MINOR_VERSION 5
  104. /*
  105.  * "Standard" fonts which can be specified to Togl_LoadBitmapFont()
  106.  */
  107. #define TOGL_BITMAP_8_BY_13 ((char *) 1)
  108. #define TOGL_BITMAP_9_BY_15 ((char *) 2)
  109. #define TOGL_BITMAP_TIMES_ROMAN_10 ((char *) 3)
  110. #define TOGL_BITMAP_TIMES_ROMAN_24 ((char *) 4)
  111. #define TOGL_BITMAP_HELVETICA_10 ((char *) 5)
  112. #define TOGL_BITMAP_HELVETICA_12 ((char *) 6)
  113. #define TOGL_BITMAP_HELVETICA_18 ((char *) 7)
  114.  
  115. /*
  116.  * Normal and overlay plane constants
  117.  */
  118. #define TOGL_NORMAL 1
  119. #define TOGL_OVERLAY 2
  120. struct Togl;
  121. typedef void (Togl_Callback) (struct Togl *togl);
  122. typedef int  (Togl_CmdProc) (struct Togl *togl, int argc, char *argv[]);
  123. extern int Togl_Init( Tcl_Interp *interp );
  124. /*
  125.  * Callback setup functions
  126.  */
  127. extern void Togl_CreateFunc( Togl_Callback *proc );
  128. extern void Togl_DisplayFunc( Togl_Callback *proc );
  129. extern void Togl_ReshapeFunc( Togl_Callback *proc );
  130. extern void Togl_DestroyFunc( Togl_Callback *proc );
  131. extern void Togl_TimerFunc( Togl_Callback *proc );
  132. extern void Togl_ResetDefaultCallbacks( void );
  133. /*
  134.  * Change callbacks for existing widget
  135.  */
  136. extern void Togl_SetCreateFunc( struct Togl *togl, Togl_Callback *proc );
  137. extern Togl_Callback* Togl_GetCreateFunc( struct Togl *togl);
  138. extern void Togl_SetDisplayFunc( struct Togl *togl, Togl_Callback *proc );
  139. extern Togl_Callback* Togl_GetDisplayFunc( struct Togl *togl);
  140. extern void Togl_SetReshapeFunc( struct Togl *togl, Togl_Callback *proc );
  141. extern Togl_Callback* Togl_GetReshapeFunc( struct Togl *togl);
  142. extern void Togl_SetTimerFunc( struct Togl *togl, Togl_Callback *proc );
  143. extern Togl_Callback* Togl_GetTimerFunc( struct Togl *togl);
  144. extern void Togl_SetDestroyFunc( struct Togl *togl, Togl_Callback *proc );
  145. extern Togl_Callback* Togl_GetDestroyFunc( struct Togl *togl);
  146. /*
  147.  * Miscellaneous
  148.  */
  149. extern int Togl_Configure( Tcl_Interp *interp, struct Togl *togl, 
  150.                            int argc, char *argv[], int flags );
  151. extern void Togl_MakeCurrent( const struct Togl *togl );
  152. extern void Togl_CreateCommand( char *cmd_name,
  153.                                 Togl_CmdProc *cmd_proc );
  154. extern void Togl_PostRedisplay( struct Togl *togl );
  155. extern void Togl_SwapBuffers( const struct Togl *togl );
  156. /*
  157.  * Query functions
  158.  */
  159. extern char *Togl_Ident( const struct Togl *togl );
  160. extern int Togl_Width( const struct Togl *togl );
  161. extern int Togl_Height( const struct Togl *togl );
  162. extern Tcl_Interp *Togl_Interp( const struct Togl *togl );
  163. extern Tk_Window Togl_TkWin( const struct Togl *togl );
  164. /*
  165.  * Color Index mode
  166.  */
  167. extern unsigned long Togl_AllocColor( const struct Togl *togl,
  168.                                       float red, float green, float blue );
  169. extern void Togl_FreeColor( const struct Togl *togl, unsigned long index );
  170. extern void Togl_SetColor( const struct Togl *togl, unsigned long index,
  171.                            float red, float green, float blue );
  172. /*
  173.  * Bitmap fonts
  174.  */
  175. extern GLuint Togl_LoadBitmapFont( const struct Togl *togl,
  176.                                    const char *fontname );
  177. extern void Togl_UnloadBitmapFont( const struct Togl *togl, GLuint fontbase );
  178. /*
  179.  * Overlay functions
  180.  */
  181. extern void Togl_UseLayer( struct Togl *togl, int layer );
  182. extern void Togl_ShowOverlay( struct Togl *togl );
  183. extern void Togl_HideOverlay( struct Togl *togl );
  184. extern void Togl_PostOverlayRedisplay( struct Togl *togl );
  185. extern void Togl_OverlayDisplayFunc( Togl_Callback *proc );
  186. extern int Togl_ExistsOverlay( const struct Togl *togl );
  187. extern int Togl_GetOverlayTransparentValue( const struct Togl *togl );
  188. extern int Togl_IsMappedOverlay( const struct Togl *togl );
  189. extern unsigned long Togl_AllocColorOverlay( const struct Togl *togl,
  190.                                              float red, float green, 
  191.                                              float blue );
  192. extern void Togl_FreeColorOverlay( const struct Togl *togl, 
  193.                                    unsigned long index );
  194. /*
  195.  * User client data
  196.  */
  197. extern void Togl_ClientData( ClientData clientData );
  198. extern ClientData Togl_GetClientData( const struct Togl *togl );
  199. extern void Togl_SetClientData( struct Togl *togl, ClientData clientData );
  200. /*
  201.  * X11-only commands.
  202.  * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES)
  203.  */
  204. #ifdef TOGL_X11
  205. extern Display *Togl_Display( const struct Togl *togl );
  206. extern Screen *Togl_Screen( const struct Togl *togl );
  207. extern int Togl_ScreenNumber( const struct Togl *togl );
  208. extern Colormap Togl_Colormap( const struct Togl *togl );
  209. #endif
  210. /*
  211.  * SGI stereo-only commands.
  212.  * Contributed by Ben Evans (Ben.Evans@anusf.anu.edu.au)
  213.  */
  214. #ifdef __sgi
  215. extern void Togl_StereoDrawBuffer( GLenum mode );
  216. extern void Togl_StereoFrustum( GLfloat left, GLfloat right,
  217.                                 GLfloat bottom, GLfloat top,
  218.                                 GLfloat near, GLfloat far,
  219.                                 GLfloat eyeDist, GLfloat eyeOffset );
  220. extern void Togl_StereoClear( GLbitfield mask );
  221. #endif
  222. /*
  223.  * Generate EPS file.
  224.  * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES)
  225.  */
  226. extern int Togl_DumpToEpsFile( const struct Togl *togl,
  227.                                const char *filename,
  228.                                int inColor,
  229.                                void (*user_redraw)(const struct Togl *) );
  230. #ifdef __cplusplus
  231. }
  232. #endif
  233. #endif