title: NullReferenceException was unhandled - not sure what's null
body: <p>I'm working on building an icosphere, and I've gotten as far as the draw portion of the code, but I keep getting a NullReferenceException was unhandled error.  I know which bt of code it's pointing at, but I don;t know what's actually wrong or how to fix it.</p>
  
  <p>Here's the class code:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using Microsoft.Xna.Framework;
  using Microsoft.Xna.Framework.Audio;
  using Microsoft.Xna.Framework.Content;
  using Microsoft.Xna.Framework.GamerServices;
  using Microsoft.Xna.Framework.Graphics;
  using Microsoft.Xna.Framework.Input;
  using Microsoft.Xna.Framework.Media;
  
  namespace Icosahedron_Test
  {
  /// &lt;summary&gt;
  /// This is the main type for your game
  /// &lt;/summary&gt;
  public class Game1 : Microsoft.Xna.Framework.Game
  {
      GraphicsDeviceManager graphics;
      SpriteBatch spriteBatch;
  
      Camera camera;
  
      VertexPositionColor[] verts;
      VertexBuffer vertexBuffer;
  
      BasicEffect effect;
  
      Matrix worldTranslation = Matrix.Identity;
      Matrix worldRotation = Matrix.Identity;
  
      int radius = 1; //planet radius
      int refinement = 2;  // number of times to refine surface
      TriXYZ[] vertices; // array containin vertex locations
  
      Icosahedron planet;
  
      public Game1()
      {
          graphics = new GraphicsDeviceManager(this);
          Content.RootDirectory = "Content";
      }
  
      /// &lt;summary&gt;
      /// Allows the game to perform any initialization it needs to before starting to run.
      /// This is where it can query for any required services and load any non-graphic
      /// related content.  Calling base.Initialize will enumerate through any components
      /// and initialize them as well.
      /// &lt;/summary&gt;
      protected override void Initialize()
      {
          camera = new Camera(this, new Vector3(0, 0, 5),
              Vector3.Zero, Vector3.Up);
          Components.Add(camera);
  
  
          planet = new Icosahedron(radius, refinement, vertices); // create the planet object ( the icosphere )
          vertices = planet.InitializeArray();  // fill the initial verticies list (TriXYZ[])
  
          //Here is where you will get the world radius and number of time to refine. For now, use constants
  
          vertices = planet.Refine(vertices, refinement);  // subdivide the triangles as many times as is specified by refinement variable
  
          // at this point, I should be able to move on to draw and create the list for drawing the triangles of the icosphere
  
          base.Initialize();
      }
  
      /// &lt;summary&gt;
      /// LoadContent will be called once per game and is the place to load
      /// all of your content.
      /// &lt;/summary&gt;
      protected override void LoadContent()
      {
          // Create a new SpriteBatch, which can be used to draw textures.
          spriteBatch = new SpriteBatch(GraphicsDevice);
  
          //Initialize Verticies
          VertexPositionColor[] verts;
  
          verts = planet.BuildList(vertices);
  
          //set vertex data in vertexBuffer
          vertexBuffer = new VertexBuffer(GraphicsDevice, typeof(VertexPositionColor),
              verts.Length, BufferUsage.None);
          vertexBuffer.SetData(verts);
  
          //Initialize BAsic effect
          effect = new BasicEffect(GraphicsDevice);
      }
  
      /// &lt;summary&gt;
      /// UnloadContent will be called once per game and is the place to unload
      /// all content.
      /// &lt;/summary&gt;
      protected override void UnloadContent()
      {
          // TODO: Unload any non ContentManager content here
      }
  
      /// &lt;summary&gt;
      /// Allows the game to run logic such as updating the world,
      /// checking for collisions, gathering input, and playing audio.
      /// &lt;/summary&gt;
      /// &lt;param name="gameTime"&gt;Provides a snapshot of timing values.&lt;/param&gt;
      protected override void Update(GameTime gameTime)
      {
          // Allows the game to exit
          if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
              this.Exit();
  
          //Translation
          KeyboardState keyboardState = Keyboard.GetState();
          if (keyboardState.IsKeyDown(Keys.Left))
              worldTranslation *= Matrix.CreateTranslation(-.01f, 0, 0);
          if (keyboardState.IsKeyDown(Keys.Right))
              worldTranslation *= Matrix.CreateTranslation(.01f, 0, 0);
          if (keyboardState.IsKeyDown(Keys.Up))
              worldTranslation *= Matrix.CreateTranslation(0, .01f, 0);
          if (keyboardState.IsKeyDown(Keys.Down))
              worldTranslation *= Matrix.CreateTranslation(0, -.01f, 0);
          //Rotation
          worldRotation *= Matrix.CreateFromYawPitchRoll(
              MathHelper.PiOver4 / 60,
              0,
              0);
  
  
          base.Update(gameTime);
      }
  
      /// &lt;summary&gt;
      /// This is called when the game should draw itself.
      /// &lt;/summary&gt;
      /// &lt;param name="gameTime"&gt;Provides a snapshot of timing values.&lt;/param&gt;
      protected override void Draw(GameTime gameTime)
      {
          GraphicsDevice.Clear(Color.CornflowerBlue);
          GraphicsDevice.SetVertexBuffer(vertexBuffer);
  
          //Set object and camera info
          effect.World = worldRotation * worldTranslation * worldRotation;
          effect.View = camera.view;
          effect.Projection = camera.projection;
          effect.VertexColorEnabled = true;
  
          //Begin effect and draw for pass
          foreach (EffectPass pass in effect.CurrentTechnique.Passes)
          {
              pass.Apply();
  
              GraphicsDevice.DrawUserPrimitives&lt;VertexPositionColor&gt;
                  (PrimitiveType.TriangleList, verts, 0, (verts.Length/3));
          }
  
          base.Draw(gameTime);
      }
  }
  }
  </code></pre>
  
  <p>The portion of code it's pointing at is this:</p>
  
  <pre><code>GraphicsDevice.DrawUserPrimitives&lt;VertexPositionColor&gt;
      (PrimitiveType.TriangleList, verts, 0, (verts.Length/3));
  </code></pre>
  
  <p>Does anyone see what's causing this problem?</p>