Jump to content
  • Advertisement
Sign in to follow this  
MrPickle

Index buffer access violation

This topic is 3513 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I don't know why this is giving me an access violation but it is. I initialize the VB and IB like this, making a simple box:
Vertex BoxVertices[8];
	BoxVertices[0].x = _Box.min.x; BoxVertices[0].y = _Box.min.y; BoxVertices[0].z = _Box.min.z;
	BoxVertices[1].x = _Box.min.x; BoxVertices[1].y = _Box.max.y; BoxVertices[1].z = _Box.min.z;
	BoxVertices[2].x = _Box.max.x; BoxVertices[2].y = _Box.max.y; BoxVertices[2].z = _Box.min.z;
	BoxVertices[3].x = _Box.max.x; BoxVertices[3].y = _Box.min.y; BoxVertices[3].z = _Box.min.z;
	BoxVertices[4].x = _Box.min.x; BoxVertices[4].y = _Box.min.y; BoxVertices[4].z = _Box.max.z;
	BoxVertices[5].x = _Box.min.x; BoxVertices[5].y = _Box.max.y; BoxVertices[5].z = _Box.max.z;
	BoxVertices[6].x = _Box.max.x; BoxVertices[6].y = _Box.max.y; BoxVertices[6].z = _Box.max.z;
	BoxVertices[7].x = _Box.max.x; BoxVertices[7].y = _Box.min.y; BoxVertices[7].z = _Box.max.z;

	short BoxIndex[] = { 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 };

	D3DDevice->CreateVertexBuffer(sizeof(BoxVertices), 0, FVF_FORMAT, D3DPOOL_MANAGED, &bbvb, NULL);
	VOID* pVertex;
	bbvb->Lock(0, 0, (void**)&pVertex, 0);
	memcpy(pVertex, BoxVertices, sizeof(BoxVertices));
	bbvb->Unlock();

	D3DDevice->CreateIndexBuffer(sizeof(BoxIndex), 0, D3DFMT_INDEX16, D3DPOOL_MANAGED, &bbib, NULL);
	VOID* pShort;
	bbib->Lock(0, 0, (void**)&pShort, 0);
	memcpy(pShort, BoxIndex, sizeof(BoxIndex));
	bbib->Unlock();
then I draw it like this:
if(DrawBoundingBox) {
		D3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
		D3DDevice->SetStreamSource(0, bbvb, 0, sizeof(Vertex));
		D3DDevice->SetIndices(bbib);
		D3DDevice->DrawIndexedPrimitive(D3DPT_LINELIST, 0, 0, 8, 0, 24);
		D3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
	}
It doesn't always give me an access violation, but I can't work out what I do that causes the access violation.

Share this post


Link to post
Share on other sites
Advertisement
You aren't checking the return codes for your lock calls - how do you know that the returned buffer is even valid for locking? Sure, it's very likely to be fine but it is NOT guaranteed. Blindly assuming that calls succeed is a good way of causing these sorts of bugs.

Also, if it's Visual Studio or the MSVCRT giving you the error you can usually step-through the code to find the line that it doesn't like and work backwards from there.

hth
Jack

Share this post


Link to post
Share on other sites
Ok, I've added the checks for if it's succeeding or not but I still get the access violations.

It's this line that it's telling me:
D3DDevice->DrawIndexedPrimitive(D3DPT_LINELIST, 0, 0, 8, 0, 24);


I noticed that I get some lines and dots in the top left corner when the lines are being drawn.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!