]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - clvm_cmds.c
now that performance of cl_decals_newsystem is not terrible, enable it
[xonotic/darkplaces.git] / clvm_cmds.c
index 2cb6c074e69925927132a03543fcf3327c47f6bc..d21eab0c694ded398bbea6d209ac21eeb4f37b82 100644 (file)
@@ -744,6 +744,8 @@ void VM_CL_R_AddEntities (void)
        prog->globals.client->time = cl.time;
        for(i=1;i<prog->num_edicts;i++)
        {
+               // so we can easily check if CSQC entity #edictnum is currently drawn
+               cl.csqcrenderentities[i].entitynumber = 0;
                ed = &prog->edicts[i];
                if(ed->priv.required->free)
                        continue;
@@ -2986,6 +2988,7 @@ typedef struct vmpolygons_s
        unsigned short  *data_sortedelement3s;
 
        qboolean                begin_active;
+       int     begin_draw2d;
        rtexture_t              *begin_texture;
        int                             begin_drawflag;
        int                             begin_vertices;
@@ -3075,6 +3078,8 @@ static void VM_DrawPolygonCallback (const entity_render_t *ent, const rtlight_t
        R_Mesh_ResetTextureState();
        R_EntityMatrix(&identitymatrix);
        GL_CullFace(GL_NONE);
+       GL_DepthTest(true); // polys in 3D space shall always have depth test
+       GL_DepthRange(0, 1);
        R_Mesh_VertexPointer(polys->data_vertex3f, 0, 0);
        R_Mesh_ColorPointer(polys->data_color4f, 0, 0);
        R_Mesh_TexCoordPointer(0, 2, polys->data_texcoord2f, 0, 0);
@@ -3109,7 +3114,7 @@ void VMPolygons_Store(vmpolygons_t *polys)
                if(polys->begin_color[i][3] < 1)
                        hasalpha = true;
 
-       if (r_refdef.draw2dstage)
+       if (polys->begin_draw2d)
        {
                // draw the polygon as 2D immediately
                drawqueuemesh_t mesh;
@@ -3129,7 +3134,8 @@ void VMPolygons_Store(vmpolygons_t *polys)
                int i;
                if (polys->max_triangles < polys->num_triangles + polys->begin_vertices-2)
                {
-                       polys->max_triangles *= 2;
+                       while (polys->max_triangles < polys->num_triangles + polys->begin_vertices-2)
+                               polys->max_triangles *= 2;
                        VM_ResizePolygons(polys);
                }
                if (polys->num_vertices + polys->begin_vertices <= polys->max_vertices)
@@ -3182,7 +3188,7 @@ void VM_CL_AddPolygonsToMeshQueue (void)
          polys->num_vertices = 0;  // otherwise it's not rendered at all and prints an error message --blub */
 }
 
-//void(string texturename, float flag) R_BeginPolygon
+//void(string texturename, float flag[, float is2d]) R_BeginPolygon
 void VM_CL_R_PolygonBegin (void)
 {
        const char              *picname;
@@ -3194,7 +3200,7 @@ void VM_CL_R_PolygonBegin (void)
        // better management of flags, and is more suited for 3D rendering), what
        // about supporting Q3 shaders?
 
-       VM_SAFEPARMCOUNT(2, VM_CL_R_PolygonBegin);
+       VM_SAFEPARMCOUNTRANGE(2, 3, VM_CL_R_PolygonBegin);
 
        if (!polys->initialized)
                VM_InitPolygons(polys);
@@ -3236,6 +3242,7 @@ void VM_CL_R_PolygonBegin (void)
        polys->begin_drawflag = (int)PRVM_G_FLOAT(OFS_PARM1) & DRAWFLAG_MASK;
        polys->begin_vertices = 0;
        polys->begin_active = true;
+       polys->begin_draw2d = (prog->argc >= 3 ? (int)PRVM_G_FLOAT(OFS_PARM2) : r_refdef.draw2dstage);
 }
 
 //void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex
@@ -4303,7 +4310,7 @@ VM_CL_R_AddEntity,                                // #302 void(entity ent) addentity (EXT_CSQC)
 VM_CL_R_SetView,                               // #303 float(float property, ...) setproperty (EXT_CSQC)
 VM_CL_R_RenderScene,                   // #304 void() renderscene (EXT_CSQC)
 VM_CL_R_AddDynamicLight,               // #305 void(vector org, float radius, vector lightcolours) adddynamiclight (EXT_CSQC)
-VM_CL_R_PolygonBegin,                  // #306 void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon
+VM_CL_R_PolygonBegin,                  // #306 void(string texturename, float flag, float is2d[NYI: , float lines]) R_BeginPolygon
 VM_CL_R_PolygonVertex,                 // #307 void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex
 VM_CL_R_PolygonEnd,                            // #308 void() R_EndPolygon
 NULL /* R_LoadWorldModel in menu VM, should stay unassigned in client*/, // #309