summaryrefslogtreecommitdiffstats
path: root/src/video/trail_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/video/trail_render.c')
-rw-r--r--src/video/trail_render.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/video/trail_render.c b/src/video/trail_render.c
new file mode 100644
index 0000000..60f4188
--- /dev/null
+++ b/src/video/trail_render.c
@@ -0,0 +1,73 @@
+#include "video/trail_geometry.h"
+
+void trailStatesNormal(Player *pPlayer, int texture) {
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glEnableClientState(GL_COLOR_ARRAY);
+
+ // glEnable(GL_CULL_FACE);
+ glDisable(GL_CULL_FACE);
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_TEXTURE_2D);
+ // glDisable(GL_TEXTURE_2D);
+ // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+ // glDisable(GL_LIGHTING);
+ glBindTexture(GL_TEXTURE_2D, texture);
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
+
+ {
+ float black[] = { 0, 0, 0, 1 };
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, black);
+ glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
+ glEnable(GL_COLOR_MATERIAL);
+ }
+
+ if(gSettingsCache.alpha_trails) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+}
+
+void trailStatesShadowed(void) {
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ glDisableClientState(GL_COLOR_ARRAY);
+
+ // glEnable(GL_CULL_FACE);
+ glDisable(GL_CULL_FACE);
+ glDisable(GL_TEXTURE_2D);
+ // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+ glDisable(GL_LIGHTING);
+}
+
+void trailStatesRestore(void) {
+ glDisable(GL_COLOR_MATERIAL);
+ glCullFace(GL_BACK);
+ glDisable(GL_CULL_FACE);
+ glDisable(GL_TEXTURE_2D);
+ glDisable(GL_BLEND);
+ glEnable(GL_LIGHTING);
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+}
+
+void trailRender(TrailMesh *pMesh) {
+ if(pMesh->iUsed == 0)
+ return;
+
+ glVertexPointer(3, GL_FLOAT, 0, pMesh->pVertices);
+ glNormalPointer(GL_FLOAT, 0, pMesh->pNormals);
+ glTexCoordPointer(2, GL_FLOAT, 0, pMesh->pTexCoords);
+ glColorPointer(4, GL_UNSIGNED_BYTE, 0, pMesh->pColors);
+
+ checkGLError("texcoord pointer");
+
+ glDrawElements(GL_TRIANGLES, pMesh->iUsed, GL_UNSIGNED_SHORT, pMesh->pIndices);
+ glDisableClientState(GL_VERTEX_ARRAY);
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ glDisableClientState(GL_COLOR_ARRAY);
+
+ checkGLError("trail");
+}