X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=gl_backend.h;h=3cbb69946905f80d1268af65301092309b64de12;hb=19a27ebf7c5ce9f50a72f233e5016dd596b90979;hp=004e7f43dab88db20e24edfeb4353e2bd05fe6e3;hpb=ebe607a843d55d9cfb48f6b1859f7c54a48e4b38;p=xonotic%2Fdarkplaces.git diff --git a/gl_backend.h b/gl_backend.h index 004e7f43..3cbb6994 100644 --- a/gl_backend.h +++ b/gl_backend.h @@ -1,45 +1,64 @@ -#define MAX_TEXTUREUNITS 4 +#ifndef GL_BACKEND_H +#define GL_BACKEND_H + +#define MAX_TEXTUREUNITS 8 extern int c_meshtris, c_meshs, c_transtris, c_transmeshs; typedef struct { - int transparent; + //input to R_Mesh_Draw_GetBuffer int depthwrite; // force depth writing enabled even if polygon is not opaque int depthdisable; // disable depth read/write entirely int blendfunc1; int blendfunc2; int numtriangles; - int *index; - int indexbase; // adjustment to add to the index values int numverts; + int tex[MAX_TEXTUREUNITS]; + int texrgbscale[MAX_TEXTUREUNITS]; // used only if COMBINE is present + // model to world transform matrix + matrix4x4_t matrix; + + // output + int *index; float *vertex; - int vertexstep; float *color; - int colorstep; - // if color is NULL, these are used for all vertices - float cr, cg, cb, ca; - int tex[MAX_TEXTUREUNITS]; + float colorscale; float *texcoords[MAX_TEXTUREUNITS]; - int texcoordstep[MAX_TEXTUREUNITS]; - float texrgbscale[MAX_TEXTUREUNITS]; // used only if COMBINE is present } -rmeshinfo_t; +rmeshbufferinfo_t; // adds console variables and registers the render module (only call from GL_Init) void gl_backend_init(void); -// sets up mesh renderer for the frame -void R_Mesh_Clear(void); -// renders queued meshs + +// starts mesh rendering for the frame +void R_Mesh_Start(float farclip); + +// ends mesh rendering for the frame +// (only valid after R_Mesh_Start) +void R_Mesh_Finish(void); + +// clears depth buffer, used for masked sky rendering +// (only valid between R_Mesh_Start and R_Mesh_Finish) +void R_Mesh_ClearDepth(void); + +// renders current batch of meshs +// (only valid between R_Mesh_Start and R_Mesh_Finish) void R_Mesh_Render(void); -// queues a mesh to be rendered (invokes Render if queue is full) -void R_Mesh_Draw(const rmeshinfo_t *m); -// renders the queued transparent meshs -void R_Mesh_AddTransparent(void); -// ease-of-use frontend to R_Mesh_Draw, set up meshinfo, except for index and numtriangles and numverts, then call this -void R_Mesh_DrawPolygon(rmeshinfo_t *m, int numverts); -// same as normal, except for harsh format restrictions (vertex must be 4 float, color must be 4 float, texcoord must be 2 float, flat color not supported) -void R_Mesh_Draw_NativeOnly(const rmeshinfo_t *m); -// faster hardwired version of R_Mesh_Draw specifically for decals (has close ties to decal code) -//void R_Mesh_DrawDecal(const rmeshinfo_t *m); + +// allocates space in geometry buffers, and fills in pointers to the buffers in passsed struct +// (it is up to the caller to fill in the geometry data) +// (make sure you scale your colors by the colorscale field) +// (only valid between R_Mesh_Start and R_Mesh_Finish) +int R_Mesh_Draw_GetBuffer(rmeshbufferinfo_t *m, int wantoverbright); + +// saves a section of the rendered frame to a .tga file +qboolean SCR_ScreenShot(char *filename, int x, int y, int width, int height); +// used by R_Envmap_f and internally in backend, clears the frame +void R_ClearScreen(void); +// invoke refresh of frame +void SCR_UpdateScreen (void); + +#endif +