]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_cmds.c
ignore GL_EXT_texture3D extension if it reports a bogus GL_MAX_3D_TEXTURE_SIZE
[xonotic/darkplaces.git] / prvm_cmds.c
index b2ae2599708e539e036e65def0df403f9b15650a..735ad7a2e663fec823b27b95b90c30a94d6df7b6 100644 (file)
@@ -749,13 +749,20 @@ void VM_remove (void)
        VM_SAFEPARMCOUNT(1, VM_remove);
 
        ed = PRVM_G_EDICT(OFS_PARM0);
-       if( PRVM_NUM_FOR_EDICT(ed) <= prog->reserved_edicts ) {
+       if( PRVM_NUM_FOR_EDICT(ed) <= prog->reserved_edicts )
+       {
                Con_DPrint( "VM_remove: tried to remove the null entity or a reserved entity!\n" );
-       } else if( ed->priv.required->free ) {
+               if (developer.integer >= 1)
+                       PRVM_PrintState();
+       }
+       else if( ed->priv.required->free )
+       {
                Con_DPrint( "VM_remove: tried to remove an already freed entity!\n" );
-       } else {
-               PRVM_ED_Free (ed);
+               if (developer.integer >= 1)
+                       PRVM_PrintState();
        }
+       else
+               PRVM_ED_Free (ed);
 //     if (ed == prog->edicts)
 //             PRVM_ERROR ("remove: tried to remove world");
 //     if (PRVM_NUM_FOR_EDICT(ed) <= sv.maxclients)
@@ -783,12 +790,11 @@ void VM_find (void)
        f = PRVM_G_INT(OFS_PARM1);
        s = PRVM_G_STRING(OFS_PARM2);
 
-       if (!s || !s[0])
-       {
-               // return reserved edict 0 (could be used for whatever the prog wants)
-               VM_RETURN_EDICT(prog->edicts);
-               return;
-       }
+       // LordHavoc: apparently BloodMage does a find(world, weaponmodel, "") and
+       // expects it to find all the monsters, so we must be careful to support
+       // searching for ""
+       if (!s)
+               s = "";
 
        for (e++ ; e < prog->num_edicts ; e++)
        {
@@ -798,7 +804,7 @@ void VM_find (void)
                        continue;
                t = PRVM_E_STRING(ed,f);
                if (!t)
-                       continue;
+                       t = "";
                if (!strcmp(t,s))
                {
                        VM_RETURN_EDICT(ed);
@@ -876,11 +882,12 @@ void VM_findchain (void)
 
        f = PRVM_G_INT(OFS_PARM0);
        s = PRVM_G_STRING(OFS_PARM1);
-       if (!s || !s[0])
-       {
-               VM_RETURN_EDICT(prog->edicts);
-               return;
-       }
+
+       // LordHavoc: apparently BloodMage does a find(world, weaponmodel, "") and
+       // expects it to find all the monsters, so we must be careful to support
+       // searching for ""
+       if (!s)
+               s = "";
 
        ent = PRVM_NEXT_EDICT(prog->edicts);
        for (i = 1;i < prog->num_edicts;i++, ent = PRVM_NEXT_EDICT(ent))
@@ -890,7 +897,7 @@ void VM_findchain (void)
                        continue;
                t = PRVM_E_STRING(ent,f);
                if (!t)
-                       continue;
+                       t = "";
                if (strcmp(t,s))
                        continue;
 
@@ -975,6 +982,8 @@ void VM_findflags (void)
                ed = PRVM_EDICT_NUM(e);
                if (ed->priv.required->free)
                        continue;
+               if (!PRVM_E_FLOAT(ed,f))
+                       continue;
                if ((int)PRVM_E_FLOAT(ed,f) & s)
                {
                        VM_RETURN_EDICT(ed);
@@ -1019,6 +1028,8 @@ void VM_findchainflags (void)
                prog->xfunction->builtinsprofile++;
                if (ent->priv.required->free)
                        continue;
+               if (!PRVM_E_FLOAT(ent,f))
+                       continue;
                if (!((int)PRVM_E_FLOAT(ent,f) & s))
                        continue;
 
@@ -2003,9 +2014,9 @@ void VM_getostype(void)
        OS_MAC - not supported
        */
 
-#ifdef _WIN32
+#ifdef WIN32
        PRVM_G_FLOAT(OFS_RETURN) = 0;
-#elif defined _MAC
+#elif defined(MACOSX)
        PRVM_G_FLOAT(OFS_RETURN) = 2;
 #else
        PRVM_G_FLOAT(OFS_RETURN) = 1;
@@ -2851,72 +2862,80 @@ void VM_InitPolygons (void)
        vm_polygons_initialized = true;
 }
 
-void VM_DrawPolygonCallback (const entity_render_t *ent, int surfacenumber, const rtlight_t *rtlight)
+void VM_DrawPolygonCallback (const entity_render_t *ent, const rtlight_t *rtlight, int numsurfaces, int *surfacelist)
 {
-       const vm_polygon_t      *p = &vm_polygons[surfacenumber];
-       int                                     flags = p->flags & 0x0f;
+       int surfacelistindex;
+       // LordHavoc: FIXME: this is stupid code
+       for (surfacelistindex = 0;surfacelistindex < numsurfaces;surfacelistindex++)
+       {
+               const vm_polygon_t      *p = &vm_polygons[surfacelist[surfacelistindex]];
+               int                                     flags = p->flags & 0x0f;
 
-       if(flags == DRAWFLAG_ADDITIVE)
-               GL_BlendFunc(GL_SRC_ALPHA, GL_ONE);
-       else if(flags == DRAWFLAG_MODULATE)
-               GL_BlendFunc(GL_DST_COLOR, GL_ZERO);
-       else if(flags == DRAWFLAG_2XMODULATE)
-               GL_BlendFunc(GL_DST_COLOR,GL_SRC_COLOR);
-       else
-               GL_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+               if(flags == DRAWFLAG_ADDITIVE)
+                       GL_BlendFunc(GL_SRC_ALPHA, GL_ONE);
+               else if(flags == DRAWFLAG_MODULATE)
+                       GL_BlendFunc(GL_DST_COLOR, GL_ZERO);
+               else if(flags == DRAWFLAG_2XMODULATE)
+                       GL_BlendFunc(GL_DST_COLOR,GL_SRC_COLOR);
+               else
+                       GL_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
-       R_Mesh_TexBind(0, R_GetTexture(p->tex));
+               R_Mesh_TexBind(0, R_GetTexture(p->tex));
 
-       //[515]: is speed is max ?
-       if(p->flags & VM_POLYGON_FLLINES)       //[515]: lines
-       {
-               qglLineWidth(p->data[13]);
-               qglBegin(GL_LINE_LOOP);
-                       qglTexCoord1f   (p->data[12]);
-                       qglColor4f              (p->data[20], p->data[21], p->data[22], p->data[23]);
-                       qglVertex3f             (p->data[0] , p->data[1],  p->data[2]);
+               CHECKGLERROR
+               //[515]: is speed is max ?
+               if(p->flags & VM_POLYGON_FLLINES)       //[515]: lines
+               {
+                       qglLineWidth(p->data[13]);CHECKGLERROR
+                       qglBegin(GL_LINE_LOOP);
+                               qglTexCoord1f   (p->data[12]);
+                               qglColor4f              (p->data[20], p->data[21], p->data[22], p->data[23]);
+                               qglVertex3f             (p->data[0] , p->data[1],  p->data[2]);
 
-                       qglTexCoord1f   (p->data[14]);
-                       qglColor4f              (p->data[24], p->data[25], p->data[26], p->data[27]);
-                       qglVertex3f             (p->data[3] , p->data[4],  p->data[5]);
+                               qglTexCoord1f   (p->data[14]);
+                               qglColor4f              (p->data[24], p->data[25], p->data[26], p->data[27]);
+                               qglVertex3f             (p->data[3] , p->data[4],  p->data[5]);
 
-                       if(p->flags & VM_POLYGON_FL3V)
-                       {
-                               qglTexCoord1f   (p->data[16]);
+                               if(p->flags & VM_POLYGON_FL3V)
+                               {
+                                       qglTexCoord1f   (p->data[16]);
+                                       qglColor4f              (p->data[28], p->data[29], p->data[30], p->data[31]);
+                                       qglVertex3f             (p->data[6] , p->data[7],  p->data[8]);
+
+                                       if(p->flags & VM_POLYGON_FL4V)
+                                       {
+                                               qglTexCoord1f   (p->data[18]);
+                                               qglColor4f              (p->data[32], p->data[33], p->data[34], p->data[35]);
+                                               qglVertex3f             (p->data[9] , p->data[10],  p->data[11]);
+                                       }
+                               }
+                       qglEnd();
+                       CHECKGLERROR
+               }
+               else
+               {
+                       qglBegin(GL_POLYGON);
+                               qglTexCoord2f   (p->data[12], p->data[13]);
+                               qglColor4f              (p->data[20], p->data[21], p->data[22], p->data[23]);
+                               qglVertex3f             (p->data[0] , p->data[1],  p->data[2]);
+
+                               qglTexCoord2f   (p->data[14], p->data[15]);
+                               qglColor4f              (p->data[24], p->data[25], p->data[26], p->data[27]);
+                               qglVertex3f             (p->data[3] , p->data[4],  p->data[5]);
+
+                               qglTexCoord2f   (p->data[16], p->data[17]);
                                qglColor4f              (p->data[28], p->data[29], p->data[30], p->data[31]);
                                qglVertex3f             (p->data[6] , p->data[7],  p->data[8]);
 
                                if(p->flags & VM_POLYGON_FL4V)
                                {
-                                       qglTexCoord1f   (p->data[18]);
+                                       qglTexCoord2f   (p->data[18], p->data[19]);
                                        qglColor4f              (p->data[32], p->data[33], p->data[34], p->data[35]);
                                        qglVertex3f             (p->data[9] , p->data[10],  p->data[11]);
                                }
-                       }
-               qglEnd();
-       }
-       else
-       {
-               qglBegin(GL_POLYGON);
-                       qglTexCoord2f   (p->data[12], p->data[13]);
-                       qglColor4f              (p->data[20], p->data[21], p->data[22], p->data[23]);
-                       qglVertex3f             (p->data[0] , p->data[1],  p->data[2]);
-
-                       qglTexCoord2f   (p->data[14], p->data[15]);
-                       qglColor4f              (p->data[24], p->data[25], p->data[26], p->data[27]);
-                       qglVertex3f             (p->data[3] , p->data[4],  p->data[5]);
-
-                       qglTexCoord2f   (p->data[16], p->data[17]);
-                       qglColor4f              (p->data[28], p->data[29], p->data[30], p->data[31]);
-                       qglVertex3f             (p->data[6] , p->data[7],  p->data[8]);
-
-                       if(p->flags & VM_POLYGON_FL4V)
-                       {
-                               qglTexCoord2f   (p->data[18], p->data[19]);
-                               qglColor4f              (p->data[32], p->data[33], p->data[34], p->data[35]);
-                               qglVertex3f             (p->data[9] , p->data[10],  p->data[11]);
-                       }
-               qglEnd();
+                       qglEnd();
+                       CHECKGLERROR
+               }
        }
 }
 
@@ -3063,7 +3082,7 @@ void VM_AddPolygonsToMeshQueue (void)
        if(!vm_drawpolygons_num)
                return;
        for(i = 0;i < vm_drawpolygons_num;i++)
-               R_MeshQueue_Add(VM_DrawPolygonCallback, NULL, i, NULL);
+               VM_DrawPolygonCallback(NULL, NULL, i, NULL);
        vm_drawpolygons_num = 0;
 }