home *** CD-ROM | disk | FTP | other *** search
- #ifndef __Renderer_h__
- #define __Renderer_h__
-
- #include "SDL.h"
- //#include "SDL_opengl.h"
- #include "Model.h"
- #include "Console.h"
- #include "vectormath.h"
- //#include "Bintree.h"
- #include "SpacePartitioningTree.h"
- //#include "Camera.h"
- //#include "Light.h"
- #include "ParticleSystem.h"
- #include "texfont.h"
- #include "RendererInfo.h"
-
- #include <list>
-
-
- //! enumeration of supported lighting modes
- enum lightingModes_s{
- LIGHTING_MODE_NONE=0, //!< no lighting
- LIGHTING_MODE_OPENGL=1, //!< openGL-Lighting
- LIGHTING_MODE_VERTEX=2, //!< vertex lighting
- LIGHTING_MODE_LIGHTMAP=3, //!< lightmap lighting
-
- NUM_LIGHTING_MODES //!< number of supported lighting modes
- };
-
-
- typedef struct transparentPoly_s{
- int type;
- float distanceToCamera;
- float matrix[16];
-
- Face* face;
-
- vec3_t pos;
- float width, height;
- Shader* shader;
- unsigned long shaderSetupMillis;
- }transparentPoly_t;
-
- //#define MAX_TRANSPARENT_FACES 4096
-
- //typedef void (APIENTRY * _PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
- //typedef void (APIENTRY * _PFNGLUNLOCKARRAYSEXTPROC) (void);
-
- //extern _PFNGLLOCKARRAYSEXTPROC _glLockArraysEXT;
- //extern _PFNGLUNLOCKARRAYSEXTPROC _glUnlockArraysEXT;
-
- // multitexture
- //#ifndef GL_ARB_multitexture
- #define GL_TEXTURE0_ARB 0x84C0
- #define GL_TEXTURE1_ARB 0x84C1
- #define GL_TEXTURE2_ARB 0x84C2
- #define GL_TEXTURE3_ARB 0x84C3
- #define GL_TEXTURE4_ARB 0x84C4
- #define GL_TEXTURE5_ARB 0x84C5
- #define GL_TEXTURE6_ARB 0x84C6
- #define GL_TEXTURE7_ARB 0x84C7
- #define GL_TEXTURE8_ARB 0x84C8
- #define GL_TEXTURE9_ARB 0x84C9
- #define GL_TEXTURE10_ARB 0x84CA
- #define GL_TEXTURE11_ARB 0x84CB
- #define GL_TEXTURE12_ARB 0x84CC
- #define GL_TEXTURE13_ARB 0x84CD
- #define GL_TEXTURE14_ARB 0x84CE
- #define GL_TEXTURE15_ARB 0x84CF
- #define GL_TEXTURE16_ARB 0x84D0
- #define GL_TEXTURE17_ARB 0x84D1
- #define GL_TEXTURE18_ARB 0x84D2
- #define GL_TEXTURE19_ARB 0x84D3
- #define GL_TEXTURE20_ARB 0x84D4
- #define GL_TEXTURE21_ARB 0x84D5
- #define GL_TEXTURE22_ARB 0x84D6
- #define GL_TEXTURE23_ARB 0x84D7
- #define GL_TEXTURE24_ARB 0x84D8
- #define GL_TEXTURE25_ARB 0x84D9
- #define GL_TEXTURE26_ARB 0x84DA
- #define GL_TEXTURE27_ARB 0x84DB
- #define GL_TEXTURE28_ARB 0x84DC
- #define GL_TEXTURE29_ARB 0x84DD
- #define GL_TEXTURE30_ARB 0x84DE
- #define GL_TEXTURE31_ARB 0x84DF
- #define GL_ACTIVE_TEXTURE_ARB 0x84E0
- #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1
- #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2
- //#endif
- typedef void (APIENTRY * _PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
- typedef void (APIENTRY * _PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
- typedef void (APIENTRY * _PFNGLMULTITEXCOORD2FVARBPROC) (GLenum texture, GLfloat* texCoords);
- typedef void (APIENTRY * _PFNGLMULTITEXCOORD2FARBPROC) (GLenum texture, GLfloat u, GLfloat v);
-
- extern _PFNGLACTIVETEXTUREARBPROC _glActiveTextureARB;
- extern _PFNGLCLIENTACTIVETEXTUREARBPROC _glClientActiveTextureARB;
- extern _PFNGLMULTITEXCOORD2FVARBPROC _glMultiTexCoord2fvARB;
- extern _PFNGLMULTITEXCOORD2FARBPROC _glMultiTexCoord2fARB;
-
- // VBOs
- #define GL_ARRAY_BUFFER_ARB 0x8892
- #define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
- #define GL_STATIC_DRAW_ARB 0x88E4
- typedef void (APIENTRY * _PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
- typedef void (APIENTRY * _PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
- typedef void (APIENTRY * _PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
- typedef void (APIENTRY * _PFNGLBUFFERDATAARBPROC) (GLenum target, int size, const GLvoid *data, GLenum usage);
-
- extern _PFNGLGENBUFFERSARBPROC _glGenBuffersARB;
- extern _PFNGLBINDBUFFERARBPROC _glBindBufferARB;
- extern _PFNGLBUFFERDATAARBPROC _glBufferDataARB;
- extern _PFNGLDELETEBUFFERSARBPROC _glDeleteBuffersARB;
-
- // secondary color
- #define GL_COLOR_SUM_EXT 0x8458
- #define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
- #define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
- #define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
- #define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
- #define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
- #define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
- typedef void (APIENTRY * _PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
- extern _PFNGLSECONDARYCOLORPOINTEREXTPROC _glSecondaryColorPointerEXT;
-
-
- class Renderer{
- // subsystem interface
- public:
- static RendererInfo info;
-
- static bool init();
- static bool shutdown();
- static bool wasInit();
-
- static bool initParticleSystem();
- static bool shutdownParticleSystem();
- static bool wasParticleSystemInit();
-
- static bool registerCVarsAndCCmds();
- static bool unregisterCVarsAndCCmds();
-
-
- protected:
- static bool initialized;
- static bool particleSystemInitialized;
-
- // real methods
- public:
- static ParticleSystem particleSystem;
-
- static list<transparentPoly_t> transparentPolys;
- // static Bintree* transparentFacesTree;
-
- static bool initOpenGL();
- static bool initOpenGLExtensions();
- static void sizeOpenGLViewport(int width, int height);
- static void calcFrameRate();
-
- static void renderScene();
- static void renderModel(Model* model);
- static void renderModel(Model* model, int frame);
- static void renderModel(Model* model, float frame);
- static void renderMesh(Mesh* mesh, SpacePartitioningTreeNode* node=NULL);
- static void renderFace(Face* face);
- static void renderBillboard(vec3_t pos, float width, float height, Shader* shader = NULL, unsigned long shaderSetupMillis = 0 );
- static void renderQuad(vec3_t pos1, vec3_t pos2, vec3_t pos3, vec3_t pos4);
- static void renderQ3bspExtension(Q3bspExtension* ext);
-
- static void addFaceToTransparentPolys(Face* face);
- static void addBillboardToTransparentPolys(vec3_t pos, float width, float height, Shader* shader = NULL, unsigned long shaderSetupMillis = 0);
- static void clearTransparentPolys();
- static void renderTransparentPolys();
-
- static void beginDrawing();
- static void endDrawing();
- static void drawTexturedQuad(int* min, int* max, Texture* texture);
- static void drawTexturedQuad(int x1, int y1, int x2, int y2, Texture* texture);
- static void drawQuad(int* min, int* max, vec4_t borderColor, vec4_t fillColor );
- static void drawQuad(int x1, int y1, int x2, int y2, vec4_t borderColor, vec4_t fillColor );
-
- static bool initOpenGLLighting();
- static void enableLighting();
- static void disableLighting();
-
- static void debug_renderAABB(vec3_t min, vec3_t max);
- static void debug_renderLinesegment(vec3_t p1, vec3_t p2);
- static void debug_renderFace(Face* face);
- static void debug_renderNormals(Face* face);
- static void debug_renderCOSystem();
- static void debug_renderLights();
- static void debug_renderClientPositions();
- };
-
- #endif /* __Renderer_h__*/
-