Changeset 611

Show
Ignore:
Timestamp:
07/25/08 00:05:29 (4 months ago)
Author:
phill
Message:

o Should no longer crash on skeleton-only models.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/x42view.net/Gui/ModelRenderHelper.cs

    r479 r611  
    141141                        } 
    142142                } 
     143 
    143144                #endregion 
    144145 
     
    398399                                return; 
    399400 
     401                        if( model.Model.Vertices.Count == 0 ) 
     402                                return; 
     403 
    400404                        Device dev = pn3D.Device; 
    401405                        Libx42.Model m = model.Model; 
  • trunk/x42view.net/Gui/ModelWindow.Preview.Bounds.cs

    r424 r611  
    101101                        DrawLines( lines.ToArray() ); 
    102102 
    103                         //initialize the z-buffer so we can do a sane single-sided alpha 
    104                         dev.RenderState.Lighting = false; 
    105                         dev.RenderState.ZBufferFunction = Compare.Less; 
    106                         dev.RenderState.ColorWriteEnable = (ColorWriteEnable)0; 
    107                         dev.RenderState.FillMode = pnPreviewOpts.FillMode; 
    108  
    109                         modelDXData.BindModelData(); 
    110  
    111                         foreach( GroupContext ctx in pnGroups.Groups ) 
    112                         { 
    113                                 if( !ctx.Visible ) 
    114                                         continue; 
    115  
    116                                 modelDXData.Draw( ctx.Group ); 
    117                         } 
    118  
    119                         //draw the shaded model on top 
    120                         dev.RenderState.Lighting = pnPreviewOpts.EnableLighting; 
    121                         dev.RenderState.SpecularEnable = pnPreviewOpts.EnableSpecularHighlights; 
    122  
    123                         dev.RenderState.ZBufferFunction = Compare.Equal; 
    124                         dev.RenderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; 
    125  
    126                         dev.RenderState.AlphaBlendEnable = true; 
    127                         dev.RenderState.SourceBlend = Blend.SourceAlpha; 
    128                         dev.RenderState.DestinationBlend = Blend.InvSourceAlpha; 
    129  
    130                         modelDXData.BindModelData(); 
    131  
    132                         for( int i = 0; i < m.Groups.Count; i++ ) 
    133                         { 
    134                                 if( !pnGroups.Groups[i].Visible ) 
    135                                         continue; 
    136  
    137                                 Libx42.Group g = m.Groups[i]; 
    138  
    139                                 const int alpha = 75; 
    140  
    141                                 Material mat = new Material(); 
    142                                 mat.Diffuse = Color.FromArgb( alpha * 2, 0, 0, 0 ); 
    143                                 mat.Ambient = Color.FromArgb( alpha, 50, 50, 50 ); 
    144                                 mat.Emissive = Color.FromArgb( alpha, Color.Black ); 
    145                                 mat.Specular = Color.FromArgb( alpha, 25, 25, 25 ); 
    146                                 mat.SpecularSharpness = 10; 
    147  
    148                                 dev.Material = mat; 
    149  
    150                                 modelDXData.Draw( g ); 
     103                        if( model.Model.Vertices.Count > 0 ) 
     104                        { 
     105                                //initialize the z-buffer so we can do a sane single-sided alpha 
     106                                dev.RenderState.Lighting = false; 
     107                                dev.RenderState.ZBufferFunction = Compare.Less; 
     108                                dev.RenderState.ColorWriteEnable = (ColorWriteEnable)0; 
     109                                dev.RenderState.FillMode = pnPreviewOpts.FillMode; 
     110 
     111                                modelDXData.BindModelData(); 
     112 
     113                                foreach( GroupContext ctx in pnGroups.Groups ) 
     114                                { 
     115                                        if( !ctx.Visible ) 
     116                                                continue; 
     117 
     118                                        modelDXData.Draw( ctx.Group ); 
     119                                } 
     120 
     121                                //draw the shaded model on top 
     122                                dev.RenderState.Lighting = pnPreviewOpts.EnableLighting; 
     123                                dev.RenderState.SpecularEnable = pnPreviewOpts.EnableSpecularHighlights; 
     124 
     125                                dev.RenderState.ZBufferFunction = Compare.Equal; 
     126                                dev.RenderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; 
     127 
     128                                dev.RenderState.AlphaBlendEnable = true; 
     129                                dev.RenderState.SourceBlend = Blend.SourceAlpha; 
     130                                dev.RenderState.DestinationBlend = Blend.InvSourceAlpha; 
     131 
     132                                modelDXData.BindModelData(); 
     133 
     134                                for( int i = 0; i < m.Groups.Count; i++ ) 
     135                                { 
     136                                        if( !pnGroups.Groups[i].Visible ) 
     137                                                continue; 
     138 
     139                                        Libx42.Group g = m.Groups[i]; 
     140 
     141                                        const int alpha = 75; 
     142 
     143                                        Material mat = new Material(); 
     144                                        mat.Diffuse = Color.FromArgb( alpha * 2, 0, 0, 0 ); 
     145                                        mat.Ambient = Color.FromArgb( alpha, 50, 50, 50 ); 
     146                                        mat.Emissive = Color.FromArgb( alpha, Color.Black ); 
     147                                        mat.Specular = Color.FromArgb( alpha, 25, 25, 25 ); 
     148                                        mat.SpecularSharpness = 10; 
     149 
     150                                        dev.Material = mat; 
     151 
     152                                        modelDXData.Draw( g ); 
     153                                } 
    151154                        } 
    152155 
  • trunk/x42view.net/Gui/ModelWindow.Preview.Shaded.cs

    r602 r611  
    393393                        Device dev = pn3D.Device; 
    394394 
     395                        if( !ShouldDrawGroups() ) 
     396                                return; 
     397 
    395398                        if( !surfaceShadersLoaded ) 
    396399                                LoadSurfaceShaders(); 
  • trunk/x42view.net/Gui/ModelWindow.Preview.Skeleton.cs

    r467 r611  
    134134                { 
    135135                        if( groupColorPreviewStateCookie == selectionCookie ) 
     136                                return; 
     137 
     138                        if( colorsVb == null ) 
    136139                                return; 
    137140 
     
    248251                        DrawLines( lines.ToArray() ); 
    249252 
     253                        if( !ShouldDrawGroups() ) 
     254                                return; 
     255 
    250256                        //initialize the z-buffer so we can do a sane single-sided alpha 
    251257                        dev.RenderState.Lighting = false; 
  • trunk/x42view.net/Gui/ModelWindow.Preview.Surface.cs

    r471 r611  
    3535                private void DrawSurfacesView() 
    3636                { 
     37                        if( model.Model == null || !ShouldDrawGroups() ) 
     38                                return; 
     39 
    3740                        Device dev = pn3D.Device; 
    3841 
  • trunk/x42view.net/Gui/ModelWindow.Preview.Topology.cs

    r602 r611  
    269269                                return; 
    270270 
     271                        if( !ShouldDrawGroups() ) 
     272                                return; 
     273 
    271274                        if( topoPoints.Count == 0 ) 
    272275                                GenGroupTopology(); 
     
    285288                { 
    286289                        Libx42.Model m = model.Model; 
    287                         if( m == null
     290                        if( m == null || m.Vertices.Count == 0
    288291                                return; 
    289292 
  • trunk/x42view.net/Gui/ModelWindow.Preview.cs

    r603 r611  
    246246                        dev.RenderState.Lighting = true; 
    247247                } 
     248 
     249                private bool ShouldDrawGroups() 
     250                { 
     251                        return model.Model.Vertices.Count != 0; 
     252                } 
    248253                #endregion 
    249254 
     
    331336 
    332337                        lineVertDecl = new VertexDeclaration( dev, LineVertex.DeclarationElements ); 
    333                         colorsVb = new VertexBuffer( dev, sizeof( int ) * model.Model.Vertices.Count, Usage.None, VertexFormats.None, Pool.Managed ); 
     338 
     339                        if( model.Model.Vertices.Count != 0 ) 
     340                                colorsVb = new VertexBuffer( dev, sizeof( int ) * model.Model.Vertices.Count, Usage.None, VertexFormats.None, Pool.Managed ); 
    334341 
    335342                        {