]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_rmain.c
optimizations to rendering
[xonotic/darkplaces.git] / gl_rmain.c
index 0fc2dafce113913438db3249e727880341f18a0a..d0a46fa24af4c1ed6422a427904fdfcf8020b728 100644 (file)
@@ -389,6 +389,10 @@ static void R_MarkEntities (void)
        vec3_t v;
        entity_render_t *ent;
 
+       ent = &cl_entities[0].render;
+       Matrix4x4_CreateIdentity(&ent->matrix);
+       Matrix4x4_CreateIdentity(&ent->inversematrix);
+
        R_FarClip_Box(cl.worldmodel->normalmins, cl.worldmodel->normalmaxs);
 
        if (!r_drawentities.integer)
@@ -431,10 +435,17 @@ static void R_MarkEntities (void)
                if (R_VisibleCullBox(ent->mins, ent->maxs))
                        continue;
 
+               VectorCopy(ent->angles, v);
+               if (ent->model->type != mod_brush)
+                       v[0] = -v[0];
+               Matrix4x4_CreateFromQuakeEntity(&ent->matrix, ent->origin[0], ent->origin[1], ent->origin[2], v[0], v[1], v[2], ent->scale);
+               Matrix4x4_Invert_Simple(&ent->inversematrix, &ent->matrix);
                R_LerpAnimation(ent);
                ent->visframe = r_framecount;
 
                R_FarClip_Box(ent->mins, ent->maxs);
+
+               R_UpdateEntLights(ent);
        }
 }
 
@@ -566,6 +577,7 @@ static void R_BlendView(void)
        m.depthdisable = true; // magic
        m.numtriangles = 1;
        m.numverts = 3;
+       Matrix4x4_CreateIdentity(&m.matrix);
        if (R_Mesh_Draw_GetBuffer(&m, false))
        {
                m.index[0] = 0;
@@ -613,8 +625,6 @@ void R_RenderView (void)
        R_SkyStartFrame();
        R_BuildLightList();
 
-       R_MeshQueue_BeginScene();
-
        R_FarClip_Start(r_origin, vpn, 768.0f);
 
        R_TimeReport("setup");
@@ -625,13 +635,15 @@ void R_RenderView (void)
        R_MarkEntities();
        R_TimeReport("markentity");
 
-       R_MarkWorldLights(world);
+       R_SurfMarkLights(world);
        R_TimeReport("marklights");
 
        r_farclip = R_FarClip_Finish() + 256.0f;
 
        R_Mesh_Start(r_farclip);
 
+       R_MeshQueue_BeginScene();
+
 
        if (skyrendermasked)
        {
@@ -644,7 +656,6 @@ void R_RenderView (void)
                R_TimeReport("viewmodel");
        }
 
-       R_SetupForWorldRendering(world);
        R_PrepareSurfaces(world);
        R_TimeReport("surfprep");
 
@@ -677,9 +688,7 @@ void R_RenderView (void)
        R_DrawExplosions();
        R_TimeReport("explosions");
 
-       R_MeshQueue_EndScene();
-
-       R_Mesh_AddTransparent();
+       R_MeshQueue_RenderTransparent();
        R_TimeReport("addtrans");
 
        R_DrawCoronas();
@@ -691,6 +700,10 @@ void R_RenderView (void)
        R_BlendView();
        R_TimeReport("blendview");
 
+       R_MeshQueue_Render();
+
+       R_MeshQueue_EndScene();
+
        R_Mesh_Finish();
        R_TimeReport("meshfinish");
 }