]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_main.c
added EF_DOUBLESIDED (and internally RENDER_NOCULLFACE)
[xonotic/darkplaces.git] / cl_main.c
index 13c04f1ea15a1e1d6b732db6237daea4ee0a495a..0606a8d60653c490c55ec7383c0b14559f1e9c04 100644 (file)
--- a/cl_main.c
+++ b/cl_main.c
@@ -295,8 +295,9 @@ void CL_EstablishConnection(const char *host)
 
        // stop demo loop in case this fails
        CL_Disconnect();
-       NetConn_ClientFrame();
-       NetConn_ServerFrame();
+
+       // run a network frame
+       //NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
 
        if (LHNETADDRESS_FromString(&cls.connect_address, host, 26000) && (cls.connect_mysocket = NetConn_ChooseClientSocketForAddress(&cls.connect_address)))
        {
@@ -304,17 +305,14 @@ void CL_EstablishConnection(const char *host)
                cls.connect_remainingtries = 3;
                cls.connect_nextsendtime = 0;
                M_Update_Return_Reason("Trying to connect...");
-               if (sv.active)
-               {
-                       NetConn_ClientFrame();
-                       NetConn_ServerFrame();
-                       NetConn_ClientFrame();
-                       NetConn_ServerFrame();
-                       NetConn_ClientFrame();
-                       NetConn_ServerFrame();
-                       NetConn_ClientFrame();
-                       NetConn_ServerFrame();
-               }
+               // run several network frames to jump into the game quickly
+               //if (sv.active)
+               //{
+               //      NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
+               //      NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
+               //      NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
+               //      NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
+               //}
        }
        else
        {
@@ -345,7 +343,7 @@ static void CL_PrintEntities_f(void)
                        strcpy(name, "--no model--");
                for (j = (int)strlen(name);j < 25;j++)
                        name[j] = ' ';
-               Con_Printf("%3i: %s:%4i (%5i %5i %5i) [%3i %3i %3i] %4.2f %5.3f\n", i, name, ent->render.frame, (int) ent->render.origin[0], (int) ent->render.origin[1], (int) ent->render.origin[2], (int) ent->render.angles[0] % 360, (int) ent->render.angles[1] % 360, (int) ent->render.angles[2] % 360, ent->render.scale, ent->render.alpha);
+               Con_Printf("%3i: %s:%4i (%5i %5i %5i) [%3i %3i %3i] %4.2f %5.3f\n", i, name, ent->render.frame, (int) ent->render.matrix.m[0][3], (int) ent->render.matrix.m[1][3], (int) ent->render.matrix.m[2][3], (int) ent->render.angles[0] % 360, (int) ent->render.angles[1] % 360, (int) ent->render.angles[2] % 360, ent->render.scale, ent->render.alpha);
        }
 }
 
