Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

1

05.04.2004, 12:04

Problem mit Vertex-Buffer!

Hallo,

ich habe mir eben meine Partikelklasse von DX8 auf DX9 geändert, leider sürtzt mir jetzt aber das Spiel hab, nur weiß ich leider nicht genau, was ich flasch mache! Aber ich glaube der Fehler muss in der Render Funktion liegen! Hier der Code von DX8:

Quellcode

1
2
3
4
5
6
7
8
9
lpD3DDevice->SetStreamSource( 0, m_pVB, sizeof (POINTVERTEX) );
  lpD3DDevice->SetVertexShader( D3DFVF_POINTVERTEX );

  m_pVB->Lock(0 ,m_iNumParticles * sizeof (POINTVERTEX),(BYTE **) &m_Verts,0);
  m_pVB->Unlock();

  lpD3DDevice->SetTransform(D3DTS_WORLD, &m_matWelt); 

  lpD3DDevice->DrawPrimitive( D3DPT_POINTLIST, 0, m_iNumParticles );



und so habe ichs jetzt in DX9:

Quellcode

1
2
3
4
5
6
7
8
9
lpD3DDevice->SetStreamSource( 0, m_pVB,0, sizeof (POINTVERTEX) );
  lpD3DDevice->SetFVF( D3DFVF_POINTVERTEX );

  m_pVB->Lock(0 ,0,(void**) (&m_iNumParticles),D3DLOCK_NOSYSLOCK);
  m_pVB->Unlock();

  lpD3DDevice->SetTransform(D3DTS_WORLD, &m_matWelt); 

  lpD3DDevice->DrawPrimitive( D3DPT_POINTLIST, 0, m_iNumParticles );



Hier wird der Bildschirm aber nur weiß! Hoffentlich könnt ihr mir weiter helfen ;) thx

cya,
Stefan

2

05.04.2004, 14:57

Könnte an dem D3DLOCK_NOSYSLOCK liegen. Gibt hier mal NULL an.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

3

05.04.2004, 15:43

ne, ändert leider nichts..


cya,
Stefan

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

4

05.04.2004, 16:08

hm, ansonsten habe ich nur noch das hier geändert:

Quellcode

1
2
3
4
5
 lpD3DDevice->CreateVertexBuffer(m_iNumParticles * sizeof (POINTVERTEX),  
                                  D3DUSAGE_WRITEONLY | D3DUSAGE_POINTS,
                                  D3DFVF_POINTVERTEX, 
                                  D3DPOOL_MANAGED, 
                                  &m_pVB, NULL);


und hier auch nur den letzten Parameter NULL hinzugefügt, aber vielleicht hatt sich ja doch noch was in DX9 geändert, was ich nicht weiß....


cya,
Stefan

5

05.04.2004, 16:18

Nein zu DX9 hat sich da nicht viel geendert.

Bist du sicher das es an der Rendermethode liegt? Vieleicht liegt der Fehler ja auch woanders. Las mal den Debugger laufen und Isolier die stelle an der der Absturz hervorgerufen wird.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

05.04.2004, 16:37

Re: Problem mit Vertex-Buffer!

Zitat von »"Stefan"«

Quellcode

1
m_pVB->Lock(0 ,0,(void**) (&m_iNumParticles),D3DLOCK_NOSYSLOCK);

Guck mal, was Du da machst!
Da soll doch ein Zeiger hin, den die Lock-Methode ausfüllt, aber Du gibst die Adresse eines int-Werts an, den Du nachher beim Rendern verwendest... klar, dass das nicht klappt.
Übrigens - warum sperrst Du den VB und entsperrst ihn gleich darauf wieder, ohne irgendetwas damit zu machen? Das bringt doch nix.

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

7

05.04.2004, 16:40

also der Fehler liegt zu 99% in der Render-Funktion, also ich poste hier nochmals die gesammte Funktion:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void PARTICLE_SYSTEM::Render()
{
  lpD3DDevice->SetTexture( 0, pointtexture);
  lpD3DDevice->SetRenderState( D3DRS_LIGHTING, false );
  lpD3DDevice->SetRenderState( D3DRS_ZWRITEENABLE, false );
  lpD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true );
/***************************************************************************/ 
  lpD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE);
  lpD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE);

  lpD3DDevice->SetRenderState( D3DRS_POINTSIZE_MIN, FtoDW(0.00f) );
  lpD3DDevice->SetRenderState( D3DRS_POINTSCALE_A, FtoDW(0.00f) );
  lpD3DDevice->SetRenderState( D3DRS_POINTSCALE_B, FtoDW(0.00f) );
  lpD3DDevice->SetRenderState( D3DRS_POINTSCALE_C, FtoDW(1.00f) );
/***************************************************************************/ 
  lpD3DDevice->SetRenderState( D3DRS_POINTSIZE, FtoDW(m_fParticleSize) );


  lpD3DDevice->SetStreamSource( 0, m_pVB,0, sizeof (POINTVERTEX) );
  lpD3DDevice->SetFVF( D3DFVF_POINTVERTEX );

  m_pVB->Lock(0 ,0,(void**) (&m_iNumParticles),NULL);
  m_pVB->Unlock();

  lpD3DDevice->SetTransform(D3DTS_WORLD, &m_matWelt); 

  lpD3DDevice->DrawPrimitive( D3DPT_POINTLIST, 0, m_iNumParticles );

  lpD3DDevice->SetRenderState( D3DRS_ZWRITEENABLE, true );
  lpD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, false );
  lpD3DDevice->SetRenderState( D3DRS_LIGHTING, true );
};



Also wenn ich das Spiel starte, wird der gesammte Bildschirm mit so einem eigenartigem Weiß überdeckt und es reagiert nicht mehr, meistens muss ich sogar den Computer neustarten!

cya,
Stefan

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

8

05.04.2004, 16:53

ach David Du bist mein Held :roll: Was ich nur für blöde Fehler immer mache(sorry) :angel:
Danke euch allen!


cya,
Stefan

Werbeanzeige