JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=88f9f5fa59007e755e730a98130dd5b7Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

VertexBuffer mit Pointer erstellen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 12.11.2002, 21:45    Titel: VertexBuffer mit Pointer erstellen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 13.11.2002, 16:20    Titel: Antworten mit Zitat

Hi,
probier es mal so:
Code:

DIRECT3D->GetDirect3DDevice()->CreateVertexBuffer(   sizeof(m_pVertices[]<===),
                                          D3DUSAGE_WRITEONLY,
                                          COLORVERTEX3F2D,
                                          D3DPOOL_MANAGED,
                                          &m_pVertexBuffer);

Aber ohne den Pfeil! Mr. Green Mr. Green Mr. Green
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 13.11.2002, 17:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 13.11.2002, 17:37    Titel: Antworten mit Zitat

hm...
steht da irgendsone Nummer beim Fehler(C25476 oder sowas)????
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 13.11.2002, 17:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 13.11.2002, 17:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 15.11.2002, 17:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 15.11.2002, 17:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum