X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=r_lightning.c;h=fb219273827d8786efefc5970426bfc1973693cd;hb=43cc4b0b887c9bae4437858fda3a5a398b49010b;hp=f6b5bd3ae0c5c741fadb01bbe50dc9fec7a8dd6e;hpb=2eccd0e43a1c5064ab66671acddee38b90d7bc93;p=xonotic%2Fdarkplaces.git diff --git a/r_lightning.c b/r_lightning.c index f6b5bd3a..fb219273 100644 --- a/r_lightning.c +++ b/r_lightning.c @@ -231,10 +231,13 @@ float beamrepeatscale; void R_DrawLightningBeam_TransparentCallback(const entity_render_t *ent, int surfacenumber, const rtlight_t *rtlight) { - const beam_t *b = cl_beams + surfacenumber; + const beam_t *b = cl.beams + surfacenumber; rmeshstate_t m; vec3_t beamdir, right, up, offset; float length, t1, t2; + float vertex3f[12*3]; + float texcoord2f[12*2]; + float color4f[12*4]; R_Mesh_Matrix(&identitymatrix); @@ -277,14 +280,6 @@ void R_DrawLightningBeam_TransparentCallback(const entity_render_t *ent, int sur // (and realize that the whole polygon assembly orients itself to face // the viewer) - memset(&m, 0, sizeof(m)); - if (r_lightningbeam_qmbtexture.integer) - m.tex[0] = R_GetTexture(r_lightningbeamqmbtexture); - else - m.tex[0] = R_GetTexture(r_lightningbeamtexture); - m.pointer_texcoord[0] = varray_texcoord2f[0]; - m.pointer_vertex = varray_vertex3f; - GL_BlendFunc(GL_SRC_ALPHA, GL_ONE); GL_DepthMask(false); GL_DepthTest(true); @@ -295,31 +290,39 @@ void R_DrawLightningBeam_TransparentCallback(const entity_render_t *ent, int sur // polygon 1, verts 0-3 VectorScale(right, r_lightningbeam_thickness.value, offset); - R_CalcLightningBeamPolygonVertex3f(varray_vertex3f + 0, b->start, b->end, offset); + R_CalcLightningBeamPolygonVertex3f(vertex3f + 0, b->start, b->end, offset); // polygon 2, verts 4-7 VectorAdd(right, up, offset); VectorScale(offset, r_lightningbeam_thickness.value * 0.70710681f, offset); - R_CalcLightningBeamPolygonVertex3f(varray_vertex3f + 12, b->start, b->end, offset); + R_CalcLightningBeamPolygonVertex3f(vertex3f + 12, b->start, b->end, offset); // polygon 3, verts 8-11 VectorSubtract(right, up, offset); VectorScale(offset, r_lightningbeam_thickness.value * 0.70710681f, offset); - R_CalcLightningBeamPolygonVertex3f(varray_vertex3f + 24, b->start, b->end, offset); - R_CalcLightningBeamPolygonTexCoord2f(varray_texcoord2f[0] + 0, t1, t2); - R_CalcLightningBeamPolygonTexCoord2f(varray_texcoord2f[0] + 8, t1 + 0.33, t2 + 0.33); - R_CalcLightningBeamPolygonTexCoord2f(varray_texcoord2f[0] + 16, t1 + 0.66, t2 + 0.66); + R_CalcLightningBeamPolygonVertex3f(vertex3f + 24, b->start, b->end, offset); + R_CalcLightningBeamPolygonTexCoord2f(texcoord2f + 0, t1, t2); + R_CalcLightningBeamPolygonTexCoord2f(texcoord2f + 8, t1 + 0.33, t2 + 0.33); + R_CalcLightningBeamPolygonTexCoord2f(texcoord2f + 16, t1 + 0.66, t2 + 0.66); + R_Mesh_VertexPointer(vertex3f); if (fogenabled) { // per vertex colors if fog is used - m.pointer_color = varray_color4f; - R_FogLightningBeam_Vertex3f_Color4f(varray_vertex3f, varray_color4f, 12, r_lightningbeam_color_red.value, r_lightningbeam_color_green.value, r_lightningbeam_color_blue.value, 1); + R_Mesh_ColorPointer(color4f); + R_FogLightningBeam_Vertex3f_Color4f(vertex3f, color4f, 12, r_lightningbeam_color_red.value, r_lightningbeam_color_green.value, r_lightningbeam_color_blue.value, 1); } else { // solid color if fog is not used + R_Mesh_ColorPointer(NULL); GL_Color(r_lightningbeam_color_red.value, r_lightningbeam_color_green.value, r_lightningbeam_color_blue.value, 1); } - R_Mesh_State(&m); + memset(&m, 0, sizeof(m)); + if (r_lightningbeam_qmbtexture.integer) + m.tex[0] = R_GetTexture(r_lightningbeamqmbtexture); + else + m.tex[0] = R_GetTexture(r_lightningbeamtexture); + m.pointer_texcoord[0] = texcoord2f; + R_Mesh_TextureState(&m); // draw the 3 polygons as one batch of 6 triangles using the 12 vertices GL_LockArrays(0, 12); @@ -337,7 +340,7 @@ void R_DrawLightningBeams(void) return; beamrepeatscale = 1.0f / r_lightningbeam_repeatdistance.value; - for (i = 0, b = cl_beams;i < cl_activebeams;i++, b++) + for (i = 0, b = cl.beams;i < cl.num_beams;i++, b++) { if (b->model && b->endtime >= r_refdef.time && b->lightning) {