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

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

18.02.2010, 20:09

CreateVertexBuffer -> geht einmal und dann nie wieder =(

Hi,
ich habe mit dem Erstellen eines VertexBuffers ein kleines Problem ... chen ^^

Undzwar scheint es so, als ob das Erstellen für jedes Objekt bzw. für jeden VertexBuffer-pointer beim ersten Mal gut funktioniert und danach nicht mehr.

Ich habe schon aller Art parameter Einstellungen mit D3DUSAGE_WRITEONLY und D3DUSAGE_DYNAMIC usw. ausprobiert und mir gehen so langsam die Ideen aus, woran das eigentlich liegt.

Ich habe schon debugt, sodass ich zumindest weiß, dass die Funktion IDirect3DDevice9::CreateVertexBuffer ein D3DERR_INVALIDCALL als Fehler-Code zurückgibt.
Aber eben nicht beim ersten Mal.
Ich dachte ich müsse eben vorher imm den Pointer Releasen mit "VertexBuffer->Release()" und dann "VertexBuffer = 0" aber das hat auch nichts gebracht =(

Pseudo-code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define FVF_VERTEX3D \
    ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | \
    D3DFVF_TEX8 |  \
    D3DFVF_TEXCOORDSIZE3(0) | D3DFVF_TEXCOORDSIZE3(1) | \
    D3DFVF_TEXCOORDSIZE3(2) | D3DFVF_TEXCOORDSIZE3(3) | \
    D3DFVF_TEXCOORDSIZE3(4) | D3DFVF_TEXCOORDSIZE3(5) | \
    D3DFVF_TEXCOORDSIZE3(6) | D3DFVF_TEXCOORDSIZE3(7) )

int VerticesByteCount = CountOfVertices * sizeof(MyVertexStructure);

MyDirect3DDevice->CreateVertexBuffer(
    VerticesByteCount,
    D3DUSAGE_WRITEONLY,
    FVF_VERTEX3D,
    D3DPOOL_DEFAULT,
    &MyVertexBuffer,
    0
);


Kann sich jemand vorstellen woran das liegt?
Ich habe im Buch "3D Spiele Programmierung" von David Scherfgen unter "Vertex/Index Buffer" eigentlich alles genau so gemacht?!
Und beim ersten Mal funktioniert's ja auch. Ich hab keine Ahnung woran das liegt

2

18.02.2010, 20:34

Probier mal, wenn du die Klammern weglässt beim FVF

C-/C++-Quelltext

1
2
3
4
5
6
7
#define FVF_VERTEX3D \
    D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | \
    D3DFVF_TEX8 |  \
    D3DFVF_TEXCOORDSIZE3(0) | D3DFVF_TEXCOORDSIZE3(1) | \
    D3DFVF_TEXCOORDSIZE3(2) | D3DFVF_TEXCOORDSIZE3(3) | \
    D3DFVF_TEXCOORDSIZE3(4) | D3DFVF_TEXCOORDSIZE3(5) | \
    D3DFVF_TEXCOORDSIZE3(6) | D3DFVF_TEXCOORDSIZE3(7)

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

18.02.2010, 20:41

Keien Veränderung, hätte mich auch gewundert. Die D3D Funktion kann ja ermitteln, wie ich die Werte übergebe, ob mit oder ohne Klammer.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

18.02.2010, 21:03

Sagt die Ausgabe der Debug Runtime irgendwas?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

5

18.02.2010, 22:04

gibt's da ne D3D Funktion für?

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

6

18.02.2010, 22:07

Warst du Pascal- oder VB-"Coder", oder warum schreibst du überall "My" davor? Sieht ja schlimm aus.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

18.02.2010, 22:11

Zitat von »"LukasBanana"«

gibt's da ne D3D Funktion für?

http://legalizeadulthood.wordpress.com/2009/06/28/direct3d-programming-tip-5-use-the-debug-runtime/

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

8

19.02.2010, 14:56

@unsigned long: in wiefern soll mir dieser Beitrag weiterhelfen?
ist schreib das immer nur zur Demonstration damit deutlich klar ist, welche Variablen von mir sind und welche evt. von ner API.

@dot: Ich hab zumindest schon mal ungestellt, dass D3D jetzt im kompletten DebugModus läuft.
Jetzt meckert er immer an, dass er den Vertex Buffer nicht "Lock"en kann.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

19.02.2010, 14:57

Was genau meckert er denn und wie sieht dein Code dabei aus?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

10

19.02.2010, 15:30

Also jetzt wo ich den DebugModus hochgestellt habe, ist D3D anscheinend noch Fehleranfälliger.
Mein Vertex Buffer ist jetzt immer dynamisch (also D3DUSAGE_DYNAMIC) damit ich ihn ständig verändern kann.
Ich hatte schon die ganze Zeit bei "Buffer->Lock" als letzen Parameter "D3DLOCK_DISCARD" und das geht aber nur, wenn er dynamisch ist.
Jetzt funktioniert das "Lock" also wieder.
Aber das Problem mit dem Vertex Buffer ist immer noch da.
Und das irgendwie immer erst beim zweiten Mal nutzen :(

Ich dachte es läge vlt. daran, weil ich den Buffer nicht wieder freigegeben habe aber ich habe schon auf alles geachtet.

Werbeanzeige