Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Dez 08, 2023 03:31

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glNamedBufferStorage & glBindBuffer
BeitragVerfasst: Mi Sep 27, 2023 13:04 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1270
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Wen ich hier lese, habe ich angenommen, wen man glNamedBufferStorage verwendet, wird glBindBuffer nicht mehr gebraucht.
Aber wen ich dies in meinem Code weglasse, stürzt es ab oder die Ausgabe ist fehlerhaft..

https://www.reddit.com/r/opengl/comment ... ufferdata/

So sieht die Initialisierung des Buffers aus.
Code:
  1.   glGenVertexArrays(1, @VBTriangle.VAO);
  2.   glBindVertexArray(VBTriangle.VAO);
  3.  
  4.   glCreateBuffers(1, @VBTriangle.VBO);
  5. //  glNamedBufferData(VBTriangle.VBO, TriangleVectors.Size + TriangleColors.Size, nil, GL_STATIC_DRAW);
  6.   glNamedBufferStorage(VBTriangle.VBO, TriangleVectors.Size + TriangleColors.Size, nil, GL_DYNAMIC_STORAGE_BIT);
  7.   glNamedBufferSubData(VBTriangle.VBO, 0, TriangleVectors.Size, PFace(TriangleVectors));
  8.   glNamedBufferSubData(VBTriangle.VBO, TriangleVectors.Size, TriangleColors.Size, PFace(TriangleColors));
  9.  
  10.   glBindBuffer(GL_ARRAY_BUFFER, VBTriangle.VBO);  // ohne dies geht es nicht
  11.   glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nil);
  12.   glEnableVertexAttribArray(0);
  13.   glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, PGLvoid(TriangleVectors.Size));
  14.   glEnableVertexAttribArray(1);
  15.  
  16.   glCreateBuffers(1, @VBTriangle.EBO);
  17.   glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBTriangle.EBO);  // ohne dies geht es nicht
  18. //  glNamedBufferData(VBTriangle.EBO, Length(TriangleIndices) * sizeof(TGLfloat), nil, GL_STATIC_DRAW);
  19.   glNamedBufferStorage(VBTriangle.EBO, Length(TriangleIndices) * sizeof(TGLfloat), nil, GL_DYNAMIC_STORAGE_BIT);
  20.   glNamedBufferSubData(VBTriangle.EBO, 0, Length(TriangleIndices) * sizeof(TGLfloat), PGLshort(TriangleIndices));
  21.  


Ich habe auch glNamedBufferData probiert, anstelle von glNamedBufferStorage, der gleiche Effekt.

Ist die Information in dem angegeben Link falsch, odr habe ioch sonst etwas vergessen. ?

Wen es abstürzt, passiert erst bei:
Code:
  1.   glDrawElements(GL_TRIANGLES, Length(TriangleIndices), GL_UNSIGNED_SHORT, nil);    

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Sep 27, 2023 21:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Hast du es mal mit glBindVertexBuffer und glVertexArrayAttribFormat statt mit glBindBuffer und glVertexAttribPointer probiert, wie hier beschrieben? Ansonsten wäre es sicher hilfreich, sich von OpenGL mal Fehlermeldungen ausgeben zu lassen. Dazu musst du eigentlich ein Debug-Profil erstellen. Alternativ kannst du auch mit apitrace alles aufnehmen und von qapitrace mit aktiviertem Debug-Profil wiedergeben lassen. Letzteres scheint mir einfacher, deswegen habe ich es bisher immer so gemacht.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 28, 2023 16:03 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1270
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Danke erst mal.
Zitat:
Hast du es mal mit glBindVertexBuffer und glVertexArrayAttribFormat statt mit glBindBuffer und glVertexAttribPointer probiert, wie hier beschrieben?

Sieht jetzt erst mal gut aus.
Code:
  1. const
  2.   vertices: array of TVector3f = (
  3.     (-0.90, -0.90, 0), (1, 0, 0),
  4.     (0.85, -0.90, 0), (0, 1, 0),
  5.     (-0.90, 0.85, 0), (0, 0, 1),
  6.     (0.90, -0.85, 0), (1, 0, 0),
  7.     (0.90, 0.90, 0), (0, 1, 0),
  8.     (-0.85, 0.90, 0), (0, 0, 1));
  9.  
  10. procedure TForm1.CreateScene;
  11. begin
  12.   InitOpenGLDebug;
  13.   LogForm.Show;
  14.  
  15.   Shader := TShader.Create([GL_VERTEX_SHADER, FileToStr('Vertexshader.glsl'), GL_FRAGMENT_SHADER, FileToStr('Fragmentshader.glsl')]);
  16.   Shader.UseProgram; 
  17.  
  18.   glCreateBuffers(1, @VBO);
  19.   glNamedBufferData(VBO, Length(vertices) * SizeOf(TVector3f), PVector3f(vertices), GL_STATIC_DRAW);
  20.  
  21.   glGenVertexArrays(1, @VAO);
  22.   glBindVertexArray(VAO);
  23.  
  24.   glVertexAttribBinding(0, 0);
  25.   glVertexAttribFormat(0, 3, GL_FLOAT, GL_FALSE, 0);
  26.   glEnableVertexAttribArray(0);
  27.  
  28.   glVertexAttribBinding(1, 1);
  29.   glVertexAttribFormat(1, 3, GL_FLOAT, GL_FALSE, SizeOf(TVector3f));
  30.   glEnableVertexAttribArray(1);
  31.  
  32.   glBindVertexBuffer(0, VBO, 0, 24);
  33.   glBindVertexBuffer(1, VBO, 0, 24);
  34. end;                                          


Zitat:
Ansonsten wäre es sicher hilfreich, sich von OpenGL mal Fehlermeldungen ausgeben zu lassen. Dazu musst du eigentlich ein Debug-Profil erstellen.

Dies habe ich jetzt gemacht, aber es wird nichts ausgespuckt.
Ich habe als Test bewusst einen Fehler eingebaut, und die Message erschien als FATAL.
Müsste da keine Warnung bei sowas kommen ?
12 ist doch für Color viel zu hoch.
Code:
  1.   glClearColor(12,12,12,12);


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.068s | 19 Queries | GZIP : On ]