X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=r_lightning.c;h=639df83f4a18bee36c0806ce2ab89c5044e865d4;hb=124eb6e58f2e96ee0d10da77045c4ec5a45e811b;hp=916256005b62070499781f9f5f30ad12b0de3dc3;hpb=045c0de16a295c2599bc83dfa8942c393eed3903;p=xonotic%2Fdarkplaces.git diff --git a/r_lightning.c b/r_lightning.c index 91625600..639df83f 100644 --- a/r_lightning.c +++ b/r_lightning.c @@ -253,14 +253,14 @@ void R_DrawLightningBeamCallback(const void *calldata1, int calldata2) // (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; @@ -281,7 +281,7 @@ void R_DrawLightningBeamCallback(const void *calldata1, int calldata2) else m.tex[0] = R_GetTexture(r_lightningbeamtexture); m.pointer_texcoord[0] = varray_texcoord2f[0]; - R_Mesh_State_Texture(&m); + m.pointer_vertex = varray_vertex3f; GL_BlendFunc(GL_SRC_ALPHA, GL_ONE); GL_DepthMask(false); @@ -305,23 +305,24 @@ void R_DrawLightningBeamCallback(const void *calldata1, int calldata2) 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); - GL_VertexPointer(varray_vertex3f); 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) @@ -336,7 +337,7 @@ 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);