|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 12.11.2002, 20:45 Titel: VertexBuffer mit Pointer erstellen |
|
|
Ich bin gerade dabei Vertices mit einem Vertexbuffer auf den bildschirm zu bringen.
Das Bsp. aus dem Buch funktioniert.
Wenn ich den code allerdings umändere:
Code: |
m_pVertices = new ColorVertex3f2D[3];
m_pVertices[0].x=100.0f;
m_pVertices[0].y=100.0f;
m_pVertices[0].z=0.0f;
m_pVertices[0].rhw =1.0f;
m_pVertices[0].color=0xffffffff;
m_pVertices[1].x=300.0f;
m_pVertices[1].y=300.0f;
....
byte *m_pVertexBufferData = NULL;
DIRECT3D->GetDirect3DDevice()->CreateVertexBuffer(sizeof(m_pVertices),
D3DUSAGE_WRITEONLY,
COLORVERTEX3F2D,
D3DPOOL_MANAGED,
&m_pVertexBuffer);
m_pVertexBuffer->Lock(0,0,&m_pVertexBufferData,0);
memcpy(m_pVertexBufferData,m_pVertices,sizeof(m_pVertices));
m_pVertexBuffer->Unlock();
DIRECT3D->GetDirect3DDevice()->SetVertexShader(COLORVERTEX3F2D);
|
also ein dynamisches array übergebe, dann kriege ich eine Zugriffsverletzung.
woran liegt das? |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 13.11.2002, 15:20 Titel: |
|
|
Hi,
probier es mal so:
Code: |
DIRECT3D->GetDirect3DDevice()->CreateVertexBuffer( sizeof(m_pVertices[]<===),
D3DUSAGE_WRITEONLY,
COLORVERTEX3F2D,
D3DPOOL_MANAGED,
&m_pVertexBuffer);
|
Aber ohne den Pfeil! |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 13.11.2002, 16:32 Titel: |
|
|
funktioniert nicht: compiler fehler.
daran wirds denke ich auch nicht liegen, denn ich könnte ja auch schreiben 3*sizeof(ColorVertex3f2D)
Bei der funktion Lock kriege ich die Zugriffsverletzung. |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 13.11.2002, 16:37 Titel: |
|
|
hm...
steht da irgendsone Nummer beim Fehler(C25476 oder sowas)???? |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 13.11.2002, 16:40 Titel: |
|
|
Oder vielleicht so:
Code: |
&m_pVertices[0].x =100.0f;
&m_pVertices[0].y =100.0f;
&m_pVertices[0].z =0.0f;
&m_pVertices[0].rhw =1.0f;
&m_pVertices[0].color=0xffffffff;
|
Is ja ein doppelter Zeiger!
Kann leider keine Garantie geben, dass es diesmal richtig ist! |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 13.11.2002, 16:46 Titel: |
|
|
jo:
error C2059: syntax error : ']'
allerdigs habe ich mich geirrt, es liegt doch an der größe des vertexpuffers.
wenn ich 3*sizeof(ColorVertex3f2D) angebe wird das dreieck angezeigt.
die frage ist jetzt, wie man am besten die größe in bytes eines dynamischen arrays abfragen kann.
ich habe es so gemacht:
Code: |
DIRECT3D->GetDirect3DDevice()->CreateVertexBuffer(sizeof(m_pVertices[0])*(sizeof(m_pVertices[0])/sizeof(m_pVertices)),
D3DUSAGE_WRITEONLY,
COLORVERTEX3F2D,
D3DPOOL_MANAGED,
&m_pVertexBuffer);
m_pVertexBuffer->Lock(0,0,&m_pVertexBufferData,0);
memcpy(m_pVertexBufferData,m_pVertices,(sizeof(m_pVertices[0]))*(sizeof(m_pVertices[0])/sizeof(m_pVertices)));
m_pVertexBuffer->Unlock();
|
|
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 15.11.2002, 16:30 Titel: |
|
|
Probier es doch mal so:
Code: | DIRECT3D->GetDirect3DDevice()->CreateVertexBuffer(
sizeof(m_pVertices[0])*3, // 3=Anzahl Vertices im VB
D3DUSAGE_WRITEONLY,
COLORVERTEX3F2D,
D3DPOOL_MANAGED,
&m_pVertexBuffer);
m_pVertexBuffer->Lock(0,0,&m_pVertexBufferData,0);
memcpy(m_pVertexBufferData,m_pVertices,sizeof(m_pVertices[0])*3);
m_pVertexBuffer->Unlock(); |
Du kannst nämlich mittels sizeof() nicht die größe von dynamisch erstellten Arrays herausfinden.
Code: | int * pArray=new int[10];
int Size=sizeof(pArray); //sizeof() gibt die größe von int* zurück, 4 Bytes, nicht 40 (int[10])!
|
_________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 15.11.2002, 16:39 Titel: |
|
|
jo, das mit sizeof habe ich auch bemerkt, ist ja schließlich nur ein pointer also immer 4 byte groß.
ich habs jetzt so gemacht wie du gesagt hast und es funktioniert jetzt. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|