Error "TypeInitializationException"

Nexam

30-10-2007 08:45:04




Class "GraphicEngine.cs"
using System;
using System.Collections.Generic;
using System.Text;
using OgreDotNet;
using OgreDotNet.Cegui;
using System.Drawing;
using System.IO;
using Math3D;

namespace SBClient.Graphic
{
class GraphicEngine : IDisposable
{
#region Constructor & Destructor
public GraphicEngine()
{
// Create the Root object;
mRoot = new Root();

//Setup OGRE resources (call the function which parses the resource script.)
SetupResources("resources.cfg");

//Show the config Dialog
if (!mRoot.ShowConfigDialog())
{
mRoot.Dispose();
return;
}

//Initialize the RenderWindow
mRenderWindow = mRoot.Initialise(true, "Hello OGRE.NET");

//Initialize the SceneManager
mSceneManager = mRoot.CreateSceneManager((ushort)SceneType.Generic, "HelloOgreDontNetSceneManager");
mSceneManager.SetAmbientLight(Color.White);

//Initialize the Camera
mCamera = mSceneManager.CreateCamera("HelloCamera");
mCamera.SetPosition(0, 0, -200);
mCamera.LookAt = new Vector3(0, 0, 0);
mCamera.NearClipDistance = 5;

//Initialize the Viewport
mViewport = mRenderWindow.AddViewport(mCamera);
mViewport.BackgroundColor = Color.Black;
mCamera.AspectRatio = (float)mViewport.ActualWidth / (float)mViewport.ActualHeight;

//Do some manager setup();
ResourceGroupManager.getSingleton().initialiseAllResourceGroups();
MaterialManager.Instance.SetDefaultTextureFiltering(TextureFilterOptions.TfoBilinear);
MaterialManager.Instance.SetDefaultAnisotropy(1);
TextureManager.Instance.SetDefaultNumMipmaps(5);

//Create Eventhandler
mEventHandler = new OgreDotNet.EventHandler(mRoot, mRenderWindow);
mEventHandler.SubscribeEvents();
mEventHandler.FrameStarted += new FrameEventDelegate(FrameStarted);
mEventHandler.FrameEnded += new FrameEventDelegate(FrameEnded);
mEventHandler.KeyClicked += new KeyEventDelegate(KeyClicked);

//Create the Scene
Entity ent;
SceneNode node;

ent = mSceneManager.CreateEntity("Robot", "robot.mesh");
node = mSceneManager.GetRootSceneNode().CreateChildSceneNode("RobotNode");
node.AttachObject(ent);
node.SetPosition(0, 0, 0);
}
~GraphicEngine()
{
Dispose();
}
public void Dispose() { }
#endregion

#region base Ogre
private Root mRoot;
private RenderWindow mRenderWindow;
private SceneManager mSceneManager;
private Camera mCamera;
private Viewport mViewport;
private OgreDotNet.EventHandler mEventHandler;
private bool mDone;

protected void SetupResources(string sFileName)
{
//Initialiser.SetupResources(sFileName);
using (StreamReader sr = new StreamReader(sFileName))
{
string secName = "", sLocType, sarchName;
string line;
while ((line = sr.ReadLine()) != null)
{
int x = line.IndexOf("#");
if (x > -1)
line = line.Substring(0, x);
line = line.Trim();
if (line.Length > 0)
{
if (line[0] == '[')
{
secName = line.Substring(1, line.Length - 2);
}
else if (secName.Length > 0)
{
x = line.IndexOf("=");
if (x <= 0)
throw new Exception("Invalid line in resource file " + sFileName);
sLocType = line.Substring(0, x);
sarchName = line.Substring(x + 1);
ResourceGroupManager.getSingleton().addResourceLocation(sarchName, sLocType, secName);
}
}
}
}
}
public void Start()
{
mRoot.StartRendering();
}
protected bool FrameStarted(FrameEvent e)
{
if (mRenderWindow.Closed || mDone) return false;

return true;
}

protected bool FrameEnded(FrameEvent e)
{
return true;
}

protected void KeyClicked(KeyEvent e)
{
switch (e.KeyCode)
{
case KeyCode.Escape:
mDone = true;
break;
default:
break;
}
}




#endregion
}
}



Class "Program.cs"
using System;
using System.Collections.Generic;
using System.Text;
using SBClient.Graphic;

namespace SBClient
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
}

private GraphicEngine mGEngine = null;
public Program()
{
mGEngine = new GraphicEngine();
}

}
}





Simple code to test OgreDotNet... doesn't work :(

Somebody can help me ?