X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=r_lightning.c;h=ee4cee39da77fe8bcfad2a46386d1d0c8989cfda;hb=a3a9fdaf8edba37e4c895b2f10926481c46916a0;hp=dae55398f105e2b465845b11a0d036af8445edb8;hpb=fd091d66e2673b19eb9c7d73d95160ef874de5e6;p=xonotic%2Fdarkplaces.git diff --git a/r_lightning.c b/r_lightning.c index dae55398..ee4cee39 100644 --- a/r_lightning.c +++ b/r_lightning.c @@ -14,7 +14,7 @@ rtexture_t *r_lightningbeamtexture; rtexture_t *r_lightningbeamqmbtexture; rtexturepool_t *r_lightningbeamtexturepool; -int r_lightningbeamelements[18] = {0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11}; +unsigned short r_lightningbeamelements[18] = {0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11}; void r_lightningbeams_start(void) { @@ -92,7 +92,7 @@ void r_lightningbeams_setuptexture(void) if (px >= 0 && py >= 0 && px < BEAMWIDTH && py < BEAMHEIGHT) image[py*BEAMWIDTH+px] += 16; } - + for (py = 0;py < BEAMHEIGHT;py++) { for (px = 0;px < BEAMWIDTH;px++) @@ -103,7 +103,7 @@ void r_lightningbeams_setuptexture(void) pixels[(py*BEAMWIDTH+px)*4+3] = 255; } } - + Image_WriteTGABGRA(va("lightningbeam%i.tga", imagenumber), BEAMWIDTH, BEAMHEIGHT, pixels); } @@ -242,13 +242,15 @@ void R_DrawLightningBeam_TransparentCallback(const entity_render_t *ent, const r GL_DepthRange(0, 1); GL_PolygonOffset(r_refdef.polygonfactor, r_refdef.polygonoffset); GL_DepthTest(true); + GL_CullFace(GL_NONE); if (r_lightningbeam_qmbtexture.integer && r_lightningbeamqmbtexture == NULL) r_lightningbeams_setupqmbtexture(); if (!r_lightningbeam_qmbtexture.integer && r_lightningbeamtexture == NULL) r_lightningbeams_setuptexture(); R_Mesh_VertexPointer(vertex3f, 0, 0); - // FIXME: fixed function path can't properly handle r_view.colorscale > 1 + R_SetupGenericShader(true); + // FIXME: fixed function path can't properly handle r_refdef.view.colorscale > 1 if (r_refdef.fogenabled) { // per vertex colors if fog is used @@ -258,7 +260,7 @@ void R_DrawLightningBeam_TransparentCallback(const entity_render_t *ent, const r { // solid color if fog is not used R_Mesh_ColorPointer(NULL, 0, 0); - GL_Color(r_lightningbeam_color_red.value * r_view.colorscale, r_lightningbeam_color_green.value * r_view.colorscale, r_lightningbeam_color_blue.value * r_view.colorscale, 1); + GL_Color(r_lightningbeam_color_red.value * r_refdef.view.colorscale, r_lightningbeam_color_green.value * r_refdef.view.colorscale, r_lightningbeam_color_blue.value * r_refdef.view.colorscale, 1); } memset(&m, 0, sizeof(m)); if (r_lightningbeam_qmbtexture.integer) @@ -288,7 +290,7 @@ void R_DrawLightningBeam_TransparentCallback(const entity_render_t *ent, const r // calculate up vector such that it points toward viewer, and rotates around the beamdir // get direction from start of beam to viewer - VectorSubtract(r_view.origin, start, up); + VectorSubtract(r_refdef.view.origin, start, up); // remove the portion of the vector that moves along the beam // (this leaves only a vector pointing directly away from the beam) t1 = -DotProduct(up, beamdir); @@ -300,7 +302,7 @@ void R_DrawLightningBeam_TransparentCallback(const entity_render_t *ent, const r VectorNormalize(up); // calculate T coordinate scrolling (start and end texcoord along the beam) - t1 = r_refdef.time * -r_lightningbeam_scroll.value;// + beamrepeatscale * DotProduct(start, beamdir); + t1 = r_refdef.scene.time * -r_lightningbeam_scroll.value;// + beamrepeatscale * DotProduct(start, beamdir); t1 = t1 - (int) t1; t2 = t1 + beamrepeatscale * length; @@ -337,7 +339,7 @@ void R_DrawLightningBeam_TransparentCallback(const entity_render_t *ent, const r // draw the 3 polygons as one batch of 6 triangles using the 12 vertices GL_LockArrays(0, 12); - R_Mesh_Draw(0, 12, 6, r_lightningbeamelements, 0, 0); + R_Mesh_Draw(0, 12, 0, 6, NULL, r_lightningbeamelements, 0, 0); GL_LockArrays(0, 0); } } @@ -361,7 +363,7 @@ void R_DrawLightningBeams(void) CL_Beam_CalculatePositions(b, start, end); // calculate the nearest point on the line (beam) for depth sorting VectorSubtract(end, start, dir); - dist = (DotProduct(r_view.origin, dir) - DotProduct(start, dir)) / (DotProduct(end, dir) - DotProduct(start, dir)); + dist = (DotProduct(r_refdef.view.origin, dir) - DotProduct(start, dir)) / (DotProduct(end, dir) - DotProduct(start, dir)); dist = bound(0, dist, 1); VectorLerp(start, dist, end, org); // now we have the nearest point on the line, so sort with it