{"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\/fr\/2018\/08\/05\/black-screen-opengl\/","title":{"rendered":"Nous avons battu Malevich, carr\u00e9s noirs OpenGL"},"content":{"rendered":"<p> Malevich arrive p\u00e9riodiquement \u00e0 tout d\u00e9veloppeur sur OpenGL. Cela se produit de fa\u00e7on inattendue et hardiment, vous commencez simplement le projet et voyez un carr\u00e9 noir au lieu d&#8217;un merveilleux rendu: <\/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> Aujourd&#8217;hui, je d\u00e9crirai la raison pour laquelle j&#8217;ai \u00e9t\u00e9 visit\u00e9 par un carr\u00e9 noir, les probl\u00e8mes trouv\u00e9s \u00e0 cause de quel OpenGL ne dessine rien \u00e0 l&#8217;\u00e9cran, et rend parfois m\u00eame la fen\u00eatre transparente. <\/p>\n<h3> Utilisez des outils <\/h3>\n<p> Pour le d\u00e9bogage OpenGL, deux outils m&#8217;ont aid\u00e9: <a href = \"https:\/\/github.com\/baldurk\/renderDoc\" Target = \"_ Blank\" rel = \"noantener\"> renderdoc <\/a> et <aa> et <a href = \"https:\/\/github.com\/apitrace\/aprace\" target = \"_ widek\" wide = \"novener\" <\/a>. RenderDoc &#038; # 8211; Outil pour d\u00e9boguer le processus de rendu OpenGL, vous pouvez tout voir &#038; # 8211; Vertexes, shaders, textures, messages de la dette du pilote. Apitrace &#038; # 8211; Un outil pour relever les d\u00e9fis d&#8217;une API graphique, fait des appels \u00e0 vidage et affiche des arguments. Il y a aussi une excellente occasion de comparer deux d\u00e9charges via Wdiff (ou sans, mais pas si pratique) <\/p>\n<h3> V\u00e9rifiez avec qui vous travaillez <\/h3>\n<p> J&#8217;ai un syst\u00e8me d&#8217;exploitation Ubuntu 16.10 avec les anciennes d\u00e9pendances SDL2, GLM, ASSIMM, GLEW. Dans la derni\u00e8re version d&#8217;Ubuntu 18.04, j&#8217;obtiens l&#8217;assemblage du jeu <a href = \"https:\/\/gitlab.com\/demensdeum\/death-mask\" cible = \"_ blank\" rel = \"noantener\"> Death-Mask <\/a> qui ne montre rien \u00e0 l&#8217;\u00e9cran (seulement un carr\u00e9 noir). Lorsque vous utilisez le chroot et l&#8217;assemblage \u00e0 16.10 I <strong>, j&#8217;obtiens un assemblage de travail du jeu avec des graphiques <\/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>Il semble que quelque chose soit cass\u00e9 dans Ubuntu 18.04 <\/p>\n<p> <strong> LDD <\/strong> a montr\u00e9 le linkka aux biblioth\u00e8ques identiques SDL2, GL. En conduisant une construction non travaillant dans RenderDoc, j&#8217;ai vu des ordures \u00e0 l&#8217;entr\u00e9e du vertex shader, mais j&#8217;avais besoin d&#8217;une confirmation plus solide. Afin de comprendre la diff\u00e9rence entre les binares, je les ai conduits \u00e0 tous les deux via <strong> apitrace <\/strong>. La comparaison des d\u00e9charges m&#8217;a montr\u00e9 que l&#8217;assembl\u00e9e sur un nouveau Ubunta rompt le programme des prospects dans OpenGL, en r\u00e9ellement des ordures l\u00e0-bas: <\/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> Les matrices se rassemblent dans la biblioth\u00e8que GLM. Apr\u00e8s avoir copier GLM \u00e0 partir de 16,04 &#038; # 8211; J&#8217;ai \u00e0 nouveau obtenu la construction de travail du jeu. Le probl\u00e8me \u00e9tait la diff\u00e9rence dans l&#8217;initialisation d&#8217;une seule matrice dans GLM 9.9.0, il est n\u00e9cessaire d&#8217;indiquer clairement l&#8217;argument MAT4 (1.0f) dans le constructeur. Ayant chang\u00e9 l&#8217;initialisation et <a href = \"https:\/\/github.com\/g-truc\/glm\/issues\/797\" rel = \"nopenner\" cible = \"_ blanc\"> en rangeant <\/a> l&#8217;auteur de la biblioth\u00e8que, j&#8217;ai commenc\u00e9 \u00e0 faire <a href = \"https:\/\/gitlab.com\/demensdeum\/fsgltest\" \"Noopener\"> Teste pour FSGL <\/a>. Dans le processus d&#8217;\u00e9criture que j&#8217;ai trouv\u00e9 des d\u00e9fauts dans FSGL, je les d\u00e9crirai davantage. <\/p>\n<h3> D\u00e9terminez qui est dans la vie <\/h3>\n<p> Pour le bon travail avec OpenGL, vous devez <strong> <em> volontairement de force <\/em> <\/strong> demander le contexte d&#8217;une certaine version. Il recherche donc SDL2 (vous devez mettre la version strictement avant d&#8217;initialiser le contexte): <\/p>\n<p> <! - HTML g\u00e9n\u00e9r\u00e9 \u00e0 l'aide de hilite.me-> <\/p>\n<p><Div style = \"background: #ffffffflafflow: auto; largeur: auto; bordure: gris solide; largeur de bordure: .1em .1em .1em .8em; padding: .2em .6em;\"><br \/>\n<Pre style = \"margin: 0; line-height: 125%;\"> sdl_gl_seettrtribute (sdl_gl_context_major_version, <span style = \"couleur: # 0000dd; font-weight: bold;\"> 3 <\/span>);<br \/>\nSdl_gl_settribute (sdl_gl_context_minor_version, <span style = \"color: # 0000dd; font-weight;\"> 2 <\/span>);<br \/>\nSdl_gl_settribute (sdl_gl_context_profile_mask, sdl_gl_context_profile_core);\n<\/pre>\n<\/div>\n<p> Par exemple, RenderDoc ne fonctionne pas avec des contextes inf\u00e9rieurs \u00e0 3.2. Je voudrais noter qu&#8217;apr\u00e8s changer le contexte <strong>, il y a une forte probabilit\u00e9 de voir le m\u00eame \u00e9cran noir <\/strong>. Pourquoi? <Br \/><br \/>\nParce que le contexte <strong> d&#8217;OpenGL 3.2 doit n\u00e9cessiter la pr\u00e9sence de tampon VAO <\/strong>, sans lesquels 99% des conducteurs graphiques ne fonctionnent pas. Ajoutez-le facile: <br \/>\n<! - HTML g\u00e9n\u00e9r\u00e9 \u00e0 l'aide de hilite.me-> <\/p>\n<p><Div style = \"background: #ffffffflafflow: auto; largeur: auto; bordure: gris solide; largeur de bordure: .1em .1em .1em .8em; padding: .2em .6em;\"><br \/>\n<Pre style = \"margin: 0; line-height: 125%;\"> glGenverTexArrays (<span style = \"Color: # 0000DD; Font-Weight: Bold;\"> 1 <\/span>, <span style = \"Color. # 33333;\"> &#038; <\/span> vao);<br \/>\nGlbindvertexaray (vao);\n<\/pre>\n<\/div>\n<h3> Ne dormez pas, gel <\/h3>\n<p> J&#8217;ai \u00e9galement rencontr\u00e9 un probl\u00e8me int\u00e9ressant sur Kubuntu, au lieu d&#8217;un carr\u00e9 noir, j&#8217;ai \u00e9t\u00e9 montr\u00e9 transparent, et <strong> parfois <\/strong> tout a \u00e9t\u00e9 rendu correctement. J&#8217;ai trouv\u00e9 la solution \u00e0 ce probl\u00e8me \u00e0 Stack Overflow: <Br \/><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> Le code de rendu de test FSGL \u00e9tait \u00e9galement pr\u00e9sent <strong> sommeil (2s) <\/strong>; Donc, sur le Xubuntu et Ubuntu, j&#8217;ai re\u00e7u le rendu correct et envoy\u00e9 la demande endormie, mais sur Kubuntu, j&#8217;ai re\u00e7u un \u00e9cran transparent dans 80% du lancement de Dolphin et 30% des lancements et du terminal. Pour r\u00e9soudre ce probl\u00e8me, j&#8217;ai ajout\u00e9 le rendu dans chaque trame, apr\u00e8s une enqu\u00eate SDlevent, comme recommand\u00e9 dans la documentation. <\/p>\n<p> Code de test: <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> Parlez au conducteur <\/h3>\n<p> OpenGL prend en charge le canal de communication entre l&#8217;application et le pilote, pour l&#8217;activer, vous devez allumer les drapeaux GL_DEBUG_OUTPUT, GL_DEBUG_OUTPUT_SYNCHRONUS, APPIX L&#8217;ARTIPE <SPAN CLASS = \"PL-C1\"> GLDEBUGMESSAGECONTROL <\/SPAND> et TIE THE CALBACK AUX CLACK CLASS = &#8220;PL-PLE-C1&#8221; <\/span>. <br \/>\nUn exemple d&#8217;initialisation peut \u00eatre pris ici: <r \/><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 arrive p\u00e9riodiquement \u00e0 tout d\u00e9veloppeur sur OpenGL. Cela se produit de fa\u00e7on inattendue et hardiment, vous commencez simplement le projet et voyez un carr\u00e9 noir au lieu d&#8217;un merveilleux rendu: Aujourd&#8217;hui, je d\u00e9crirai la raison pour laquelle j&#8217;ai \u00e9t\u00e9 visit\u00e9 par un carr\u00e9 noir, les probl\u00e8mes trouv\u00e9s \u00e0 cause de quel OpenGL ne dessine<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2018\/08\/05\/black-screen-opengl\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Nous avons battu Malevich, carr\u00e9s noirs OpenGL&#8221;<\/span><\/a><\/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":"fr","enabled_languages":["en","ru","zh","de","fr","ja","pt"],"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}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/1440","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=1440"}],"version-history":[{"count":23,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/1440\/revisions"}],"predecessor-version":[{"id":4220,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/1440\/revisions\/4220"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=1440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=1440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=1440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}