float particlex, particley, particlexv, particleyv, dx, dy, s, maxpathstrength;
qbyte *pixels;
int *image;
- struct {float x, y, strength;} path[PATHPOINTS], temppath;
+ struct lightningpathnode_s
+ {
+ float x, y, strength;
+ }
+ path[PATHPOINTS], temppath;
image = Mem_Alloc(tempmempool, BEAMWIDTH * BEAMHEIGHT * sizeof(int));
pixels = Mem_Alloc(tempmempool, BEAMWIDTH * BEAMHEIGHT * sizeof(qbyte[4]));
int x, y;
qbyte *data, *noise1, *noise2;
- data = Mem_Alloc(tempmempool, BEAMWIDTH * BEAMHEIGHT * 4);
- noise1 = Mem_Alloc(tempmempool, BEAMHEIGHT * BEAMHEIGHT);
- noise2 = Mem_Alloc(tempmempool, BEAMHEIGHT * BEAMHEIGHT);
+ data = (qbyte *)Mem_Alloc(tempmempool, BEAMWIDTH * BEAMHEIGHT * 4);
+ noise1 = (qbyte *)Mem_Alloc(tempmempool, BEAMHEIGHT * BEAMHEIGHT);
+ noise2 = (qbyte *)Mem_Alloc(tempmempool, BEAMHEIGHT * BEAMHEIGHT);
fractalnoise(noise1, BEAMHEIGHT, BEAMHEIGHT / 8);
fractalnoise(noise2, BEAMHEIGHT, BEAMHEIGHT / 16);
void R_DrawLightningBeamCallback(const void *calldata1, int calldata2)
{
- const beam_t *b = calldata1;
+ const beam_t *b = (beam_t *)calldata1;
rmeshstate_t m;
vec3_t beamdir, right, up, offset;
float length, t1, t2;
// (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;
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);