]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - r_lightning.c
optimized LoadTGA to have fast paths for all formats, rather than one unified loading...
[xonotic/darkplaces.git] / r_lightning.c
index f6b5bd3ae0c5c741fadb01bbe50dc9fec7a8dd6e..fb219273827d8786efefc5970426bfc1973693cd 100644 (file)
@@ -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)
                {