@@ -942,18 +940,18 @@ void CL_LinkNetworkEntity(entity_t *e)
                        else if (e->render.model->flags & EF_TRACER)
                        {
                                trailtype = 3;
-                               dlightradius = max(dlightradius, 100);
-                               dlightcolor[0] += 0.25f;
-                               dlightcolor[1] += 1.00f;
-                               dlightcolor[2] += 0.25f;
+                               //dlightradius = max(dlightradius, 100);
+                               //dlightcolor[0] += 0.25f;
+                               //dlightcolor[1] += 1.00f;
+                               //dlightcolor[2] += 0.25f;
                        }
                        else if (e->render.model->flags & EF_TRACER2)
                        {
                                trailtype = 5;
-                               dlightradius = max(dlightradius, 100);
-                               dlightcolor[0] += 1.00f;
-                               dlightcolor[1] += 0.60f;
-                               dlightcolor[2] += 0.20f;
+                               //dlightradius = max(dlightradius, 100);
+                               //dlightcolor[0] += 1.00f;
+                               //dlightcolor[1] += 0.60f;
+                               //dlightcolor[2] += 0.20f;
                        }
                        else if (e->render.model->flags & EF_ROCKET)
                        {
@@ -1032,6 +1030,10 @@ void CL_LinkNetworkEntity(entity_t *e)
                // transparent stuff can't be lit during the opaque stage
                if (e->render.effects & (EF_ADDITIVE | EF_NODEPTHTEST) || e->render.alpha < 1)
                        e->render.flags |= RENDER_TRANSPARENT;
+               // double sided rendering mode causes backfaces to be visible
+               // (mostly useful on transparent stuff)
+               if (e->render.effects & EF_DOUBLESIDED)
+                       e->render.flags |= RENDER_NOCULLFACE;
                // either fullbright or lit
                if (!(e->render.effects & EF_FULLBRIGHT) && !r_fullbright.integer)
                        e->render.flags |= RENDER_LIGHT;
@@ -1219,40 +1221,14 @@ void CL_RelinkBeams(void)
 
                // if coming from the player, update the start position
                //if (b->entity == cl.viewentity)
-               //      VectorCopy (cl_entities[cl.viewentity].render.origin, b->start);
-               if (cl_beams_relative.integer && b->entity == cl.viewentity && b->entity && cl_entities[b->entity].state_current.active && b->relativestartvalid)
+               //      Matrix4x4_OriginFromMatrix(&cl_entities[cl.viewentity].render.matrix, b->start);
+               if (cl_beams_relative.integer && b->entity && cl_entities[b->entity].state_current.active && b->relativestartvalid)
                {
-                       entity_state_t *p = &cl_entities[b->entity].state_previous;
-                       //entity_state_t *c = &cl_entities[b->entity].state_current;
                        entity_render_t *r = &cl_entities[b->entity].render;
-                       matrix4x4_t matrix, imatrix;
-                       if (b->relativestartvalid == 2)
-                       {
-                               // not really valid yet, we need to get the orientation now
-                               // (ParseBeam flagged this because it is received before
-                               //  entities are received, by now they have been received)
-                               // note: because players create lightning in their think
-                               // function (which occurs before movement), they actually
-                               // have some lag in it's location, so compare to the
-                               // previous player state, not the latest
-                               if (b->entity == cl.viewentity)
-                                       Matrix4x4_CreateFromQuakeEntity(&matrix, p->origin[0], p->origin[1], p->origin[2] + 16, cl.viewangles[0], cl.viewangles[1], cl.viewangles[2], 1);
-                               else
-                                       Matrix4x4_CreateFromQuakeEntity(&matrix, p->origin[0], p->origin[1], p->origin[2] + 16, p->angles[0], p->angles[1], p->angles[2], 1);
-                               Matrix4x4_Invert_Simple(&imatrix, &matrix);
-                               Matrix4x4_Transform(&imatrix, b->start, b->relativestart);
-                               Matrix4x4_Transform(&imatrix, b->end, b->relativeend);
-                               b->relativestartvalid = 1;
-                       }
-                       else
-                       {
-                               if (b->entity == cl.viewentity)
-                                       Matrix4x4_CreateFromQuakeEntity(&matrix, r->origin[0], r->origin[1], r->origin[2] + 16, cl.viewangles[0], cl.viewangles[1], cl.viewangles[2], 1);
-                               else
-                                       Matrix4x4_CreateFromQuakeEntity(&matrix, r->origin[0], r->origin[1], r->origin[2] + 16, r->angles[0], r->angles[1], r->angles[2], 1);
-                               Matrix4x4_Transform(&matrix, b->relativestart, b->start);
-                               Matrix4x4_Transform(&matrix, b->relativeend, b->end);
-                       }
+                       //Matrix4x4_OriginFromMatrix(&r->matrix, origin);
+                       //Matrix4x4_CreateFromQuakeEntity(&matrix, r->origin[0], r->origin[1], r->origin[2] + 16, r->angles[0], r->angles[1], r->angles[2], 1);
+                       Matrix4x4_Transform(&r->matrix, b->relativestart, b->start);
+                       Matrix4x4_Transform(&r->matrix, b->relativeend, b->end);
                }
 
                if (b->lightning)
@@ -1507,6 +1483,7 @@ void CL_Init (void)
        r_refdef.maxentities = MAX_EDICTS + 256 + 512;
        r_refdef.entities = (entity_render_t **)Mem_Alloc(cl_mempool, sizeof(entity_render_t *) * r_refdef.maxentities);
        // 256k drawqueue buffer
+       // TODO: make dynamic
        r_refdef.maxdrawqueuesize = 256 * 1024;
        r_refdef.drawqueue = (unsigned char *)Mem_Alloc(cl_mempool, r_refdef.maxdrawqueuesize);