Ops! I did it again...

Started by
4 comments, last by shakazed 21 years, 9 months ago
Could use some help in this matter. I´ve defined a struct inside a class, as private. Actually it´s the vertex format structure. Then I declared an instance? of it. Something like this
            

class DX
{
public.
...
...
...

private:
struct CUSTOMVERTEX
{
float x,y,z;
D3DCOLOR diffuse;
};

CUSTOMVERTEX m_sVertex[2];

}  

  
Then using a member function I want to fill this structure with vertex data, like this:
                    
void cDGfx::D3DTriangle(void) 
{
	//Fill out the structure with vertex data, x,y,z and color

	m_sVertex[0].x = 150.0f;
	m_sVertex[0].y = 50.0f;
	m_sVertex[0].z = 1.0f;
	m_sVertex[0].diffuse = D3DCOLOR_RGBA(0,0,255,0);

	m_sVertex[1].x = 150.0f;
	m_sVertex[1].y = 50.0f;
	m_sVertex[1].z = 1.0f;
	m_sVertex[1].diffuse = D3DCOLOR_RGBA(0,0,255,0);

	m_sVertex[2].x = 150.0f;
	m_sVertex[2].y = 50.0f;
	m_sVertex[2].z = 1.0f;
	m_sVertex[2].diffuse = D3DCOLOR_RGBA(0,0,255,0);

	m_iD3DDevice8->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0,
		D3DFVF_DIFFUSE|D3DFVF_XYZ, D3DPOOL_DEFAULT, &m_iD3DVertBuf8);

	BYTE *ptr;
	m_iD3DVertBuf8->Lock(0, sizeof(m_sVertex), (BYTE**)&ptr, 0);
	memcpy(&ptr,m_sVertex, sizeof(m_sVertex));
	m_iD3DVertBuf8->Unlock();

}

            
But whenever I get to filling out the first structure (sVertex[0]), my program returns to the window desktop. I don´t get any compilation errors and debug reports an access violation error. Is this code "legal"? if not, what should I do to make this work? sHaKaZeD

http://www.shakazed.tk [edited by - shakazed on July 27, 2002 6:26:37 AM] [edited by - shakazed on July 27, 2002 6:28:32 AM] [edited by - shakazed on July 27, 2002 6:29:25 AM] [edited by - shakazed on July 27, 2002 6:30:51 AM] [edited by - shakazed on July 27, 2002 7:53:53 AM]
Advertisement
I hope you haven''t copy&pasted the code, cuz you declare sVertex[2] and use m_sVertex.
And you are using a array of 2, so you have sVertex[0] and sVertex[1]...
But else...
Use step by step debugging, but I think it''ll tell you of an access violation...




Those who do not love don''t live.



[MSDN|Google|Bloodshed|My lousy page|email.me]
[My Lousy Page | Kings Of Chaos | Vampires | [email=lordlethis@hotmail.com]email.me[/email]]
no it´wasn´t copypasted, a typo from my side. Hmm...

sHaKaZeD


http://www.shakazed.tk

BYTE *ptr;
m_iD3DVertBuf8->Lock(0, sizeof(m_sVertex), (BYTE**)&ptr, 0);
memcpy(&ptr,m_sVertex, sizeof(m_sVertex));
m_iD3DVertBuf8->Unlock();

I think you want memcpy (ptr, ....)
instead of memcpy(&ptr, ....)

What you''re doing now is copying to the address of the pointer, which will write stuff all over your stack. Not sure if thats it but it stood right out to me
Joshua Barczak3D Application Research GroupAMD
Apart from the incorrect memcpy, you''re also declaring m_sVertex as being an array of size two, but you''re trying to assign to the third element in m_sVertex[2].

codeka.com - Just click it.
Okay! Thank you, will check it out later!

sHaKaZeD


http://www.shakazed.tk

This topic is closed to new replies.

Advertisement