- 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;
- R_Mesh_State(&m);
-
- GL_BlendFunc(GL_SRC_ALPHA, GL_ONE);
- GL_DepthMask(false);
- GL_DepthTest(true);
- if (r_lightningbeam_qmbtexture.integer && r_lightningbeamqmbtexture == NULL)
- r_lightningbeams_setupqmbtexture();
- if (!r_lightningbeam_qmbtexture.integer && r_lightningbeamtexture == NULL)
- r_lightningbeams_setuptexture();
-
- // polygon 1, verts 0-3
- VectorScale(right, r_lightningbeam_thickness.value, offset);
- R_CalcLightningBeamPolygonVertex3f(varray_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);
- // 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);
-
- if (fogenabled)
- {
- // per vertex colors if fog is used
- GL_ColorPointer(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);
- }
- else
- {
- // solid color if fog is not used
- GL_ColorPointer(NULL);
- GL_Color(r_lightningbeam_color_red.value, r_lightningbeam_color_green.value, r_lightningbeam_color_blue.value, 1);
- }
-
- // draw the 3 polygons as one batch of 6 triangles using the 12 vertices
- R_Mesh_Draw(12, 6, r_lightningbeamelements);
+ mod = &cl_meshentitymodels[MESH_PARTICLES];
+ surf = Mod_Mesh_AddSurface(mod, r_lightningbeam_qmbtexture.integer ? &cl_beams_externaltexture : &cl_beams_builtintexture);
+ // polygon 1
+ VectorM(r_lightningbeam_thickness.value, right, offset);
+ CL_Beam_AddQuad(mod, surf, start, end, offset, t1, t2);
+ // polygon 2
+ VectorMAM(r_lightningbeam_thickness.value * 0.70710681f, right, r_lightningbeam_thickness.value * 0.70710681f, up, offset);
+ CL_Beam_AddQuad(mod, surf, start, end, offset, t1 + 0.33f, t2 + 0.33f);
+ // polygon 3
+ VectorMAM(r_lightningbeam_thickness.value * 0.70710681f, right, r_lightningbeam_thickness.value * -0.70710681f, up, offset);
+ CL_Beam_AddQuad(mod, surf, start, end, offset, t1 + 0.66f, t2 + 0.66f);