Malevich kommt regelmäßig jedem Entwickler auf OpenGL. Dies geschieht unerwartet und mutig.

Heute werde ich beschreiben, aus welchem Grund ich von einem schwarzen Quadrat besucht wurde.
Verwenden Sie Tools h3>
Für das Debuggen von OpenGL haben mir zwei Tools geholfen: renderdoc und und Apitrace . Renderdoc – Tool zum Debuggen des OpenGL -Rendering -Prozesses können Sie alles anzeigen – Scheitelpunkte, Shader, Texturen, Schuldennachrichten des Fahrers. Apitrace – Ein Werkzeug für die Verfolgung von Herausforderungen einer grafischen API macht einen Dump -Anruf und zeigt Argumente an. Es gibt auch eine großartige Gelegenheit, zwei Dumps über WDIFF (oder ohne, aber nicht so bequem) zu vergleichen
Überprüfen Sie, mit wem Sie arbeiten h3>
Ich habe ein Betriebssystem Ubuntu 16.10 mit alten Abhängigkeiten SDL2, GLM, Anlage, Glew. In der neuesten Version von Ubuntu 18.04 erhalte ich die Zusammenstellung des Spiels Todesmaske Das zeigt nichts auf dem Bildschirm (nur ein Black Square). Wenn Sie Chroot und Assembly bei 16.10 i verwenden, erhalte ich eine Arbeitsanordnung des Spiels mit Graphics .

In Ubuntu 18.04
scheint etwas gebrochen zu sein
ldd zeigte die Linkka zu identischen Bibliotheken SDL2, GL. Als ich einen nicht bearbeiteten Build in Renderdoc fuhr, sah ich Müll am Eingang zum Scheitelpunkt -Shader, aber ich brauchte eine solide Bestätigung. Um den Unterschied zwischen der Binarik zu verstehen, habe ich sie beide durch apitrace gefahren. Der Vergleich von Dumps hat mir gezeigt, dass die Versammlung auf einem frischen Ubunta das Programm der Aussichten in OpenGL bricht und tatsächlich Müll dorthin schickt:

Matrizen sammeln sich in der GLM -Bibliothek. Nach dem Kopieren von GLM von 16.04 – Ich habe wieder den Arbeitsaufbau des Spiels bekommen. Das Problem war der Unterschied in der Initialisierung einer einzelnen Matrix in GLM 9.9.0, es ist notwendig, das Argument MAT4 (1.0F) im Konstruktor eindeutig anzuzeigen. Nachdem ich die Initialisierung und geändert habe, indem ich der Autor der Bibliothek abgeschrieben habe. “Noopener”> Tests für FSGL . Beim Schreiben, den ich in FSGL fand, werde ich sie weiter beschreiben.
Bestimmen Sie, wer im Leben ist H3>
Für die richtige Arbeit mit OpenGL müssen Sie freiwillig gewaltsam den Kontext einer bestimmten Version anfordern. So sucht es nach SDL2 (Sie müssen die Version streng einsetzen, bevor Sie den Kontext initialisieren):
SDL_GL_SETTRTRIBUT (SDL_GL_CONTEXT_MAJOR_VERSION, 3 );
Sdl_gl_settribute (sdl_gl_context_minor_version, 2 );
Sdl_gl_settribute (sdl_gl_context_profile_mask, sdl_gl_context_profile_core);
Pre>
zum Beispiel funktioniert Renderdoc nicht mit Kontexten unter 3.2. Ich möchte feststellen, dass nach dem Umschalten des Kontextes eine hohe Wahrscheinlichkeit besteht, dass der gleiche schwarze Bildschirm angezeigt wird. Warum?
Denn der -Kontext von OpenGL 3.2 muss das Vorhandensein von VAO -Puffer erfordern, ohne dass 99% der grafischen Treiber nicht funktionieren. Fügen Sie es einfach hinzu:
GlGenvertexArrays ( 1 , & vao);
Glbindvertexaray (vao);
Pre>
schlaf nicht, friere h3> ein.
Ich habe auch ein interessantes Problem auf Kubuntu getroffen, anstatt auf ein schwarzes Quadrat wurde mir transparent angezeigt, und Manchmal wurde alles richtig gemacht. Ich fand die Lösung für dieses Problem beim Stack -Überlauf:
https://stackoverflow.com/questions/38411515/sdl2-opengl-window-appears-semi-transparent-sometimes
Der FSGL -Test -Render -Code war ebenfalls vorhanden Schlaf (2S) ; Also erhielt ich auf dem Xubuntu und Ubuntu das richtige Rendern und schickte den Antrag in den Schlaf, aber auf Kubuntu erhielt ich einen transparenten Bildschirm in 80% des Starts von Delphin und 30% der Starts und Terminal. Um dieses Problem zu lösen, fügte ich nach einer Sdlevent -Umfrage in jedem Frame Rendering hinzu, wie in der Dokumentation empfohlen.
Testcode:
https://gitlab.com/demensdeum/FSGLtests/blob/master/renderModelTest/
Sprechen Sie mit dem Treiber h3>
OpenGL unterstützt den Kommunikationskanal zwischen der Anwendung und dem Treiber, um ihn zu aktivieren. .
Hier kann ein Beispiel für die Initialisierung aufgenommen werden:
https://github.com/rock-core/gui-vizkit3d/blob/master/src/EnableGLDebugOperation.cpp