Einstieg in OpenGL, Anfängerprobleme
-
Ich habs jetzt geschafft, dass die VBOs gezeichnet werden und zwar so:
// initialisieren glGenBuffers(1, &vboid); glBindBuffer(GL_ARRAY_BUFFER, vboid); glBufferData(GL_ARRAY_BUFFER, 8*sizeof(GLint), vertices, GL_STATIC_DRAW); void* ptr = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); glVertexPointer(2, GL_INT, 0, ptr); glUnmapBuffer(GL_ARRAY_BUFFER); // rendern glEnableClientState(GL_VERTEX_ARRAY); glDrawArrays(GL_QUADS, 0, 4); glDisableClientState(GL_VERTEX_ARRAY);
Allerdings widerspricht das allen Tutorials die ich gelesen habe. z. B. dem hier. Laut diesem Tutorial würde ich Punk 1.4 und 1.5 auf einmal benutzen.
Zudem steht bei jeder Beschreibung von glVertexPointer, dass der letzte Parameter das Offset ist
-
Hm, glVertexPointer sollte eigentlich nur 4 Paramter haben
Also bei mir funktioniert folgendes einwandfrei:
GLint vertices[] = {0,0,2,0,2,2,0,2}; glGenBuffers(1,&vboid); glBindBuffer(GL_ARRAY_BUFFER,vboid); glBufferData(GL_ARRAY_BUFFER,8*sizeof(GLint),vertices,GL_STATIC_DRAW); glVertexPointer(2,GL_INT,0,0); glEnableClientState(GL_VERTEX_ARRAY); glDrawArrays(GL_QUADS,0,4); glDisableClientState(GL_VERTEX_ARRAY);
-
Hmm bei mir kommt wieder die Zugriffsverletzung an Position 0.
Irgendwie scheint dem glVertexPointer nicht ganz klar zu sein, dass ich ein VBO hab.
Und VBOs werden von meiner GraKa ganz sicher unterstützt. Ich hab schon alle möglichen Funktionen und externen Tests probiert, und alle sagen, dass meine GraKa VBOs kann. Die Beispiele aus dem Inet laufen ja auch alle auf meinem PC.
-
Hmpf - eigenartig.
Was gibt denn glGetString(GL_VERSION) und glewGetString(GLEW_VERSION) aus?
-
2.1.8545 Release
und
1.5.6
-
*grübel* komm nicht drauf, worans liegen könne
Hast du es schonmal mit
glVertexPointerEXT(2,GL_INT,0,4,0);
probiert?
-
Ich werd verrückt das klappt
Monate des Frustes endlich vorbei
Danke dirEDIT: NEIN
Ich hab noch ein glVertexPointer von vorher übersehen, das direkt auf den Array gezeigt hat...
-
Wenn du Lust hast - pack mal alles zusammen in ein zip oder rar Archiv und schick mir das per Mail (also nicht nur Programmteile, sondern den kompletten code).
Dann schau ich mir des mal genauer an - vlt find ich ja das Problem.
-
So hab das mal alles hochgeladen.
Link
Die Fehlermeldung die kommt ist diese hier:Eine Ausnahme (erste Chance) bei 0x6923c104 in OpenGL.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000. Unbehandelte Ausnahme bei 0x6923c104 in OpenGL.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Wenn ich die Binary ganz normal starten will sagt Windows immer das hier:
OpenGL.exe hat ein Problem festgestellt und muss beendet werden.
-
Tja - guter Rat ist teuer.
Kann keinen Fehler finde.
Programm läuft bei mir auch einwandfrei.
-
Ich werde demnächst mal einen anderen Compiler testen. Wenn es dann immernoch nicht klappt, liegt es wohl an der Hardware. Vielleicht wrde ich mir dann auch mal eine aktuellere GraKa besorgen.
-
Funktioniert das bei dir:
vboTest
-
Ja tut es.
Kann es sein, dass mein Compiler (MSVC 10.0) verbuggt ist? Und welchen anderen kann ich mir herunterladen, um es mal mit einem anderen zu probieren?EDIT:
Mit sind gerade die Logfiles aufgefallen, und die sagen auch, dass alles OK ist.
-
Hm, nö, ich arbeite auch mit MSVS2010.
Binde die libs zwar nicht über pragmas ein sondern geb sie bei den Projekteigenschaften unter Linker-Eingabe an, aber daran sollte es wohl nicht liegen denk ich.
-
Es kann ja auch vielleicht daran liegen, das mein Setup defekt ist, oder bei der Installation nichts alles Reibunglos lief. Ich werde jetzt auch mal glext anstelle von glew ausprobieren. Vielleicht tuts ja das.
Könntest du mir vielleicht auch mal die Source-Dateien von deiner exe geben? Ich werde mal versuchen diese zu kompilieren. Mal schauen ob das dann klappt.
-
Hier ist der sourcecode.
Hab unnötige Sachen mal entfernt (sowas wie das Erstellen der logfiles, Counter etc.).
Hoffe es ist einigermassen verständlich.Keine pragmas - da ich wie gesagt über die Projekteigenschaften die libs angebe, kannst du aber machen wie du möchtest.
Probiers einfach mal
-
Klappt super
Auch wenn ich über #pragma linke.
Hmm ich werde mein bestehendes Projekt mal auf dein Beispiel aufbauen. Und dann schauen ob es noch klappt.
-
Hmm..
Ich hab mal den Code, wie du dein Fenster erstellst angepasst, und immerhin kommt keine Fehlermeldung mehr.
Allerdings sehe ich immer nur ein kleines weißes Dreieck mit den Koordinaten 0|0 10|0 10|10.
Egal was ich mache.
-
Wie meinst du das, egal was du machst.
Das kleine Dreieck wird angezeigt, weil ein VBO erstellt wird (zumindest in meinem Beispielcode) mit eben diesen Vertices und dann in der Render-Funktion gezeichnet wird.
-
Ich mein, egal wie die vertices sind, ich seh immer nur ein kleines weißes Dreieck unten links in der Ecke. Ich werde heute die Codes nochmal genauer abgleichen, vielleicht lässt sich bei mir ja noch was ändern, dass die VBO's dann auch richtig laufen.