Changeset 536

Show
Ignore:
Timestamp:
03/05/08 17:10:34 (10 months ago)
Author:
phill
Message:

o Group split/merge insanity.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/morph-targets/libx42make/include/x42make-modelbuilder.h

    r523 r536  
    6060        void intrusive_ptr_add_ref( const ref_obj *r ); 
    6161        void intrusive_ptr_release( const ref_obj *r ); 
    62  
    63         class group_split_target; 
    64         class group_split_context; 
    65  
    66         class model_data_builder; 
    6762}; 
    6863 
     
    119114typedef ::boost::intrusive_ptr< model_builder > model_builder_ptr; 
    120115typedef ::boost::intrusive_ptr< const model_builder > const_model_builder_ptr; 
     116 
     117namespace _impl 
     118{ 
     119        class group_split_target; 
     120        class group_split_context; 
     121 
     122        class model_data_builder; 
     123 
     124        morph_target_ptr clone_morph_target( const_morph_target_ptr src ); 
     125        group_ptr merge_groups( group_ptr a, group_ptr b ); 
     126}; 
    121127 
    122128template< typename T > 
     
    391397        ::x42::math::vec3       tangent; 
    392398        ::x42::math::vec3       bitangent; 
     399 
     400        bool operator == ( const vertex_geometry &other ) const; 
     401        bool operator != ( const vertex_geometry &other ) const 
     402        { 
     403                return !operator == ( other ); 
     404        } 
    393405}; 
    394406 
     
    397409        ::x42::math::vec2       texture_coord; 
    398410        ::x42::rgba                     color; 
     411 
     412        bool operator == ( const vertex_attributes &other ) const; 
     413        bool operator != ( const vertex_attributes &other ) const 
     414        { 
     415                return !operator == ( other ); 
     416        } 
    399417}; 
    400418 
     
    415433 
    416434        friend class geometry; 
     435        friend morph_target_ptr _impl::clone_morph_target( const_morph_target_ptr src ); 
    417436}; 
    418437 
     
    497516        friend class _impl::group_split_target; 
    498517        friend class _impl::group_split_context; 
     518        friend group_ptr _impl::merge_groups( group_ptr a, group_ptr b ); 
    499519}; 
    500520 
  • branches/morph-targets/libx42make/modelbuilder-batch.cpp

    r524 r536  
    3333const index invalid_index = index_traits::max_val; 
    3434 
     35class group_split_target; 
     36void swap( group_split_target &a, group_split_target &b ); 
     37 
    3538class group_split_target : public ref_obj 
    3639{ 
     
    3841        const_group_ptr                                 source_group; 
    3942        group_ptr                                               target_group; 
    40         std::vector< index >                    vertex_map;             //maps source vertices to the target group 
     43        std::vector< index >                    src_to_dst_vert_map; 
     44        std::vector< index >                    dst_to_src_vert_map; 
    4145        std::vector< influence_ptr >    influences; 
    4246        size_t                                                  prim_count; 
     
    4650        index append_vert( index src_idx ); 
    4751 
    48         void compute_append_prim_cost( uint prim_index, 
     52        void compute_append_prim_cost( size_t prim_index, 
    4953                size_t &vert_cost, size_t &inf_cost ) const; 
    50         void append_prim( uint prim_index ); 
     54        void append_prim( size_t prim_index ); 
     55 
     56        void append_index( index src_idx ); 
    5157 
    5258private: 
     
    5460 
    5561        group_split_target( group_split_context *owner ); 
     62        group_split_target( const group_split_target &src ); 
     63        group_split_target& operator = ( const group_split_target &src ); 
     64 
     65        void init_target_group(); 
    5666 
    5767        friend class group_split_context; 
     68        friend void swap( group_split_target &a, group_split_target &b ); 
    5869}; 
    5970 
     
    7586        group_split_target_ptr create_target(); 
    7687 
    77         index prim_elem_index( uint prim_index, size_t elem_index ) const 
     88        index prim_elem_index( size_t prim_index, size_t elem_index ) const 
    7889        { 
    7990                return list_indices[prim_index * elems_per_prim + elem_index]; 
     
    8192 
    8293        void split_by_weight_count(); 
     94        void cost_ordered_merge( size_t max_verts, float up_merge_limit_factor ); 
     95 
     96private: 
     97        group_split_target_ptr internal_merge_groups( group_split_target_ptr a, group_split_target_ptr b ); 
    8398}; 
     99 
     100/* 
     101        Utility functions. 
     102*/ 
     103 
     104morph_target_ptr clone_morph_target( const_morph_target_ptr src ) 
     105{ 
     106        morph_target_ptr ret( new morph_target( src->name() ) ); 
     107        ret->user_tag = src->user_tag; 
     108        ret->vertices = src->vertices; 
     109        return ret; 
     110} 
     111 
     112std::vector< morph_target_ptr > clone_morph_targets( const std::vector< morph_target_ptr > &src ) 
     113{ 
     114        std::vector< morph_target_ptr > ret( src.size() ); 
     115        for( size_t i = 0; i < ret.size(); i++ ) 
     116        { 
     117                ret[i] = clone_morph_target( src[i] ); 
     118        } 
     119        return ret; 
     120} 
     121 
     122bool verts_equal( const geometry &ga, size_t ia, const geometry &gb, size_t ib ) 
     123{ 
     124        if( ga.base_shape[ia] != gb.base_shape[ib] ) 
     125                return false; 
     126 
     127        if( ga.weights[ia] != gb.weights[ib] ) 
     128                return false; 
     129 
     130        if( ga.attributes[ia] != gb.attributes[ib] ) 
     131                return false; 
     132 
     133        for( size_t i = 0; i < ga.morph_targets.size(); i++ ) 
     134        { 
     135                if( ga.morph_targets[i]->vertices[ia] != 
     136                        gb.morph_targets[i]->vertices[ib] ) 
     137                        return false; 
     138        } 
     139 
     140        return true; 
     141} 
     142 
     143bool have_similar_morph_targets( const geometry &ga, const geometry &gb ) 
     144{ 
     145        if( ga.morph_targets.size() != gb.morph_targets.size() ) 
     146                return false; 
     147 
     148        for( size_t i = 0; i < ga.morph_targets.size(); i++ ) 
     149        { 
     150                if( ga.morph_targets[i]->name() != gb.morph_targets[i]->name() ) 
     151                        return false; 
     152        } 
     153 
     154        return true; 
     155} 
     156 
     157index append_vertex( geometry &dst, const geometry &src, size_t src_idx ) 
     158{ 
     159        index dst_idx = (index)dst.vertex_count(); 
     160 
     161        dst.base_shape.push_back( src.base_shape[src_idx] ); 
     162        dst.weights.push_back( src.weights[src_idx] ); 
     163        dst.attributes.push_back( src.attributes[src_idx] ); 
     164 
     165        for( size_t i = 0; i < src.morph_targets.size(); i++ ) 
     166        { 
     167                dst.morph_targets[i]->vertices.push_back( 
     168                        src.morph_targets[i]->vertices[src_idx] ); 
     169        } 
     170 
     171        return dst_idx; 
     172} 
     173 
     174index find_vertex( const geometry &geom, const geometry &src_geom, size_t src_idx ) 
     175{ 
     176        for( size_t i = 0; i < geom.vertex_count(); i++ ) 
     177        { 
     178                if( verts_equal( geom, i, src_geom, src_idx ) ) 
     179                        return checked_int_cast< index >( i ); 
     180        } 
     181 
     182        return invalid_index; 
     183} 
     184 
     185group_ptr merge_groups( group_ptr a, group_ptr b ) 
     186{ 
     187        group_ptr ret( new group() ); 
     188 
     189        if( a == b ) 
     190        { 
     191                *ret = *a; 
     192                return ret; 
     193        } 
     194 
     195        const geometry &ag = a->geometry; 
     196        const geometry &bg = b->geometry; 
     197 
     198        if( ag.prim_type.to_list_type() != bg.prim_type.to_list_type() ) 
     199                throw error( "Cannot merge groups with dissimilar primitive types." ); 
     200 
     201        if( !have_similar_morph_targets( ag, bg ) ) 
     202                throw error( "Cannot merge groups with dissimilar morph targets." ); 
     203 
     204        std::vector< index > a_list_indices = ag.get_list_indices(); 
     205        std::vector< index > b_list_indices = bg.get_list_indices(); 
     206 
     207        ret->material_name = a->material_name; 
     208        ret->surface_name = a->surface_name; 
     209        ret->user_tag = a->user_tag; 
     210 
     211        geometry &rg = ret->geometry; 
     212 
     213        rg.user_tag = ag.user_tag; 
     214        rg.prim_type = ag.prim_type.to_list_type();      
     215 
     216        rg.base_shape = ag.base_shape; 
     217        rg.morph_targets = clone_morph_targets( ag.morph_targets ); 
     218        rg.weights = ag.weights; 
     219        rg.attributes = ag.attributes; 
     220 
     221        rg.indices.insert( rg.indices.end(), a_list_indices.begin(), 
     222                a_list_indices.end() ); 
     223 
     224        size_t base_vert = rg.base_shape.size(); 
     225         
     226        std::vector< index > remap( bg.vertex_count(), invalid_index ); 
     227        for( size_t i = 0; i < bg.vertex_count(); i++ ) 
     228        { 
     229                index idx = find_vertex( rg, bg, i ); 
     230                if( idx == invalid_index ) 
     231                        idx = append_vertex( rg, bg, i ); 
     232 
     233                remap[i] = checked_int_cast< index >( base_vert + idx ); 
     234        } 
     235 
     236        for( size_t i = 0; i < b_list_indices.size(); i++ ) 
     237        { 
     238                rg.indices.push_back( remap[b_list_indices[i]] ); 
     239        } 
     240 
     241        return ret; 
     242} 
    84243 
    85244/* 
     
    90249        : owner( owner ), 
    91250        source_group( owner->source ), target_group( new group() ), 
    92         vertex_map( owner->source->geometry.vertex_count(), invalid_index ), 
     251        src_to_dst_vert_map( owner->source->geometry.vertex_count(), invalid_index ), 
    93252        prim_count( 0 ), max_infs_per_vert( 0 ) 
     253{ 
     254        init_target_group(); 
     255} 
     256 
     257group_split_target::group_split_target( const group_split_target &src ) 
     258        : owner( src.owner ), 
     259        source_group( src.source_group ), target_group( new group() ), 
     260        src_to_dst_vert_map( src.src_to_dst_vert_map ), dst_to_src_vert_map( src.dst_to_src_vert_map ),\ 
     261        influences( src.influences ), prim_count( src.prim_count ), 
     262        max_infs_per_vert( src.max_infs_per_vert ) 
     263{ 
     264        init_target_group(); 
     265 
     266        const geometry &sg = src.source_group->geometry; 
     267        geometry &dg = target_group->geometry; 
     268 
     269        dg.prim_type = sg.prim_type; 
     270        dg.base_shape = sg.base_shape; 
     271        dg.weights = sg.weights; 
     272        dg.attributes = sg.attributes; 
     273        dg.morph_targets = clone_morph_targets( sg.morph_targets ); 
     274        dg.indices = sg.indices; 
     275        dg.user_tag = sg.user_tag; 
     276} 
     277 
     278group_split_target& group_split_target::operator = ( const group_split_target &src ) 
     279{ 
     280        group_split_target cp( src ); 
     281        swap( *this, cp ); 
     282        return *this; 
     283} 
     284 
     285void swap( group_split_target &a, group_split_target &b ) 
     286{ 
     287        std::swap( a.owner, b.owner ); 
     288        std::swap( a.source_group, b.source_group ); 
     289        std::swap( a.target_group, b.target_group ); 
     290        std::swap( a.src_to_dst_vert_map, b.src_to_dst_vert_map ); 
     291        std::swap( a.dst_to_src_vert_map, b.dst_to_src_vert_map ); 
     292        std::swap( a.influences, b.influences ); 
     293        std::swap( a.prim_count, b.prim_count ); 
     294        std::swap( a.max_infs_per_vert, b.max_infs_per_vert ); 
     295} 
     296 
     297void group_split_target::init_target_group() 
    94298{ 
    95299        target_group->material_name = source_group->material_name; 
     
    129333        geometry &dst = target_group->geometry; 
    130334 
    131         index dst_idx = (index)dst.vertex_count(); 
    132  
    133         dst.base_shape.push_back( src.base_shape[src_idx] ); 
    134         dst.weights.push_back( src.weights[src_idx] ); 
    135         dst.attributes.push_back( src.attributes[src_idx] ); 
    136  
    137         for( size_t i = 0; i < src.morph_targets.size(); i++ ) 
    138         { 
    139                 dst.morph_targets[i]->vertices.push_back( 
    140                         src.morph_targets[i]->vertices[src_idx] ); 
    141         } 
     335        index dst_idx = src_to_dst_vert_map[src_idx]; 
     336        if( dst_idx != invalid_index ) 
     337                return dst_idx;  
     338                 
     339        dst_idx = append_vertex( dst, src, src_idx ); 
     340        dst_to_src_vert_map.push_back( src_idx ); 
     341        src_to_dst_vert_map[src_idx] = dst_idx; 
    142342 
    143343        const vertex_weights &wts = src.weights[src_idx]; 
     
    160360} 
    161361 
    162 void group_split_target::compute_append_prim_cost( uint prim_index, 
     362void group_split_target::compute_append_prim_cost( size_t prim_index, 
    163363                size_t &vert_cost, size_t &inf_cost ) const 
    164364{ 
     
    170370                index src_idx = owner->prim_elem_index( prim_index, i ); 
    171371 
    172                 if( vertex_map[src_idx] != invalid_index ) 
     372                if( src_to_dst_vert_map[src_idx] != invalid_index ) 
    173373                        //already contains this one 
    174374                        continue; 
     
    182382} 
    183383 
    184 void group_split_target::append_prim( uint prim_index ) 
     384void group_split_target::append_prim( size_t prim_index ) 
    185385{ 
    186386        for( size_t i = 0; i < owner->elems_per_prim; i++ ) 
    187387        { 
    188388                index src_idx = owner->prim_elem_index( prim_index, i ); 
    189                 index dst_idx = vertex_map[src_idx]; 
    190  
    191                 if( dst_idx == invalid_index ) 
    192                 { 
    193                         dst_idx = append_vert( src_idx ); 
    194                         vertex_map[src_idx] = dst_idx; 
    195                 } 
    196  
    197                 target_group->geometry.indices.push_back( dst_idx ); 
    198         } 
     389                append_index( src_idx ); 
     390        } 
     391 
     392        prim_count++; 
     393
     394 
     395void group_split_target::append_index( index src_idx ) 
     396
     397        index dst_idx = src_to_dst_vert_map[src_idx]; 
     398 
     399        if( dst_idx == invalid_index ) 
     400                dst_idx = append_vert( src_idx ); 
     401 
     402        target_group->geometry.indices.push_back( dst_idx ); 
    199403} 
    200404 
     
    249453} 
    250454 
     455group_split_target_ptr group_split_context::internal_merge_groups( 
     456        group_split_target_ptr a, group_split_target_ptr b ) 
     457{ 
     458        group_split_target_ptr ret( new group_split_target( *a ) ); 
     459 
     460        const geometry &gb = b->target_group->geometry; 
     461        for( size_t i = 0; i < gb.index_count(); i++ ) 
     462                ret->append_index( b->dst_to_src_vert_map[gb.indices[i]] ); 
     463 
     464        //this wasn't updated since I was pushing with append_index 
     465        ret->prim_count = ret->target_group->geometry.primitive_count(); 
     466 
     467        return ret; 
     468} 
     469 
     470void group_split_context::cost_ordered_merge( size_t max_verts, float up_merge_limit_factor ) 
     471{ 
     472        std::vector< group_split_target_ptr > src( target_groups ); 
     473        std::vector< group_split_target_ptr > dst; 
     474 
     475        while( src.size() > 1 ) 
     476        { 
     477                group_split_target_ptr ga = src[0]; 
     478                group_split_target_ptr gb = src[1]; 
     479 
     480                const geometry &ag = ga->target_group->geometry; 
     481                const geometry &bg = gb->target_group->geometry; 
     482 
     483                if( !ag.vertex_count() ) 
     484                { 
     485                        src.erase( src.begin() ); 
     486                        continue; 
     487                } 
     488 
     489                if( !bg.vertex_count() ) 
     490                { 
     491                        src.erase( src.begin() + 1 ); 
     492                        continue; 
     493                } 
     494 
     495                size_t size_sum = ag.vertex_count() + bg.vertex_count(); 
     496 
     497                if( size_sum < max_verts && 
     498                        ag.vertex_count() < (size_t)(bg.vertex_count() * up_merge_limit_factor) ) 
     499                { 
     500                        //merge a into b 
     501                        group_split_target_ptr merged = merge_groups( ga, gb ); 
     502                } 
     503                else 
     504                { 
     505                        dst.push_back( ga ); 
     506                        src.erase( src.begin() ); 
     507                } 
     508        } 
     509 
     510        for( size_t i = 0; i < src.size(); i++ ) 
     511        { 
     512                const geometry &g = src[i]->target_group->geometry; 
     513 
     514                if( g.vertex_count() && g.primitive_count() ) 
     515                        dst.push_back( src[i] ); 
     516        } 
     517 
     518        std::swap( target_groups, dst ); 
     519} 
     520 
    251521}; 
    252522 
  • branches/morph-targets/libx42make/modelbuilder-geometry.cpp

    r523 r536  
    196196 
    197197/* 
     198        struct vertex_geometry 
     199*/ 
     200 
     201bool vertex_geometry::operator == ( const vertex_geometry &other ) const 
     202{ 
     203        return position == other.position && 
     204                normal == other.normal && 
     205                tangent == other.tangent && 
     206                bitangent == other.bitangent; 
     207} 
     208 
     209/* 
     210        struct vertex_attributes 
     211*/ 
     212 
     213bool vertex_attributes::operator == ( const vertex_attributes &other ) const 
     214{ 
     215        return texture_coord == other.texture_coord && 
     216                color == other.color; 
     217} 
     218 
     219/* 
    198220        class geometry 
    199221*/ 
  • branches/morph-targets/libx42pp/include/x42types.h

    r508 r536  
    242242                set_value( (byte)ur, (byte)ug, (byte)ub, (byte)ua ); 
    243243        } 
     244 
     245        bool operator == ( const rgba &other ) const 
     246        { 
     247                return v[0] == other.v[0] && 
     248                        v[1] == other.v[1] && 
     249                        v[2] == other.v[2] && 
     250                        v[3] == other.v[3]; 
     251        } 
     252        bool operator != ( const rgba &other ) const 
     253        { 
     254                return !operator == ( other ); 
     255        } 
    244256}; 
    245257 
  • branches/morph-targets/maya2q3.sln

    r179 r536  
    77                Debug (6.0)|Win32 = Debug (6.0)|Win32 
    88                Debug (7.0)|Win32 = Debug (7.0)|Win32 
     9                Debug (8.5)|Win32 = Debug (8.5)|Win32 
    910                Release (6.0)|Win32 = Release (6.0)|Win32 
    1011                Release (7.0)|Win32 = Release (7.0)|Win32 
     12                Release (8.5)|Win32 = Release (8.5)|Win32 
    1113        EndGlobalSection 
    1214        GlobalSection(ProjectConfigurationPlatforms) = postSolution 
     
    1517                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Debug (7.0)|Win32.ActiveCfg = Debug (7.0)|Win32 
    1618                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Debug (7.0)|Win32.Build.0 = Debug (7.0)|Win32 
     19                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Debug (8.5)|Win32.ActiveCfg = Debug (8.5)|Win32 
     20                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Debug (8.5)|Win32.Build.0 = Debug (8.5)|Win32 
    1721                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Release (6.0)|Win32.ActiveCfg = Release (6.0)|Win32 
    1822                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Release (6.0)|Win32.Build.0 = Release (6.0)|Win32 
    1923                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Release (7.0)|Win32.ActiveCfg = Release (7.0)|Win32 
    2024                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Release (7.0)|Win32.Build.0 = Release (7.0)|Win32 
     25                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Release (8.5)|Win32.ActiveCfg = Release (8.5)|Win32 
     26                {43311ADD-F418-4972-B3D9-3117F04D1B6C}.Release (8.5)|Win32.Build.0 = Release (8.5)|Win32 
    2127        EndGlobalSection 
    2228        GlobalSection(SolutionProperties) = preSolution 
  • branches/morph-targets/maya2q3/maya2q3.vcproj

    r495 r536  
    376376                        /> 
    377377                </Configuration> 
     378                <Configuration 
     379                        Name="Debug (8.5)|Win32" 
     380                        OutputDirectory="$(SolutionDir)$(ConfigurationName)" 
     381                        IntermediateDirectory="$(ConfigurationName)" 
     382                        ConfigurationType="2" 
     383                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" 
     384                        CharacterSet="2" 
     385                        > 
     386                        <Tool 
     387                                Name="VCPreBuildEventTool" 
     388                        /> 
     389                        <Tool 
     390                                Name="VCCustomBuildTool" 
     391                        /> 
     392                        <Tool 
     393                                Name="VCXMLDataGeneratorTool" 
     394                        /> 
     395                        <Tool 
     396                                Name="VCWebServiceProxyGeneratorTool" 
     397                        /> 
     398                        <Tool 
     399                                Name="VCMIDLTool" 
     400                        /> 
     401                        <Tool 
     402                                Name="VCCLCompilerTool" 
     403                                Optimization="0" 
     404                                AdditionalIncludeDirectories="&quot;C:\Program Files (x86)\Autodesk\Maya8.5\include&quot;" 
     405                                PreprocessorDefinitions="NT_PLUGIN;GLEW_STATIC" 
     406                                MinimalRebuild="true" 
     407                                BasicRuntimeChecks="3" 
     408                                RuntimeLibrary="0" 
     409                                DefaultCharIsUnsigned="true" 
     410                                TreatWChar_tAsBuiltInType="true" 
     411                                ForceConformanceInForLoopScope="true" 
     412                                UsePrecompiledHeader="2" 
     413                                PrecompiledHeaderThrough="common.h" 
     414                                PrecompiledHeaderFile="$(IntDir)\common.pch" 
     415                                WarningLevel="4" 
     416                                WarnAsError="true" 
     417                                Detect64BitPortabilityProblems="false" 
     418                                DebugInformationFormat="4" 
     419                        /> 
     420                        <Tool 
     421                                Name="VCManagedResourceCompilerTool" 
     422                        /> 
     423                        <Tool 
     424                                Name="VCResourceCompilerTool" 
     425                        /> 
     426                        <Tool 
     427                                Name="VCPreLinkEventTool" 
     428                        /> 
     429                        <Tool 
     430                                Name="VCLinkerTool" 
     431                                AdditionalDependencies="Foundation.lib OpenMaya.lib OpenMayaAnim.lib OpenMayaUI.lib OpenMayaRender.lib opengl32.lib glew_static.lib physfs_static.lib" 
     432                                OutputFile="$(OutDir)\$(ProjectName).mll" 
     433                                LinkIncremental="2" 
     434                                AdditionalLibraryDirectories="&quot;C:\Program Files (x86)\Autodesk\Maya8.5\lib&quot;;&quot;$(SolutionDir)libs\$(PlatformName)&quot;" 
     435                                IgnoreDefaultLibraryNames="" 
     436                                GenerateDebugInformation="true" 
     437                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb" 
     438                                SubSystem="2" 
     439                                ImportLibrary="$(OutDir)/maya2q3.lib" 
     440                                TargetMachine="1" 
     441                        /> 
     442                        <Tool 
     443                                Name="VCALinkTool" 
     444                        /> 
     445                        <Tool 
     446                                Name="VCManifestTool" 
     447                        /> 
     448                        <Tool 
     449                                Name="VCXDCMakeTool" 
     450                        /> 
     451                        <Tool 
     452                                Name="VCBscMakeTool" 
     453                        /> 
     454                        <Tool 
     455                                Name="VCFxCopTool" 
     456                        /> 
     457                        <Tool 
     458                                Name="VCAppVerifierTool" 
     459                        /> 
     460                        <Tool 
     461                                Name="VCWebDeploymentTool" 
     462                        /> 
     463                        <Tool 
     464                                Name="VCPostBuildEventTool" 
     465                                Description="Copying to Maya plugins directory." 
     466                                CommandLine="copy &quot;$(OutDir)\$(ProjectName).mll&quot; &quot;$(ProgramFiles)\Alias\Maya7.0\bin\plug-ins&quot;&#x0D;&#x0A;copy &quot;$(ProjectDir)\AEQ3ShaderTemplate.mel&quot; &quot;$(ProgramFiles)\Alias\Maya7.0\scripts\AETemplates&quot;&#x0D;&#x0A;copy &quot;$(ProjectDir)\maya2q3.mel&quot; &quot;$(ProgramFiles)\Alias\Maya7.0\scripts\others&quot;&#x0D;&#x0A;" 
     467                        /> 
     468                </Configuration> 
     469                <Configuration 
     470                        Name="Release (8.5)|Win32" 
     471                        OutputDirectory="$(SolutionDir)$(ConfigurationName)" 
     472                        IntermediateDirectory="$(ConfigurationName)" 
     473                        ConfigurationType="2" 
     474                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" 
     475                        CharacterSet="2" 
     476                        > 
     477                        <Tool 
     478                                Name="VCPreBuildEventTool" 
     479                        /> 
     480                        <Tool 
     481                                Name="VCCustomBuildTool" 
     482                        /> 
     483                        <Tool 
     484                                Name="VCXMLDataGeneratorTool" 
     485                        /> 
     486                        <Tool 
     487                                Name="VCWebServiceProxyGeneratorTool" 
     488                        /> 
     489                        <Tool 
     490                                Name="VCMIDLTool" 
     491                        /> 
     492                        <Tool 
     493                                Name="VCCLCompilerTool" 
     494                                AdditionalIncludeDirectories="&quot;C:\Program Files (x86)\Autodesk\Maya8.5\include&quot;" 
     495                                PreprocessorDefinitions="NT_PLUGIN;GLEW_STATIC" 
     496                                RuntimeLibrary="0" 
     497                                DefaultCharIsUnsigned="true" 
     498                                TreatWChar_tAsBuiltInType="true" 
     499                                ForceConformanceInForLoopScope="true" 
     500                                UsePrecompiledHeader="2" 
     501                                PrecompiledHeaderThrough="common.h" 
     502                                PrecompiledHeaderFile="$(IntDir)\common.pch" 
     503                                WarningLevel="3" 
     504                                Detect64BitPortabilityProblems="false" 
     505                                DebugInformationFormat="3" 
     506                        /> 
     507                        <Tool 
     508                                Name="VCManagedResourceCompilerTool" 
     509                        /> 
     510                        <Tool 
     511                                Name="VCResourceCompilerTool" 
     512                        /> 
     513                        <Tool 
     514                                Name="VCPreLinkEventTool" 
     515                        /> 
     516                        <Tool 
     517                                Name="VCLinkerTool" 
     518                                AdditionalDependencies="Foundation.lib OpenMaya.lib OpenMayaAnim.lib OpenMayaUI.lib OpenMayaRender.lib opengl32.lib glew_static.lib physfs_static.lib" 
     519                                OutputFile="$(OutDir)\$(ProjectName).mll" 
     520                                LinkIncremental="1" 
     521                                AdditionalLibraryDirectories="&quot;C:\Program Files (x86)\Autodesk\Maya8.5\lib&quot;;&quot;$(SolutionDir)libs\$(PlatformName)&quot;" 
     522                                IgnoreDefaultLibraryNames="" 
     523                                GenerateDebugInformation="true" 
     524                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb" 
     525                                SubSystem="2" 
     526                                OptimizeReferences="2" 
     527                                EnableCOMDATFolding="2" 
     528                                ImportLibrary="$(OutDir)/maya2q3.lib" 
     529                                TargetMachine="1" 
     530                        /> 
     531                        <Tool 
     532                                Name="VCALinkTool" 
     533                        /> 
     534                        <Tool 
     535                                Name="VCManifestTool" 
     536                        /> 
     537                        <Tool 
     538                                Name="VCXDCMakeTool" 
     539                        /> 
     540                        <Tool 
     541                                Name="VCBscMakeTool" 
     542                        /> 
     543                        <Tool 
     544                                Name="VCFxCopTool" 
     545                        /> 
     546                        <Tool 
     547                                Name="VCAppVerifierTool" 
     548                        /> 
     549                        <Tool 
     550                                Name="VCWebDeploymentTool" 
     551                        /> 
     552                        <Tool 
     553                                Name="VCPostBuildEventTool" 
     554                                Description="Copying to Maya plugins directory." 
     555                                CommandLine="copy &quot;$(OutDir)\$(ProjectName).mll&quot; &quot;$(ProgramFiles)\Alias\Maya7.0\bin\plug-ins&quot;&#x0D;&#x0A;copy &quot;$(ProjectDir)\AEQ3ShaderTemplate.mel&quot; &quot;$(ProgramFiles)\Alias\Maya7.0\scripts\AETemplates&quot;&#x0D;&#x0A;copy &quot;$(ProjectDir)\maya2q3.mel&quot; &quot;$(ProgramFiles)\Alias\Maya7.0\scripts\others&quot;&#x0D;&#x0A;" 
     556                        /> 
     557                </Configuration> 
    378558        </Configurations> 
    379559        <References> 
     
    478658                                        /> 
    479659                                </FileConfiguration> 
     660                                <FileConfiguration 
     661                                        Name="Debug (8.5)|Win32" 
     662                                        > 
     663                                        <Tool 
     664                                                Name="VCCLCompilerTool" 
     665                                                UsePrecompiledHeader="1" 
     666                                        /> 
     667                                </FileConfiguration> 
     668                                <FileConfiguration 
     669                                        Name="Release (8.5)|Win32" 
     670                                        > 
     671                                        <Tool 
     672                                                Name="VCCLCompilerTool" 
     673                                                UsePrecompiledHeader="1" 
     674                                        /> 
     675                                </FileConfiguration> 
    480676                        </File> 
    481677                        <File 
     
    568764                                        /> 
    569765                                </FileConfiguration> 
     766                                <FileConfiguration 
     767                                        Name="Debug (8.5)|Win32" 
     768                                        > 
     769                                        <Tool 
     770                                                Name="VCCLCompilerTool" 
     771                                                WarnAsError="false" 
     772                                                DisableSpecificWarnings="4100;4244;4389;4127;4189;4701;4702" 
     773                                        /> 
     774                                </FileConfiguration> 
     775                                <FileConfiguration 
     776                                        Name="Release (8.5)|Win32" 
     777                                        > 
     778                                        <Tool 
     779                                                Name="VCCLCompilerTool" 
     780                                                WarnAsError="false" 
     781                                                DisableSpecificWarnings="4100;4244;4389;4127;4189;4701;4702" 
     782                                        /> 
     783                                </FileConfiguration> 
    570784                        </File> 
    571785                        <File 
     
    612826                                        /> 
    613827                                </FileConfiguration> 
     828                                <FileConfiguration 
     829                                        Name="Debug (8.5)|Win32" 
     830                                        > 
     831                                        <Tool 
     832                                                Name="VCCLCompilerTool" 
     833                                                WarnAsError="false" 
     834                                                DisableSpecificWarnings="4100;4244;4389;4127;4189;4701;4702" 
     835                                        /> 
     836                                </FileConfiguration> 
     837                                <FileConfiguration 
     838                                        Name="Release (8.5)|Win32" 
     839                                        > 
     840                                        <Tool 
     841                                                Name="VCCLCompilerTool" 
     842                                                WarnAsError="false" 
     843                                                DisableSpecificWarnings="4100;4244;4389;4127;4189;4701;4702" 
     844                                        /> 
     845                                </FileConfiguration> 
    614846                        </File> 
    615847                        <File 
     
    649881                                <FileConfiguration 
    650882                                        Name="Release (7.0)|Win32" 
     883                                        > 
     884                                        <Tool 
     885                                                Name="VCCLCompilerTool" 
     886                    &nbs