Gleiche Rückgabewerte von glGenBuffers durch Application behandeln?



  • Hallo zusammen,

    ich habe ein kleines Verständnisproblem bei der Verwendung von glGenBuffers der OpenGL-API.
    glGenBuffers macht ja im Prinzip nichts anderes als mir einen (oder mehrere) Index zu liefern mit denen ich später (nach glBindBuffer) mit glBufferData die zugehörigen Informationen setzen kann. Letzlich muss ich mit glDeleteBuffers dieses Buffer-Objekt wieder freigeben.
    Jetzt stellt sich mir die Frage, woran ich erkenne, wann kein Buffer mehr verfügbar ist. Also angenommen alle buffer der Grafikkarte sind verwendet.
    Was passiert dann? Krieg ich einfach einen buffer zugewiesen der schonmal verwendet wurde?
    http://www.opengl.org/sdk/docs/man/docbook4/xhtml/glGenBuffers.xml

    however, it is guaranteed that none of the returned names was in use immediately before the call to glGenBuffers.

    Angenommen ich möchte 10000 Objekte zeichnen lassen. Ich hole mir also mit 10000 glGenBuffers-Aufrufen die Indizes (Namen) der buffer. Ich weiß, ich könnte auch alle gleichzeitig anfordern. Ich kann ja jetzt die Daten die mit glDrawElements immer wieder zeichnen lassen ohne jedesmal die Koordinaten und Farb-Informationen an die Grafikkarte zu senden. Muss ich jetzt selbst immer wieder überprüfen, ob ich einen Index zurückgeliefert kriege, der mit einem anderen meiner Objekte schon verbunden ist? Falls ja: Muss ich dann zwei mal glDeleteBuffers aufrufen? Letzterer Aufruf dient nach meinem Verständnis nur zur Freigabe der damit verbundenen Daten, da ein (erneutes) Setzen alle vorhandenen Daten löscht, würde ich eigentlich nicht davon ausgehen dass ich doppelt glDeleteBuffers aufrufen müsste.

    Gruß,
    XSpille


  • Mod

    fehler checks in opengl sind immer gleich, das trifft auch auf glGenBuffers zu.

    wobei glGenBuffers nie fehlschlaegt, esseiden du uebergibst einen unsinnigen wert fuer die anzahl der buffer (haetten sie eigentlich unsigned machen sollen, dann gebe es garkeinen error).

    das handle ist nur ein platzhalter und wird erst beim ersten verwenden wirdklich mit einem buffer versehen. der treiber kann bei mehreren buffer updates sogar die buffer austauschen die mit dem handle assoziiert sind. deswegen musst du an diesen stellen die fehlerchecks einbauen. (wie du es sonst ueberall mit opengl machst).



  • Danke rapso,

    ich war nur verwundert, dass bei glGenBuffers (abgesehen von einer negativen Zahl) nichts schief gehen kann.

    rapso schrieb:

    deswegen musst du an diesen stellen die fehlerchecks einbauen. (wie du es sonst ueberall mit opengl machst).

    Was meinst du mit "an diesen Stellen"?
    Du meinst (insbesondere) bei Aufrufen wie glBufferData o. ä., oder?
    Ich rufe nach jedem OpenGl-Befehl, der einen Fehler erzeugen kann, glGetError() um mich zu vergewissern, ob alles glatt gelaufen ist.

    Gruß
    XSpille


  • Mod

    XSpille schrieb:

    Was meinst du mit "an diesen Stellen"?
    Du meinst (insbesondere) bei Aufrufen wie glBufferData o. ä., oder?

    jup, das ist der ort an dem die eigentliche buffer allokation fehlschlagen koennte.

    Ich rufe nach jedem OpenGl-Befehl, der einen Fehler erzeugen kann, glGetError() um mich zu vergewissern, ob alles glatt gelaufen ist.

    dann solltest du auf einen fehler treffen wenn du zuviel allokierst, ergo hast du schon alles richtig.



  • DANKE rapso


Log in to reply