home *** CD-ROM | disk | FTP | other *** search
/ Enter 2005 March / ENTER.ISO / files / fwp-0.0.6-win32-installer.exe / Renderer.h < prev    next >
Encoding:
C/C++ Source or Header  |  2004-12-06  |  8.6 KB  |  211 lines

  1. #ifndef __Renderer_h__
  2. #define __Renderer_h__
  3.  
  4. #include "SDL.h"
  5. //#include "SDL_opengl.h"
  6. #include "Model.h"
  7. #include "Console.h"
  8. #include "vectormath.h"
  9. //#include "Bintree.h"
  10. #include "SpacePartitioningTree.h"
  11. //#include "Camera.h"
  12. //#include "Light.h"
  13. #include "ParticleSystem.h"
  14. #include "texfont.h"
  15. #include "RendererInfo.h"
  16.  
  17. #include <list>
  18.  
  19.  
  20. //! enumeration of supported lighting modes
  21. enum lightingModes_s{
  22.     LIGHTING_MODE_NONE=0,        //!< no lighting
  23.     LIGHTING_MODE_OPENGL=1,        //!< openGL-Lighting
  24.     LIGHTING_MODE_VERTEX=2,        //!< vertex lighting
  25.     LIGHTING_MODE_LIGHTMAP=3,    //!< lightmap lighting
  26.  
  27.     NUM_LIGHTING_MODES        //!< number of supported lighting modes
  28. };
  29.  
  30.  
  31. typedef struct transparentPoly_s{
  32.     int type;
  33.     float distanceToCamera;
  34.     float matrix[16];
  35.  
  36.     Face* face;
  37.  
  38.     vec3_t pos;
  39.     float width, height;
  40.     Shader* shader;
  41.     unsigned long shaderSetupMillis;
  42. }transparentPoly_t;
  43.  
  44. //#define MAX_TRANSPARENT_FACES    4096
  45.  
  46. //typedef void (APIENTRY * _PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
  47. //typedef void (APIENTRY * _PFNGLUNLOCKARRAYSEXTPROC) (void);
  48.  
  49. //extern _PFNGLLOCKARRAYSEXTPROC _glLockArraysEXT;
  50. //extern _PFNGLUNLOCKARRAYSEXTPROC _glUnlockArraysEXT;
  51.  
  52. // multitexture
  53. //#ifndef GL_ARB_multitexture
  54. #define GL_TEXTURE0_ARB                   0x84C0
  55. #define GL_TEXTURE1_ARB                   0x84C1
  56. #define GL_TEXTURE2_ARB                   0x84C2
  57. #define GL_TEXTURE3_ARB                   0x84C3
  58. #define GL_TEXTURE4_ARB                   0x84C4
  59. #define GL_TEXTURE5_ARB                   0x84C5
  60. #define GL_TEXTURE6_ARB                   0x84C6
  61. #define GL_TEXTURE7_ARB                   0x84C7
  62. #define GL_TEXTURE8_ARB                   0x84C8
  63. #define GL_TEXTURE9_ARB                   0x84C9
  64. #define GL_TEXTURE10_ARB                  0x84CA
  65. #define GL_TEXTURE11_ARB                  0x84CB
  66. #define GL_TEXTURE12_ARB                  0x84CC
  67. #define GL_TEXTURE13_ARB                  0x84CD
  68. #define GL_TEXTURE14_ARB                  0x84CE
  69. #define GL_TEXTURE15_ARB                  0x84CF
  70. #define GL_TEXTURE16_ARB                  0x84D0
  71. #define GL_TEXTURE17_ARB                  0x84D1
  72. #define GL_TEXTURE18_ARB                  0x84D2
  73. #define GL_TEXTURE19_ARB                  0x84D3
  74. #define GL_TEXTURE20_ARB                  0x84D4
  75. #define GL_TEXTURE21_ARB                  0x84D5
  76. #define GL_TEXTURE22_ARB                  0x84D6
  77. #define GL_TEXTURE23_ARB                  0x84D7
  78. #define GL_TEXTURE24_ARB                  0x84D8
  79. #define GL_TEXTURE25_ARB                  0x84D9
  80. #define GL_TEXTURE26_ARB                  0x84DA
  81. #define GL_TEXTURE27_ARB                  0x84DB
  82. #define GL_TEXTURE28_ARB                  0x84DC
  83. #define GL_TEXTURE29_ARB                  0x84DD
  84. #define GL_TEXTURE30_ARB                  0x84DE
  85. #define GL_TEXTURE31_ARB                  0x84DF
  86. #define GL_ACTIVE_TEXTURE_ARB             0x84E0
  87. #define GL_CLIENT_ACTIVE_TEXTURE_ARB      0x84E1
  88. #define GL_MAX_TEXTURE_UNITS_ARB          0x84E2
  89. //#endif
  90. typedef void (APIENTRY * _PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
  91. typedef void (APIENTRY * _PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
  92. typedef void (APIENTRY * _PFNGLMULTITEXCOORD2FVARBPROC) (GLenum texture, GLfloat* texCoords);
  93. typedef void (APIENTRY * _PFNGLMULTITEXCOORD2FARBPROC) (GLenum texture, GLfloat u, GLfloat v);
  94.  
  95. extern _PFNGLACTIVETEXTUREARBPROC _glActiveTextureARB;
  96. extern _PFNGLCLIENTACTIVETEXTUREARBPROC _glClientActiveTextureARB;
  97. extern _PFNGLMULTITEXCOORD2FVARBPROC _glMultiTexCoord2fvARB;
  98. extern _PFNGLMULTITEXCOORD2FARBPROC _glMultiTexCoord2fARB;
  99.  
  100. // VBOs
  101. #define GL_ARRAY_BUFFER_ARB 0x8892
  102. #define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
  103. #define GL_STATIC_DRAW_ARB 0x88E4
  104. typedef void (APIENTRY * _PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
  105. typedef void (APIENTRY * _PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
  106. typedef void (APIENTRY * _PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
  107. typedef void (APIENTRY * _PFNGLBUFFERDATAARBPROC) (GLenum target, int size, const GLvoid *data, GLenum usage);
  108.  
  109. extern _PFNGLGENBUFFERSARBPROC _glGenBuffersARB;
  110. extern _PFNGLBINDBUFFERARBPROC _glBindBufferARB;
  111. extern _PFNGLBUFFERDATAARBPROC _glBufferDataARB;
  112. extern _PFNGLDELETEBUFFERSARBPROC _glDeleteBuffersARB;
  113.  
  114. // secondary color
  115. #define GL_COLOR_SUM_EXT                  0x8458
  116. #define GL_CURRENT_SECONDARY_COLOR_EXT    0x8459
  117. #define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
  118. #define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
  119. #define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
  120. #define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
  121. #define GL_SECONDARY_COLOR_ARRAY_EXT      0x845E
  122. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
  123. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
  124. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
  125. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
  126. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
  127. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
  128. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
  129. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
  130. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
  131. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
  132. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
  133. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
  134. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
  135. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
  136. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
  137. typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
  138. typedef void (APIENTRY * _PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
  139. extern _PFNGLSECONDARYCOLORPOINTEREXTPROC _glSecondaryColorPointerEXT;
  140.  
  141.  
  142. class Renderer{
  143.     // subsystem interface
  144. public:
  145.     static RendererInfo info;
  146.  
  147.     static bool init();
  148.     static bool shutdown();
  149.     static bool wasInit();
  150.  
  151.     static bool initParticleSystem();
  152.     static bool shutdownParticleSystem();
  153.     static bool wasParticleSystemInit();
  154.  
  155.     static bool registerCVarsAndCCmds();
  156.     static bool unregisterCVarsAndCCmds();
  157.  
  158.  
  159. protected:
  160.     static bool initialized;
  161.     static bool particleSystemInitialized;
  162.  
  163.     // real methods
  164. public:
  165.     static ParticleSystem particleSystem;
  166.  
  167.     static list<transparentPoly_t> transparentPolys;
  168. //    static Bintree* transparentFacesTree;
  169.  
  170.     static bool initOpenGL();
  171.     static bool initOpenGLExtensions();
  172.     static void sizeOpenGLViewport(int width, int height);
  173.     static void calcFrameRate();
  174.  
  175.     static void renderScene();
  176.     static void renderModel(Model* model);
  177.     static void renderModel(Model* model, int frame);
  178.     static void renderModel(Model* model, float frame);
  179.     static void renderMesh(Mesh* mesh, SpacePartitioningTreeNode* node=NULL);
  180.     static void renderFace(Face* face);
  181.     static void renderBillboard(vec3_t pos, float width, float height, Shader* shader = NULL, unsigned long shaderSetupMillis = 0 );
  182.     static void renderQuad(vec3_t pos1, vec3_t pos2, vec3_t pos3, vec3_t pos4);
  183.     static void renderQ3bspExtension(Q3bspExtension* ext);
  184.  
  185.     static void addFaceToTransparentPolys(Face* face);
  186.     static void addBillboardToTransparentPolys(vec3_t pos, float width, float height, Shader* shader = NULL, unsigned long shaderSetupMillis = 0);
  187.     static void clearTransparentPolys();
  188.     static void renderTransparentPolys();
  189.  
  190.     static void beginDrawing();
  191.     static void endDrawing();
  192.     static void drawTexturedQuad(int* min, int* max, Texture* texture);
  193.     static void drawTexturedQuad(int x1, int y1, int x2, int y2, Texture* texture);
  194.     static void drawQuad(int* min, int* max, vec4_t borderColor, vec4_t fillColor );
  195.     static void drawQuad(int x1, int y1, int x2, int y2, vec4_t borderColor, vec4_t fillColor );
  196.  
  197.     static bool initOpenGLLighting();
  198.     static void enableLighting();
  199.     static void disableLighting();
  200.  
  201.     static void debug_renderAABB(vec3_t min, vec3_t max);
  202.     static void debug_renderLinesegment(vec3_t p1, vec3_t p2);
  203.     static void debug_renderFace(Face* face);
  204.     static void debug_renderNormals(Face* face);
  205.     static void debug_renderCOSystem();
  206.     static void debug_renderLights();
  207.     static void debug_renderClientPositions();
  208. };
  209.  
  210. #endif    /* __Renderer_h__*/
  211.