{"id":1440,"date":"2018-08-05T07:39:13","date_gmt":"2018-08-05T07:39:13","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=1440"},"modified":"2025-08-12T12:05:33","modified_gmt":"2025-08-12T09:05:33","slug":"black-screen-opengl","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2018\/08\/05\/black-screen-opengl\/","title":{"rendered":"Wir haben Malevich, Black Squares OpenGL geschlagen"},"content":{"rendered":"<p> Malevich kommt regelm\u00e4\u00dfig jedem Entwickler auf OpenGL. Dies geschieht unerwartet und mutig.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1441\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2018\/08\/malevich.png\" alt=\"\" width=\"688\" height=\"553\" srcset=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2018\/08\/malevich.png 688w, https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2018\/08\/malevich-300x241.png 300w\" sizes=\"auto, (max-width: 688px) 100vw, 688px\" \/><\/p>\n<p> Heute werde ich beschreiben, aus welchem Grund ich von einem schwarzen Quadrat besucht wurde. <\/p>\n<h3> Verwenden Sie Tools <\/ h3><\/h3>\n<p> F\u00fcr das Debuggen von OpenGL haben mir zwei Tools geholfen: <a href = \"https:\/\/github.com\/baldurk\/renderdoc\" target = \"_ leer\" rel = \"noopener\"> renderdoc <\/a> und <Aa> und <a href = \"https:\/.\/Github.com\/apitrace\/apitrace\/apitrace \"Noopener\"> Apitrace <\/a>. Renderdoc &#8211; Tool zum Debuggen des OpenGL -Rendering -Prozesses k\u00f6nnen Sie alles anzeigen &#8211; Scheitelpunkte, Shader, Texturen, Schuldennachrichten des Fahrers. Apitrace &#8211; Ein Werkzeug f\u00fcr die Verfolgung von Herausforderungen einer grafischen API macht einen Dump -Anruf und zeigt Argumente an. Es gibt auch eine gro\u00dfartige Gelegenheit, zwei Dumps \u00fcber WDIFF (oder ohne, aber nicht so bequem) zu vergleichen <\/p>\n<h3> \u00dcberpr\u00fcfen Sie, mit wem Sie arbeiten <\/ h3><\/h3>\n<p> Ich habe ein Betriebssystem Ubuntu 16.10 mit alten Abh\u00e4ngigkeiten SDL2, GLM, Anlage, Glew. In der neuesten Version von Ubuntu 18.04 erhalte ich die Zusammenstellung des Spiels <a href = \"https:\/\/gitlab.com\/demensdeum\/death-mask\" target = \"_ leer\" rel = \"noopener\"> Todesmaske <\/a> Das zeigt nichts auf dem Bildschirm (nur ein Black Square). Wenn Sie Chroot und Assembly bei 16.10 i <strong> verwenden, erhalte ich eine Arbeitsanordnung des Spiels mit Graphics <\/strong>. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1446\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2018\/08\/NOTSUREIF.jpg\" alt=\"\" width=\"417\" height=\"234\" \/><\/p>\n<p>In Ubuntu 18.04 <\/p>\n<p> scheint etwas gebrochen zu sein<\/p>\n<p> <strong> ldd <\/strong> zeigte die Linkka zu identischen Bibliotheken SDL2, GL. Als ich einen nicht bearbeiteten Build in Renderdoc fuhr, sah ich M\u00fcll am Eingang zum Scheitelpunkt -Shader, aber ich brauchte eine solide Best\u00e4tigung. Um den Unterschied zwischen der Binarik zu verstehen, habe ich sie beide durch <strong> apitrace <\/strong> gefahren. Der Vergleich von Dumps hat mir gezeigt, dass die Versammlung auf einem frischen Ubunta das Programm der Aussichten in OpenGL bricht und tats\u00e4chlich M\u00fcll dorthin schickt: <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1448\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2018\/08\/apicalls.png\" alt=\"\" width=\"1902\" height=\"234\" srcset=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2018\/08\/apicalls.png 1902w, https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2018\/08\/apicalls-300x37.png 300w, https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2018\/08\/apicalls-768x94.png 768w, https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2018\/08\/apicalls-1024x126.png 1024w\" sizes=\"auto, (max-width: 1902px) 100vw, 1902px\" \/><\/p>\n<p> Matrizen sammeln sich in der GLM -Bibliothek. Nach dem Kopieren von GLM von 16.04 &#8211; 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 <a href = \"https:\/\/github.com\/g-truc\/glm\/issues\/issues\/797\" rel = \"noopener\" target = \"_ leer\"> ge\u00e4ndert habe, indem ich <\/a> der Autor der Bibliothek abgeschrieben habe. &#8220;Noopener&#8221;> Tests f\u00fcr FSGL <\/a>. Beim Schreiben, den ich in FSGL fand, werde ich sie weiter beschreiben. <\/p>\n<h3> Bestimmen Sie, wer im Leben ist <\/ H3><\/h3>\n<p> F\u00fcr die richtige Arbeit mit OpenGL m\u00fcssen Sie <strong> <em> freiwillig gewaltsam <\/em> <\/strong> den Kontext einer bestimmten Version anfordern. So sucht es nach SDL2 (Sie m\u00fcssen die Version streng einsetzen, bevor Sie den Kontext initialisieren): <\/p>\n<p> <!-HTML erzeugt mit hilite.me-> <\/p>\n<p><Div style = \"Hintergrund: #FFFFFFFFFLAFFLOW: Auto; Breite: Auto; Rand: Feste Grau; Grenzbreite: .1EM .1EM .1EM .8EM; Padding: .2EM .6EM;\"><br \/>\n<Pre style = \"margin: 0; Zeilenh\u00f6he: 125%;\"> SDL_GL_SETTRTRIBUT (SDL_GL_CONTEXT_MAJOR_VERSION, <span style = \"color: #0000DD; Schriftgewicht: BOLD: BOLD;\"> 3 <\/span>);<br \/>\nSdl_gl_settribute (sdl_gl_context_minor_version, <span style = \"color: #0000dd; Schriftgewicht;\"> 2 <\/span>);<br \/>\nSdl_gl_settribute (sdl_gl_context_profile_mask, sdl_gl_context_profile_core);<br \/>\n<\/ Pre>\n<\/div>\n<p> zum Beispiel funktioniert Renderdoc nicht mit Kontexten unter 3.2. Ich m\u00f6chte feststellen, dass nach dem Umschalten des Kontextes <strong> eine hohe Wahrscheinlichkeit besteht, dass der gleiche schwarze Bildschirm <\/strong> angezeigt wird. Warum? <br \/>\nDenn der <strong> -Kontext von OpenGL 3.2 muss das Vorhandensein von VAO -Puffer <\/strong> erfordern, ohne dass 99% der grafischen Treiber nicht funktionieren. F\u00fcgen Sie es einfach hinzu: <br \/>\n<!-HTML erzeugt mit hilite.me-> <\/p>\n<p><Div style = \"Hintergrund: #FFFFFFFFFLAFFLOW: Auto; Breite: Auto; Rand: Feste Grau; Grenzbreite: .1EM .1EM .1EM .8EM; Padding: .2EM .6EM;\"><br \/>\n<Pre style = \"Margin: 0; Zeilenh\u00f6he: 125%;\"> GlGenvertexArrays (<span style = \"color: #0000dd; Schriftgewicht: fett;\"> 1 <\/span>, <span style = \"color. #333333;\"> &#038; <\/span> vao);<br \/>\nGlbindvertexaray (vao);<br \/>\n<\/ Pre>\n<\/div>\n<h3> schlaf nicht, friere <\/ h3> ein.<\/h3>\n<p> Ich habe auch ein interessantes Problem auf Kubuntu getroffen, anstatt auf ein schwarzes Quadrat wurde mir transparent angezeigt, und <strong> Manchmal wurde <\/strong> alles richtig gemacht. Ich fand die L\u00f6sung f\u00fcr dieses Problem beim Stack -\u00dcberlauf: <br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/38411515\/sdl2-opengl-window-appears-semi-transparent-sometimes\" target=\"_blank\" rel=\"noopener\">https:\/\/stackoverflow.com\/questions\/38411515\/sdl2-opengl-window-appears-semi-transparent-sometimes<\/a><\/p>\n<p> Der FSGL -Test -Render -Code war ebenfalls vorhanden <strong> Schlaf (2S) <\/strong>; 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\u00f6sen, f\u00fcgte ich nach einer Sdlevent -Umfrage in jedem Frame Rendering hinzu, wie in der Dokumentation empfohlen. <\/p>\n<p><P> Testcode: <br \/>\n<a href=\"https:\/\/gitlab.com\/demensdeum\/FSGLtests\/blob\/master\/renderModelTest\/\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/demensdeum\/FSGLtests\/blob\/master\/renderModelTest\/<\/a><\/p>\n<h3> Sprechen Sie mit dem Treiber <\/ h3><\/h3>\n<p> OpenGL unterst\u00fctzt den Kommunikationskanal zwischen der Anwendung und dem Treiber, um ihn zu aktivieren. <\/Span>. <br \/>\nHier kann ein Beispiel f\u00fcr die Initialisierung aufgenommen werden: <br \/>\n<a href=\"https:\/\/github.com\/rock-core\/gui-vizkit3d\/blob\/master\/src\/EnableGLDebugOperation.cpp\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/rock-core\/gui-vizkit3d\/blob\/master\/src\/EnableGLDebugOperation.cpp<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Malevich kommt regelm\u00e4\u00dfig 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 F\u00fcr das Debuggen von OpenGL haben mir zwei Tools geholfen: renderdoc und und<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[49,61,52],"tags":[],"class_list":["post-1440","post","type-post","status-publish","format-standard","hentry","category-blog","category-techie","category-tutorials","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"de","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/1440","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=1440"}],"version-history":[{"count":23,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/1440\/revisions"}],"predecessor-version":[{"id":4220,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/1440\/revisions\/4220"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=1440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=1440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=1440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}