]> icculus.org git repositories - divverent/nexuiz.git/blob - misc/gtkradiant/singlepatches-radiant15/both-obj.diff
fix patches for ZeroRadiant
[divverent/nexuiz.git] / misc / gtkradiant / singlepatches-radiant15 / both-obj.diff
1 Index: libs/picomodel/pm_obj.c
2 ===================================================================
3 --- libs/picomodel/pm_obj.c     (revision 193)
4 +++ libs/picomodel/pm_obj.c     (working copy)
5 @@ -265,7 +265,7 @@
6                 /* get next token in material file */
7                 if (_pico_parse( p,1 ) == NULL)
8                         break;
9 -#if 0
10 +#if 1
11  
12                 /* skip empty lines */
13                 if (p->token == NULL || !strlen( p->token ))
14 @@ -307,6 +307,7 @@
15                 else if (!_pico_stricmp(p->token,"map_kd"))
16                 {
17                         char *mapName;
18 +                       picoShader_t *shader;
19  
20                         /* pointer to current shader must be valid */
21                         if (curShader == NULL)
22 @@ -321,6 +322,10 @@
23                                 _pico_printf( PICO_ERROR,"Missing material map name in MTL, line %d.",p->curLine);
24                                 _obj_mtl_error_return;
25                         }
26 +                       /* create a new pico shader */
27 +                       shader = PicoNewShader( model );
28 +                       if (shader == NULL)
29 +                               _obj_mtl_error_return;
30                         /* set shader map name */
31                         PicoSetShaderMapName( shader,mapName );
32                 }
33 @@ -521,7 +526,7 @@
34         PicoSetModelFileName( model,fileName );
35  
36         /* try loading the materials; we don't handle the result */
37 -#if 0
38 +#if 1
39         _obj_mtl_load( model );
40  #endif
41  
42 @@ -830,6 +835,41 @@
43                                 curVertex += max;
44                         }
45                 }
46 +               else if (!_pico_stricmp(p->token,"usemtl"))
47 +               {
48 +                       picoShader_t *shader;
49 +                       char *name;
50 +
51 +                       /* get material name */
52 +                       name = _pico_parse( p,0 );
53 +
54 +                       /* validate material name */
55 +                       if (name == NULL || !strlen(name))
56 +                       {
57 +                               _pico_printf( PICO_ERROR,"Missing material name in OBJ, line %d.",p->curLine);
58 +                       }
59 +                       else
60 +                       {
61 +                               shader = PicoFindShader( model, name, 1 );
62 +                               if (shader == NULL)
63 +                               {
64 +                                       _pico_printf( PICO_ERROR,"Undefined material name in OBJ, line %d. Making a default shader.",p->curLine);
65 +
66 +                                       /* create a new pico shader */
67 +                                       shader = PicoNewShader( model );
68 +                                       if (shader != NULL)
69 +                                       {
70 +                                               PicoSetShaderName( shader,name );
71 +                                               PicoSetShaderMapName( shader,name );
72 +                                               PicoSetSurfaceShader( curSurface, shader );
73 +                                       }
74 +                               }
75 +                               else
76 +                               {
77 +                                       PicoSetSurfaceShader( curSurface, shader );
78 +                               }
79 +                       }
80 +               }
81                 /* skip unparsed rest of line and continue */
82                 _pico_parse_skip_rest( p );
83         }