Why does D3DXGeneratePMesh fail?!?

Started by
0 comments, last by Buckeye 16 years, 1 month ago
Hi, I am trying to create a progressive mesh so that I can decrease the number of vertices in a mesh so that it renders faster. I clean, weld and validate it and there are no errors, but if the number of vertices or faces is greater than a certain amount, it fails to create the progressive mesh. How do I tell what the problem is? According to the MSDN site, the three errors that can occur - D3DXERR_CANNOTATTRSORT, D3DERR_INVALIDCALL and E_OUTOFMEMORY. None of these are occurring. I use the following code:


	hr = D3DXGeneratePMesh(m_pD3DXMesh, (DWORD*)dwAdj1,
		NULL, NULL, 1, D3DXMESHSIMP_VERTEX, &m_pD3DXPMesh);
	if (FAILED(hr))
	{
		MessageBox("Failed to create progressive mesh!", "Oh, snap!");
		m_bPMesh = false;
		if (hr == D3DXERR_CANNOTATTRSORT)
		{
			MessageBox("Attribute sort is not supported", "Error type...");
		}
		if (hr == D3DERR_INVALIDCALL)
		{
			MessageBox("The method call is invalid", "Error type...");
		}
		if (hr == E_OUTOFMEMORY)
		{
			MessageBox("Out of memory", "Error type...");
		}
	}
	else
	{
		m_bPMesh = true;
		m_pD3DXPMesh->TrimByVertices(1000, 1750, NULL, NULL);
		m_pD3DXPMesh->OptimizeBaseLOD(D3DXMESHOPT_VERTEXCACHE, NULL);
		D3DXComputeNormals(m_pD3DXPMesh, NULL);
	}


Is there another way of finding out why it fails? Oh, wait a minute, I just found out about DXGetErrorString9. Hmmm... it says "D3DXERR_INVALIDMESH". How can that be? Just before this code, I do this:


	MessageBox("Validating mesh...", "Progress...");
	if (FAILED(hr = D3DXValidMesh(m_pD3DXMesh, (DWORD*)dwAdj, &ew)))
	{
		MessageBox("Failed to validate mesh!", "Oh, snap!");
		char *chErr = new char[ew->GetBufferSize()];
		int *ptrErr = (int*)ew->GetBufferPointer();
		chErr = (char*)ptrErr;
		MessageBox(chErr, "Oh, snap!"); // Show the errors.
	}


DX9 says it's valid! What gives here? Can someone please save me from this madness? I would appreciate it.
Advertisement
What are the return codes for Trim, Optimize and ComputeNormals?

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.

This topic is closed to new replies.

Advertisement