Malevich定期出现在OpenGL上的任何开发人员。这是出乎意料而大胆地发生的,您只需启动该项目并看到一个黑色正方形而不是一个美妙的渲染:

今天,我将出于什么原因被一个黑色广场拜访,发现的问题是因为OpenGL不会在屏幕上绘制任何内容,有时甚至使窗户透明。
使用工具 h3>
对于调试OpenGL,有两个工具帮助了我: renderdoc and renderdoc 和
检查您与谁一起工作 h3>
我有一个操作系统ubuntu 16.10,带有旧的依赖项SDL2,GLM,Assimp,Glew。在最新版本的Ubuntu 18.04中,我得到了游戏的组装“ noopener”> death-mask 在屏幕上没有显示任何东西(仅在屏幕上显示任何东西)。在16.10 I 使用Chroot和组件时,我会使用Graphics 进行游戏组件。

似乎在Ubuntu 18.04
中破裂了
ldd 显示了与相同库SDL2的Linkka,Gl。在Renderdoc驾驶非工作版本,我在顶点着色器的入口处看到垃圾,但我需要更坚实的确认。为了理解二进制技术之间的区别,我将它们俩都通过 apitrace 驱动。垃圾场的比较表明,新鲜的Ubunta上的大会打破了OpenGL的潜在客户计划,实际上将垃圾发送到那里:

矩阵聚集在GLM库中。从16.04–我再次获得了游戏的工作构建。问题是GLM 9.9.0中单个矩阵的初始化的差异,有必要清楚地指出构造函数中的Mat4(1.0f)参数。更改了初始化并通过写下图书馆的作者,我开始做测试FSGL 。在我在FSGL中发现缺陷的写作过程中,我将进一步描述它们。
确定生命中的谁 h3>
对于使用OpenGL进行正确的工作,您需要自愿强行强行 请求某个版本的上下文。因此,它查找SDL2(您需要严格将版本放置在初始化上下文之前):
<! - 使用hilite.me->
生成的html
sdl_gl_seettribute(sdl_gl_context_major_version, 3 )> 3 );
sdl_gl_settribute(sdl_gl_context_minor_version, 2 );
sdl_gl_settribute(sdl_gl_context_profile_mask,sdl_gl_context_profile_core_core);
pre>
例如,renderdoc不适合3.2以下的上下文。我想指出的是,切换上下文之后,看到相同的黑屏的可能性很高。为什么?
因为OpenGL 3.2的上下文必须需要VAO缓冲液的存在,而没有99%的图形驱动程序不起作用。添加简单:
<! - 使用hilite.me->
生成的html
glgenvertexarrays( 1 ,& vao
Glbindvertexaray(VAO);
pre>
不睡觉,冻结 h3>
我在kubuntu上也遇到了一个有趣的问题,而不是一个黑色的正方形,我被透明了,有时一切都正确地呈现。我在Stack Overflow上找到了解决此问题的解决方案:
https://stackoverflow.com/questions/38411515/sdl2-opengl-window-appears-semi-transparent-sometimes
FSGL测试渲染代码也存在睡眠(2s);因此,在Xubuntu和Ubuntu上,我收到了正确的渲染并将应用程序入睡,但是在Kubuntu上,我在Dolphin发射的80%和30%的发射和终端中收到了透明的屏幕。为了解决此问题,我按照文档中的建议在SDLEVENT调查后在每个帧中添加了渲染。
测试代码:
https://gitlab.com/demensdeum/FSGLtests/blob/master/renderModelTest/
与驾驶员交谈 h3>
Opengl supports the communication channel between the application and the driver, to activate it, you need to turn on the flags Gl_debug_outPut, GL_DEBUG_OUTPUT_SYNCHRONUS, affix the warning GLDEBUGMESSAGECONTROL and tie the calback through GLDEBUGMESSAGECALLBACK 。
可以在此处以初始化的示例:
https://github.com/rock-core/gui-vizkit3d/blob/master/src/EnableGLDebugOperation.cpp