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

1

09.05.2013, 22:32

[C++] Dynamisches Array - Problem mit "sizeof" und OpenGL

Hi Leute,
wenn die Größe eines dynamischen Arrays des Typs float mit "sizeof" abrufen möchte, gibt er mir immer nur die Größe eines float's zurück, also 4. Außerdem habe ich Probleme, wenn ich ein dynamisches Array an OpenGL weitergebe.

Gibt es alternativen? Beziehungsweise kann ich das Problem irgendwie lösen?

MfG
RenX

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

09.05.2013, 22:42

Ich vermute mal du machst etwas wie das hier:

C-/C++-Quelltext

1
2
float* foo = new float[42];
int numElements = sizeof(foo);


Dies gibt dir weder die Anzahl der Elemente noch die Größe des allokierten Speichers zurück sondern lediglich die Größe des Typs, nämlich einem Zeiger. Alternativ könntest du dir die Anzahl der Elemente einfach merken, oder std::vector<float> verwenden.
@D13_Dreinig

3

09.05.2013, 22:49

Okay, danke :)

Nur jetzt zu dem Problem, dass OpenGL mit dem Array nichts anfangen kann. Ich habe da ein bisschen gegoogle't und herausgefunden, dass dynamische Arrays nicht fortlaufend gespeichert werden wie statische Arrays. OpenGL jedoch erwartet ein fortlaufendes Array. Was soll ich nun machen? Gibt es alternativen?

EDIT: Mit fortlaufend mein ich, dass die Daten in Reihe und Glied nacheinander im Speicher gespeichert sind :D

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

09.05.2013, 22:54

Ich habe da ein bisschen gegoogle't und herausgefunden, dass dynamische Arrays nicht fortlaufend gespeichert werden wie statische Arrays.


Doch, in diesem Fall sollten die Daten alle hintereinander im Speicher liegen. Was ist denn das konkrete Problem?
@D13_Dreinig

5

09.05.2013, 22:59

Meine Vertexdaten. Ich speicher sie in einem dynamischen Array ab, und übergebe es dann OpenGL. Der allerdings Zeichnet dann irgendeinen Müll, wie zufällig. Wenn ich OpenGL allerdings die selben Daten aus einem statischen Array gebe, zeichnet er ganz normal.

6

09.05.2013, 23:10

Wie wäre es, wenn du die Funktion, die du verwenden möchtest, mal preisgibst?
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

7

09.05.2013, 23:13

Hier:


C-/C++-Quelltext

1
2
3
4
5
6
for(unsigned int i = 0; i < numVerts; i++){         VertexData[i * 3] = scene->mMeshes[0]->mVertices[i].x;          VertexData[i * 3 + 1] = scene->mMeshes[0]->mVertices[i].y;          VertexData[i * 3 + 2] = scene->mMeshes[0]->mVertices[i].z;          VertexData[i * 3 + 3] = 0;          VertexData[i * 3 + 4] = 1;
                }       glGenBuffers(2, &this->BufferIds[1]);   ExitOnGLError("ERROR: Could not generate the buffer objects");
    glBindBuffer(GL_ARRAY_BUFFER, this->BufferIds[1]);  glBufferData(GL_ARRAY_BUFFER, 480, VertexData, GL_STATIC_DRAW); ExitOnGLError("ERROR: Could not bind the VBO to the VAO");
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLvoid*)0);   glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLvoid*)(sizeof(GLfloat) * 3));   ExitOnGLError("ERROR: Could not set VAO attributes");
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->BufferIds[2]);  glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(INDICES), INDICES, GL_STATIC_DRAW);    ExitOnGLError("ERROR: Could not bind the IBO to the VAO");
    glBindVertexArray(0);

EDIT: Tut mir leid, aus irgendeinem Grund zeigt der den Code nicht richtig an -.-

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »RenX313« (09.05.2013, 23:28)


Swoerm

Alter Hase

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

8

09.05.2013, 23:22

Damit der Code auf spieleprogrammierer.de richtig formatiert musst du während du den Code schreibst in den Quellcode Modus wechseln.

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

09.05.2013, 23:33

Was hat INDICES für einen Typ und was erwartest du, dass sizeof(INDICES) genau tut? ;)

10

09.05.2013, 23:59

INDICES ist vom Typ GLuint und stellt den Indexbuffer dar.

Werbeanzeige