rtshadow.h
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:4k
源码类别:

GIS编程

开发平台:

Visual C++

  1. #ifndef __rtshadow_h__
  2. #define __rtshadow_h__
  3. /* Copyright (c) Mark J. Kilgard, 1997, 1998. */
  4. /* This program is freely distributable without licensing fees and is
  5.    provided without guarantee or warrantee expressed or implied.  This
  6.    program is -not- in the public domain. */
  7. /* Real-time Shadowing library, Version 0.96 */
  8. #if defined(_WIN32)
  9. /* Try to avoid including <windows.h> to avoid name space
  10.    pollution, but Win32's <GL/gl.h> needs APIENTRY and
  11.    WINGDIAPI defined properly. */
  12. # if 0
  13. #  define  WIN32_LEAN_AND_MEAN
  14. #  include <windows.h>
  15. # else
  16.    /* This is from Win32's <windef.h> */
  17. #  ifndef APIENTRY
  18. #   if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
  19. #    define APIENTRY    __stdcall
  20. #   else
  21. #    define APIENTRY
  22. #   endif
  23. #  endif
  24. #  ifndef CALLBACK
  25.     /* This is from Win32's <winnt.h> */
  26. #   if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
  27. #    define CALLBACK __stdcall
  28. #   else
  29. #    define CALLBACK
  30. #   endif
  31. #  endif
  32.    /* This is from Win32's <wingdi.h> and <winnt.h> */
  33. #  ifndef WINGDIAPI
  34. #   define WINGDIAPI __declspec(dllimport)
  35. #  endif
  36.    /* XXX This is from Win32's <ctype.h> */
  37. #  ifndef _WCHAR_T_DEFINED
  38. typedef unsigned short wchar_t;
  39. #   define _WCHAR_T_DEFINED
  40. #  endif
  41. # endif
  42. #pragma warning (disable:4244) /* Disable bogus conversion warnings. */
  43. #pragma warning (disable:4305)  /* VC++ 5.0 version of above warning. */
  44. #endif
  45. #include <GL/gl.h>
  46. #include <GL/glu.h>
  47. #ifdef __cplusplus
  48. extern "C" {
  49. #endif
  50. enum {
  51.   RTS_ERROR_OUT_OF_MEMORY,
  52.   RTS_WARNING_EYE_IN_SHADOW,
  53.   RTS_WARNING_LIGHT_TOO_CLOSE
  54. };
  55. typedef enum {
  56.   RTS_OFF,
  57.   RTS_SHINING,
  58.   RTS_SHINING_AND_CASTING
  59. } RTSlightState;
  60. typedef enum {
  61.   RTS_NOT_SHADOWING,
  62.   RTS_SHADOWING
  63. } RTSobjectState;
  64. typedef enum {
  65.   RTS_NO_SHADOWS,
  66.   RTS_USE_SHADOWS,
  67.   RTS_USE_SHADOWS_NO_OVERLAP
  68. } RTSmode;
  69. typedef struct RTSscene RTSscene;
  70. typedef struct RTSlight RTSlight;
  71. typedef struct RTSobject RTSobject;
  72. typedef void (*RTSerrorHandler)(int error, char *message);
  73. typedef void (*RTSrenderSceneFunc)(GLenum castingLight, void *sceneData, RTSscene *scene);
  74. extern RTSscene *rtsCreateScene(
  75.   GLfloat eyePos[3],
  76.   GLbitfield usableStencilBits,
  77.   RTSrenderSceneFunc func,
  78.   void *sceneData);
  79. extern RTSlight *rtsCreateLight(
  80.   GLenum glLight,
  81.   GLfloat lightPos[3],
  82.   GLfloat radius);
  83. extern RTSobject *rtsCreateObject(
  84.   GLfloat objectPos[3],
  85.   GLfloat maxRadius,
  86.   void (*renderObject) (void *objectData),
  87.   void *objectData,
  88.   int feedbackBufferSizeGuess);
  89. extern void rtsAddLightToScene(
  90.   RTSscene * scene,
  91.   RTSlight * light);
  92. extern void rtsAddObjectToLight(
  93.   RTSlight * light,
  94.   RTSobject * object);
  95. extern void rtsRemoveLightFromScene(
  96.   RTSscene * scene,
  97.   RTSlight * light);
  98. extern void rtsRemoveObjectFromLight(
  99.   RTSlight * light,
  100.   RTSobject * object);
  101. extern void rtsSetLightState(
  102.   RTSlight * light,
  103.   RTSlightState state);
  104. extern void rtsSetObjectState(
  105.   RTSobject * object,
  106.   RTSobjectState state);
  107. extern void rtsUpdateEyePos(
  108.   RTSscene * scene,
  109.   GLfloat eyePos[3]);
  110. extern void rtsUpdateUsableStencilBits(
  111.   RTSscene * scene,
  112.   GLbitfield usableStencilBits);
  113. extern void rtsUpdateLightPos(
  114.   RTSlight * light,
  115.   GLfloat lightPos[3]);
  116. extern void rtsUpdateLightRadius(
  117.   RTSlight * light,
  118.   GLfloat lightRadius);
  119. extern void rtsUpdateObjectPos(
  120.   RTSobject * object,
  121.   GLfloat objectPos[3]);
  122. extern void rtsUpdateObjectShape(
  123.   RTSobject * object);
  124. extern void rtsUpdateObjectMaxRadius(
  125.   RTSobject * object,
  126.   GLfloat maxRadius);
  127. extern void rtsFreeScene(
  128.   RTSscene * scene);
  129. extern void rtsFreeLight(
  130.   RTSlight * light);
  131. extern void rtsFreeObject(
  132.   RTSobject * object);
  133. extern int rtsTriviallyOutsideShadowVolume(
  134.   RTSscene * scene,
  135.   GLfloat objectPos[3],
  136.   GLfloat maxRadius);
  137. extern void rtsRenderScene(
  138.   RTSscene * scene,
  139.   RTSmode mode);
  140. extern void rtsRenderSilhouette(
  141.   RTSscene * scene,
  142.   RTSlight * light,
  143.   RTSobject * object);
  144. extern RTSerrorHandler rtsSetErrorHandler(
  145.   RTSerrorHandler handler);
  146. extern void rtsStencilRenderingInvariantHack(
  147.   RTSscene * scene,
  148.   GLboolean enableHack);
  149. #ifdef __cplusplus
  150. }
  151. #endif
  152. #endif /* __rtshadow_h__ */