// (this leaves only a vector pointing directly away from the beam)
t1 = -DotProduct(up, beamdir);
VectorMA(up, t1, beamdir, up);
- // now we have a vector pointing away from the beam, now we need to normalize it
- VectorNormalizeFast(up);
- // generate right vector from forward and up, the result is already normalized
- // (CrossProduct returns a vector of multiplied length of the two inputs)
+ // generate right vector from forward and up, the result is unnormalized
CrossProduct(beamdir, up, right);
+ // now normalize the right vector and up vector
+ VectorNormalize(right);
+ VectorNormalize(up);
// calculate T coordinate scrolling (start and end texcoord along the beam)
- t1 = cl.time * -r_lightningbeam_scroll.value;// + beamrepeatscale * DotProduct(b->start, beamdir);
+ t1 = r_refdef.time * -r_lightningbeam_scroll.value;// + beamrepeatscale * DotProduct(b->start, beamdir);
t1 = t1 - (int) t1;
t2 = t1 + beamrepeatscale * length;
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);
if (fogenabled)
{
// per vertex colors if fog is used
- GL_ColorPointer(varray_color4f);
+ 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);
}
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);
}
+ R_Mesh_State(&m);
// draw the 3 polygons as one batch of 6 triangles using the 12 vertices
- R_Mesh_Draw(12, 6, r_lightningbeamelements);
+ GL_LockArrays(0, 12);
+ R_Mesh_Draw(0, 12, 6, r_lightningbeamelements);
+ GL_LockArrays(0, 0);
}
void R_DrawLightningBeams(void)
beamrepeatscale = 1.0f / r_lightningbeam_repeatdistance.value;
for (i = 0, b = cl_beams;i < cl_max_beams;i++, b++)
{
- if (b->model && b->endtime >= cl.time && b->lightning)
+ if (b->model && b->endtime >= r_refdef.time && b->lightning)
{
VectorAdd(b->start, b->end, org);
VectorScale(org, 0.5f, org);