Solved

Unhandled exception during GetFVF

Posted on 2008-10-08
1
413 Views
Last Modified: 2013-12-26
Hello experts,

I'm pretty new to DirectX and Direct3D so it's all still a bit confusing.
I've been given a pre-made "engine" that can easily create and transform several shapes.

When I make a box or teapot it works but when I make anything else I get an unhandled exception in the Draw function of the Mesh at m_pDXMesh->GetFVF()

Anyone have any ideas?
Thanks in advance.
void MeshShape::Init()

{

	//default material color is white

	SetMaterialColor(1,1,1,1);
 

	switch(m_Type)

	{

	case BOX:

		D3DXCreateBox(GETDEVICE,m_a,m_b,m_c,&m_pDXMesh,0);

		break;

	case SPHERE:

		D3DXCreateSphere(GETDEVICE,m_a,(UINT)m_b,(UINT)m_c,&m_pDXMesh,0);

		break;

	case TEAPOT:

		D3DXCreateTeapot(GETDEVICE,&m_pDXMesh,0);

		break;

	case TORUS:

		D3DXCreateTorus(GETDEVICE,m_a,m_b,(UINT)m_c,(UINT)m_d,&m_pDXMesh,0);

		break;

	case CYLINDER:

		D3DXCreateCylinder(GETDEVICE,m_a,m_b,m_c,(UINT)m_d,(UINT)m_e,&m_pDXMesh,0);

		break;

	default:

		D3DXCreateBox(GETDEVICE,1,1,1,&m_pDXMesh,0);

	}

}
 

void MeshShape::Draw() 

{

    GETDEVICE->SetMaterial( &m_Mtrl );

	GETDEVICE->SetTransform( D3DTS_WORLD, &m_FinalWorld );
 

        // THIS LINE GIVES UNHANDLED EXCEPTION

	GETDEVICE->SetFVF( m_pDXMesh->GetFVF() ); 

	m_pDXMesh->DrawSubset(0);

}
 
 
 

void MultiMeshBasisApp::BuildScene()

{

	// This works

	m_pFloor = new MeshShape(MeshShape::BOX,10,0.1f,10);

	m_pFloor->SetMaterialColor(0.6f,0.6f,0.6f,1.0f);

	m_pFloor->Translate(0,-2,4);

	m_pFloor->Draw();

	
 

	// This works too

	m_pTeapot = new MeshShape(MeshShape::TEAPOT,1.0f,2.0f,1.0f);

	m_pTeapot->SetMaterialColor(1.0f,1.0f,0.1f,1.0f);

	m_pTeapot->Translate(3.0f,0.0f,6.0f);

	m_pTeapot->Draw();
 

	// This doesn't

	m_pCylinder = new MeshShape(MeshShape::TORUS,1.0f,2.0f,1.0f);

	m_pCylinder->SetMaterialColor(0.05f,0.2f,0.9f,1.0f);

	m_pCylinder->Translate(0,0,0);

	m_pCylinder->Draw(); // <- Here's the problem
 

}

Open in new window

0
Comment
Question by:Snapples
1 Comment
 
LVL 11

Accepted Solution

by:
jgordos earned 500 total points
ID: 22674178
This is a SWAG, since you don't show the entire program.

You seem to be using global variables, and reusing them, too.

I can think of a lot of things that might be wrong.

Try the following:
See if you can draw the cylinder/torus if you DON'T draw the others....

I.E., change BuildScene to look like this...

void MultiMeshBasisApp::BuildScene()
{
      // This doesn't
      m_pCylinder = new MeshShape(MeshShape::TORUS,1.0f,2.0f,1.0f);
      m_pCylinder->SetMaterialColor(0.05f,0.2f,0.9f,1.0f);
      m_pCylinder->Translate(0,0,0);
      m_pCylinder->Draw(); // <- Here's the problem
}

The next thing i'd try, if that still doesn't work, is to change the call where you build the mesh....

Try hard coding known good values in for hte parameters...  you might be asking the code to build something that isn't quite Kosher, so the resultant mesh is incorrect.

Try changing
D3DXCreateTorus(GETDEVICE,m_a,m_b,(UINT)m_c,(UINT)m_d,&m_pDXMesh,0);
to
D3DXCreateTorus(GETDEVICE,1.0,1.0,1,1,&m_pDXMesh,0);

And then, lastly, you talk about drawing a cylinder, but you're really drawing the torus.

Do you mean this ?

m_pCylinder = new MeshShape(MeshShape::CYLINDER,1.0f,2.0f,1.0f);

-john


0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

The following diagram presents a diamond class hierarchy: As depicted, diamond inheritance denotes when two classes (e.g., CDerived1 and CDerived2), separately extending a common base class (e.g., CBase), are sub classed simultaneously by a fourt…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
In this video I am going to show you how to back up and restore Office 365 mailboxes using CodeTwo Backup for Office 365. Learn more about the tool used in this video here: http://www.codetwo.com/backup-for-office-365/ (http://www.codetwo.com/ba…
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now