1 2 #ifndef GL_BACKEND_H 3 #define GL_BACKEND_H 4 5 extern r_viewport_t gl_viewport; 6 extern matrix4x4_t gl_modelmatrix; 7 extern matrix4x4_t gl_viewmatrix; 8 extern matrix4x4_t gl_modelviewmatrix; 9 extern matrix4x4_t gl_projectionmatrix; 10 extern matrix4x4_t gl_modelviewprojectionmatrix; 11 extern float gl_modelview16f[16]; 12 extern float gl_modelviewprojection16f[16]; 13 extern qboolean gl_modelmatrixchanged; 14 15 extern cvar_t gl_vbo_dynamicvertex; 16 extern cvar_t gl_vbo_dynamicindex; 17 18 #define POLYGONELEMENTS_MAXPOINTS 258 19 extern int polygonelement3i[(POLYGONELEMENTS_MAXPOINTS-2)*3]; 20 extern unsigned short polygonelement3s[(POLYGONELEMENTS_MAXPOINTS-2)*3]; 21 #define QUADELEMENTS_MAXQUADS 128 22 extern int quadelement3i[QUADELEMENTS_MAXQUADS*6]; 23 extern unsigned short quadelement3s[QUADELEMENTS_MAXQUADS*6]; 24 25 void R_Viewport_TransformToScreen(const r_viewport_t *v, const vec4_t in, vec4_t out); 26 qboolean R_ScissorForBBox(const float *mins, const float *maxs, int *scissor); 27 void R_Viewport_InitOrtho(r_viewport_t *v, const matrix4x4_t *cameramatrix, int x, int y, int width, int height, float x1, float y1, float x2, float y2, float zNear, float zFar, const float *nearplane); 28 void R_Viewport_InitPerspective(r_viewport_t *v, const matrix4x4_t *cameramatrix, int x, int y, int width, int height, float frustumx, float frustumy, float zNear, float zFar, const float *nearplane); 29 void R_Viewport_InitPerspectiveInfinite(r_viewport_t *v, const matrix4x4_t *cameramatrix, int x, int y, int width, int height, float frustumx, float frustumy, float zNear, const float *nearplane); 30 void R_Viewport_InitCubeSideView(r_viewport_t *v, const matrix4x4_t *cameramatrix, int side, int size, float nearclip, float farclip, const float *nearplane); 31 void R_Viewport_InitRectSideView(r_viewport_t *v, const matrix4x4_t *cameramatrix, int side, int size, int border, float nearclip, float farclip, const float *nearplane); 32 void R_SetViewport(const r_viewport_t *v); 33 void R_GetViewport(r_viewport_t *v); 34 void GL_Finish(void); 35 36 void GL_BlendFunc(int blendfunc1, int blendfunc2); 37 void GL_BlendEquationSubtract(qboolean negated); 38 void GL_DepthMask(int state); 39 void GL_DepthTest(int state); 40 void GL_DepthFunc(int state); 41 void GL_DepthRange(float nearfrac, float farfrac); 42 void R_SetStencilSeparate(qboolean enable, int writemask, int frontfail, int frontzfail, int frontzpass, int backfail, int backzfail, int backzpass, int frontcompare, int backcompare, int comparereference, int comparemask); 43 void R_SetStencil(qboolean enable, int writemask, int fail, int zfail, int zpass, int compare, int comparereference, int comparemask); 44 void GL_PolygonOffset(float planeoffset, float depthoffset); 45 void GL_CullFace(int state); 46 void GL_AlphaTest(int state); 47 void GL_AlphaToCoverage(qboolean state); 48 void GL_ColorMask(int r, int g, int b, int a); 49 void GL_Color(float cr, float cg, float cb, float ca); 50 void GL_ActiveTexture(unsigned int num); 51 void GL_ClientActiveTexture(unsigned int num); 52 void GL_Scissor(int x, int y, int width, int height); 53 void GL_ScissorTest(int state); 54 void GL_Clear(int mask, const float *colorvalue, float depthvalue, int stencilvalue); 55 void GL_ReadPixelsBGRA(int x, int y, int width, int height, unsigned char *outpixels); 56 int R_Mesh_CreateFramebufferObject(rtexture_t *depthtexture, rtexture_t *colortexture, rtexture_t *colortexture2, rtexture_t *colortexture3, rtexture_t *colortexture4); 57 void R_Mesh_DestroyFramebufferObject(int fbo); 58 void R_Mesh_SetRenderTargets(int fbo, rtexture_t *depthtexture, rtexture_t *colortexture, rtexture_t *colortexture2, rtexture_t *colortexture3, rtexture_t *colortexture4); 59 60 unsigned int GL_Backend_CompileProgram(int vertexstrings_count, const char **vertexstrings_list, int geometrystrings_count, const char **geometrystrings_list, int fragmentstrings_count, const char **fragmentstrings_list); 61 void GL_Backend_FreeProgram(unsigned int prog); 62 63 extern cvar_t gl_paranoid; 64 extern cvar_t gl_printcheckerror; 65 66 // adds console variables and registers the render module (only call from GL_Init) 67 void gl_backend_init(void); 68 69 // starts mesh rendering for the frame 70 void R_Mesh_Start(void); 71 72 // ends mesh rendering for the frame 73 // (only valid after R_Mesh_Start) 74 void R_Mesh_Finish(void); 75 76 77 // vertex buffer and index buffer creation/updating/freeing 78 r_meshbuffer_t *R_Mesh_CreateMeshBuffer(const void *data, size_t size, const char *name, qboolean isindexbuffer, qboolean isuniformbuffer, qboolean isdynamic, qboolean isindex16); 79 void R_Mesh_UpdateMeshBuffer(r_meshbuffer_t *buffer, const void *data, size_t size, qboolean subdata, size_t offset); 80 void R_Mesh_DestroyMeshBuffer(r_meshbuffer_t *buffer); 81 void GL_Mesh_ListVBOs(qboolean printeach); 82 83 void R_Mesh_PrepareVertices_Vertex3f(int numvertices, const float *vertex3f, const r_meshbuffer_t *buffer, int bufferoffset); 84 85 r_vertexgeneric_t *R_Mesh_PrepareVertices_Generic_Lock(int numvertices); 86 qboolean R_Mesh_PrepareVertices_Generic_Unlock(void); 87 void R_Mesh_PrepareVertices_Generic_Arrays(int numvertices, const float *vertex3f, const float *color4f, const float *texcoord2f); 88 void R_Mesh_PrepareVertices_Generic(int numvertices, const r_vertexgeneric_t *vertex, const r_meshbuffer_t *vertexbuffer, int bufferoffset); 89 90 r_vertexmesh_t *R_Mesh_PrepareVertices_Mesh_Lock(int numvertices); 91 qboolean R_Mesh_PrepareVertices_Mesh_Unlock(void); // if this returns false, you need to prepare the mesh again! 92 void R_Mesh_PrepareVertices_Mesh_Arrays(int numvertices, const float *vertex3f, const float *svector3f, const float *tvector3f, const float *normal3f, const float *color4f, const float *texcoordtexture2f, const float *texcoordlightmap2f); 93 void R_Mesh_PrepareVertices_Mesh(int numvertices, const r_vertexmesh_t *vertex, const r_meshbuffer_t *buffer, int bufferoffset); 94 95 // sets up the requested vertex transform matrix 96 void R_EntityMatrix(const matrix4x4_t *matrix); 97 // sets the vertex array pointer 98 void R_Mesh_VertexPointer(int components, int gltype, size_t stride, const void *pointer, const r_meshbuffer_t *vertexbuffer, size_t bufferoffset); 99 // sets the color array pointer (GL_Color only works when this is NULL) 100 void R_Mesh_ColorPointer(int components, int gltype, size_t stride, const void *pointer, const r_meshbuffer_t *vertexbuffer, size_t bufferoffset); 101 // sets the texcoord array pointer for an array unit, if GL_UNSIGNED_BYTE | 0x80000000 is specified it will be an unnormalized type (integer values) 102 void R_Mesh_TexCoordPointer(unsigned int unitnum, int components, int gltype, size_t stride, const void *pointer, const r_meshbuffer_t *vertexbuffer, size_t bufferoffset); 103 // returns current texture bound to this identifier 104 int R_Mesh_TexBound(unsigned int unitnum, int id); 105 // copies a section of the framebuffer to a 2D texture 106 void R_Mesh_CopyToTexture(rtexture_t *tex, int tx, int ty, int sx, int sy, int width, int height); 107 // bind a given texture to a given image unit 108 void R_Mesh_TexBind(unsigned int unitnum, rtexture_t *tex); 109 // sets the texcoord matrix for a texenv unit, can be NULL or blank (will use identity) 110 void R_Mesh_TexMatrix(unsigned int unitnum, const matrix4x4_t *matrix); 111 // sets the combine state for a texenv unit 112 void R_Mesh_TexCombine(unsigned int unitnum, int combinergb, int combinealpha, int rgbscale, int alphascale); 113 // set up a blank texture state (unbinds all textures, texcoord pointers, and resets combine settings) 114 void R_Mesh_ResetTextureState(void); 115 // before a texture is freed, make sure there are no references to it 116 void R_Mesh_ClearBindingsForTexture(int texnum); 117 118 // renders a mesh 119 void R_Mesh_Draw(int firstvertex, int numvertices, int firsttriangle, int numtriangles, const int *element3i, const r_meshbuffer_t *element3i_indexbuffer, int element3i_bufferoffset, const unsigned short *element3s, const r_meshbuffer_t *element3s_indexbuffer, int element3s_bufferoffset); 120 121 // saves a section of the rendered frame to a .tga or .jpg file 122 qboolean SCR_ScreenShot(char *filename, unsigned char *buffer1, unsigned char *buffer2, int x, int y, int width, int height, qboolean flipx, qboolean flipy, qboolean flipdiagonal, qboolean jpeg, qboolean png, qboolean gammacorrect, qboolean keep_alpha); 123 // used by R_Envmap_f and internally in backend, clears the frame 124 void R_ClearScreen(qboolean fogcolor); 125 126 #endif 127 128