X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=gl_backend.c;h=cb24fd3a7a625736bd62a321a4550737c8cae078;hp=149ef4d4f4116e0dfa37ecee90bfac677f2deaa2;hb=63b6b6b3abd804decc7e95be501ed60895c1d92a;hpb=69f3a5b2fdb60c908b57ff0fb14dc1493cc6e0a5 diff --git a/gl_backend.c b/gl_backend.c index 149ef4d4..cb24fd3a 100644 --- a/gl_backend.c +++ b/gl_backend.c @@ -84,7 +84,6 @@ static matrix4x4_t backend_glmodelviewmatrix; static matrix4x4_t backend_projectmatrix; static unsigned int backendunits, backendimageunits, backendarrayunits, backendactive; -static mempool_t *gl_backend_mempool; /* note: here's strip order for a terrain row: @@ -146,15 +145,12 @@ static void R_Mesh_CacheArray_Startup(void); static void R_Mesh_CacheArray_Shutdown(void); void GL_Backend_AllocArrays(void) { - if (!gl_backend_mempool) - gl_backend_mempool = Mem_AllocPool("GL_Backend", 0, NULL); R_Mesh_CacheArray_Startup(); } void GL_Backend_FreeArrays(void) { R_Mesh_CacheArray_Shutdown(); - Mem_FreePool(&gl_backend_mempool); } static void gl_backend_start(void) @@ -876,18 +872,18 @@ void GL_Backend_RenumberElements(int *out, int count, const int *in, int offset) // renders triangles using vertices from the active arrays int paranoidblah = 0; -void R_Mesh_Draw(int numverts, int numtriangles, const int *elements) +void R_Mesh_Draw(int firstvertex, int numvertices, int numtriangles, const int *elements) { - int numelements = numtriangles * 3; - if (numverts == 0 || numtriangles == 0) + unsigned int numelements = numtriangles * 3; + if (numvertices < 3 || numtriangles < 1) { - Con_Printf("R_Mesh_Draw(%d, %d, %08p);\n", numverts, numtriangles, elements); + Con_Printf("R_Mesh_Draw(%d, %d, %d, %08p);\n", firstvertex, numvertices, numtriangles, elements); return; } - CHECKGLERROR + //CHECKGLERROR if (r_showtrispass) { - R_Mesh_Draw_ShowTris(numverts, numtriangles, elements); + R_Mesh_Draw_ShowTris(firstvertex, numvertices, numtriangles, elements); return; } c_meshs++; @@ -898,13 +894,13 @@ void R_Mesh_Draw(int numverts, int numtriangles, const int *elements) const int *p; if (!qglIsEnabled(GL_VERTEX_ARRAY)) Con_Print("R_Mesh_Draw: vertex array not enabled\n"); - for (j = 0, size = numverts * (int)sizeof(float[3]), p = gl_state.pointer_vertex;j < size;j += sizeof(int), p++) + for (j = 0, size = numvertices * 3, p = (int *)((float *)gl_state.pointer_vertex + firstvertex * 3);j < size;j++, p++) paranoidblah += *p; if (gl_state.pointer_color) { if (!qglIsEnabled(GL_COLOR_ARRAY)) Con_Print("R_Mesh_Draw: color array set but not enabled\n"); - for (j = 0, size = numverts * (int)sizeof(float[4]), p = gl_state.pointer_color;j < size;j += sizeof(int), p++) + for (j = 0, size = numvertices * 4, p = (int *)((float *)gl_state.pointer_color + firstvertex * 4);j < size;j++, p++) paranoidblah += *p; } for (i = 0;i < backendarrayunits;i++) @@ -914,15 +910,15 @@ void R_Mesh_Draw(int numverts, int numtriangles, const int *elements) GL_ClientActiveTexture(i); if (!qglIsEnabled(GL_TEXTURE_COORD_ARRAY)) Con_Print("R_Mesh_Draw: texcoord array set but not enabled\n"); - for (j = 0, size = numverts * ((gl_state.units[i].t3d || gl_state.units[i].tcubemap) ? (int)sizeof(float[3]) : (int)sizeof(float[2])), p = gl_state.units[i].pointer_texcoord;j < size;j += sizeof(int), p++) + for (j = 0, size = numvertices * gl_state.units[i].arraycomponents, p = (int *)((float *)gl_state.units[i].pointer_texcoord + firstvertex * gl_state.units[i].arraycomponents);j < size;j++, p++) paranoidblah += *p; } } - for (i = 0;i < numtriangles * 3;i++) + for (i = 0;i < (unsigned int) numtriangles * 3;i++) { - if (elements[i] < 0 || elements[i] >= numverts) + if (elements[i] < firstvertex || elements[i] >= firstvertex + numvertices) { - Con_Printf("R_Mesh_Draw: invalid vertex index %i (outside range 0 - %i) in elements list\n", elements[i], numverts); + Con_Printf("R_Mesh_Draw: invalid vertex index %i (outside range %i - %i) in elements list\n", elements[i], firstvertex, firstvertex + numvertices); return; } } @@ -936,7 +932,7 @@ void R_Mesh_Draw(int numverts, int numtriangles, const int *elements) unsigned int i, j; const GLfloat *p; qglBegin(GL_TRIANGLES); - for (i = 0;i < numtriangles * 3;i++) + for (i = 0;i < (unsigned int) numtriangles * 3;i++) { for (j = 0;j < backendarrayunits;j++) { @@ -1014,13 +1010,14 @@ void R_Mesh_Draw(int numverts, int numtriangles, const int *elements) } else if (gl_mesh_drawrangeelements.integer && qglDrawRangeElements != NULL) { - qglDrawRangeElements(GL_TRIANGLES, 0, numverts, numelements, GL_UNSIGNED_INT, elements);CHECKGLERROR + qglDrawRangeElements(GL_TRIANGLES, firstvertex, firstvertex + numvertices, numelements, GL_UNSIGNED_INT, elements); + CHECKGLERROR } else { - qglDrawElements(GL_TRIANGLES, numelements, GL_UNSIGNED_INT, elements);CHECKGLERROR + qglDrawElements(GL_TRIANGLES, numelements, GL_UNSIGNED_INT, elements); + CHECKGLERROR } - CHECKGLERROR } } @@ -1054,7 +1051,7 @@ void R_Mesh_Finish(void) } for (i = 0;i < backendunits;i++) { - GL_ActiveTexture(backendarrayunits - 1 - i); + GL_ActiveTexture(backendunits - 1 - i); qglDisable(GL_TEXTURE_1D);CHECKGLERROR qglDisable(GL_TEXTURE_2D);CHECKGLERROR if (gl_texture3d) @@ -1591,7 +1588,7 @@ void R_Mesh_State(const rmeshstate_t *m) } } -void R_Mesh_Draw_ShowTris(int numverts, int numtriangles, const int *elements) +void R_Mesh_Draw_ShowTris(int firstvertex, int numvertices, int numtriangles, const int *elements) { qglBegin(GL_LINES); for (;numtriangles;numtriangles--, elements += 3) @@ -1651,7 +1648,11 @@ void R_ClearScreen(void) if (r_render.integer) { // clear to black - qglClearColor(0,0,0,0);CHECKGLERROR + if (fogenabled) + qglClearColor(fogcolor[0],fogcolor[1],fogcolor[2],0); + else + qglClearColor(0,0,0,0); + CHECKGLERROR qglClearDepth(1);CHECKGLERROR if (gl_stencil) { @@ -1796,7 +1797,7 @@ void SCR_UpdateLoadingScreen (void) R_Mesh_Start(); R_Mesh_Matrix(&r_identitymatrix); // draw the loading plaque - pic = Draw_CachePic("gfx/loading.lmp"); + pic = Draw_CachePic("gfx/loading.lmp", false); x = (vid_conwidth.integer - pic->width)/2; y = (vid_conheight.integer - pic->height)/2; GL_Color(1,1,1,1); @@ -1816,7 +1817,7 @@ void SCR_UpdateLoadingScreen (void) varray_texcoord2f[0][4] = 1;varray_texcoord2f[0][5] = 1; varray_texcoord2f[0][6] = 0;varray_texcoord2f[0][7] = 1; GL_LockArrays(0, 4); - R_Mesh_Draw(4, 2, polygonelements); + R_Mesh_Draw(0, 4, 2, polygonelements); GL_LockArrays(0, 0); R_Mesh_Finish(); // refresh