Du bist nicht angemeldet.

Werbeanzeige

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 723

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

11

29.11.2015, 00:32

Ich habe den Fehler behoben, aber ich weis jetzt nicht genau wie. Er tritt nicht mehr auf, selbst wenn ich 100 Vertexbuffer erstelle und binde.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

12

29.11.2015, 00:33

C-/C++-Quelltext

1
f_desc.ByteWidth       = size;


Wo hast du size definiert?
Ich sehe nur das du die Variable erstellst aber du definierst sie nirgends.

Auch sehe ich, das du nur ein Buffer erstellst.
Hast du schon mal etwas von Vertex Shader und Pixel Shader gehört?

Wenn nicht, würde ich Nachforschungen drüber machen, da diese ein grosses Standteil von Direct3D ist(Grafik).
Hier sind sonst zwei Websiten, die sehr interessant ist.
https://www.quora.com/Computer-Graphics/…d-pixel-shaders
http://www.rastertek.com/dx11tut04.html

Ich würde dir den ersten Link empfehlen, da sie es besser und genauer erklären, was die beiden "Programme" machen.

Auch sonst würde ich dir empfehlen, schreib nicht Abkürzungen für Variablen wie Zb. bf_desc oder res_data.
Damit hilfst du dir selber und andere die den Code inspizieren :)

dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

13

29.11.2015, 00:37

Wo genau crashed es und was genau für ein Fehler tritt dort auf? Was sagt die D3D Debug Runtime?

Wenn du schon aus einer Funktion dynamisch erzeugte Objekte returnest (was hier eigentlich nicht wirklich notwendig sein sollte), solltest du aus dieser Funktion einen std::unique_ptr returnen. Generell solltest du unbedingt Smartpointer und RAII einsetzen, auch für deine D3D Objekte und COM Objekte im Allgemeinen.

_VertexBuffers bzw. generell jeder Name, der mit einem _ gefolgt von einem Großbuchstaben beginnt, ist ein reservierter Name, der in einem standardkonformen C++ Programm nicht verwendet werden darf.


Auch sehe ich, das du nur ein Buffer erstellst.
Hast du schon mal etwas von Vertex Shader und Pixel Shader gehört?

Wenn nicht, würde ich Nachforschungen drüber machen, da diese ein grosses Standteil von Direct3D ist(Grafik).

Ohne Shader wird er kaum was rendern können. Was genau die Anzahl der Buffer mit Vertex und Pixel Shadern zu tun haben soll, ist mir ein Rätsel... ;)

dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

14

29.11.2015, 00:44

Bei mir sieht das ganze zum Beispiel so aus:

Der Destruktor ist leer

C-/C++-Quelltext

1
2
3
ModelClass::~ModelClass()
{
}


Dafür habe ich alles in der Shutdown Funktion(bei dir Release Funktion), [...]

Was genau siehst du in diesem Design für einen Vorteil bzw. wieso genau kannst du den Destruktor nicht verwenden, wäre der nicht genau dafür gedacht!?

15

29.11.2015, 00:45

Ohne Shader wird er kaum was rendern können.

Da hast du recht.

Was genau die Anzahl der Buffer mit Vertex und Pixel Shadern zu tun haben soll, ist mir ein Rätsel...

Ich erstelle ordnungsgemäss zwei ID3D11Buffer für den Pixel und den Vertex Buffer

C-/C++-Quelltext

1
ID3D11Buffer *m_vertexBuffer, *m_indexBuffer;


Und das gleiche mit den D3D11_SUBRESOURCE_DATA

C-/C++-Quelltext

1
D3D11_SUBRESOURCE_DATA vertexData, indexData;


Und das gleiche mit den D3D11_BUFFER_DESC ^^

CentuCore

Frischling

Beiträge: 43

Wohnort: Wien

  • Private Nachricht senden

16

29.11.2015, 06:44

Da steht aber Index nicht Pixel-Buffer.
Indizes werden für vom IA verwendet um deinen VB zu indizieren und im Endeffekt Platz zu sparen.
Ein Pixelbuffer dagegen, wenn man das denn so nennen will, wär dagegen eher eine Textur.

17

29.11.2015, 11:37

Ups da hab ich mich wohl gestern Abend verschrieben :wacko: (War wohl schon zu müde :sleeping: )

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

18

29.11.2015, 11:39

Nur so am Rande erwähnt: du hast einen Memoryleak in createVertexBuffer.
@D13_Dreinig

19

29.11.2015, 11:44

@David_pb
Wollte ich auch gerade schreiben, das er einen Pointer erstellt ihn aber nicht löscht :D

@Julién
Versuch lieber Smart Pointer zu verwenden, weil die sichern ab das keine Memory Leaks entstehen.
Auch sonst seit c++11 sollte man Smart Pointer verwenden anstatt normale Pointer(Meiner Meinung nach)

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 723

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

20

29.11.2015, 12:01

Wieso Memoryleak? Die Adressen werden in dem Vector gespeichert und spätestens durch den Destruktor von "Context" freigegeben, oder habe ich etwas verpasst?
Ich sehe hier nicht genau den Sinn von Smartpointer. Diese Strukturen sind nur innerhalb der Definitionsdatei bekannt und werden mit Handles referenziert.

Das heißt nicht, dass ich SmartPointer verteufele :P
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Werbeanzeige