我们击败了马里维奇,黑色正方形opengl

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

今天,我将出于什么原因被一个黑色广场拜访,发现的问题是因为OpenGL不会在屏幕上绘制任何内容,有时甚至使窗户透明。

使用工具

对于调试OpenGL,有两个工具帮助了我: renderdoc and renderdoc 和 and and and and apitrace 。 Renderdoc–用于调试OpenGL渲染过程的工具,您可以查看所有内容–顶点,着色器,纹理,驾驶员的债务消息。 Apitrace–一个追踪图形API挑战的工具,进行转储调用并显示参数。还有一个很好的机会可以通过WDIFF(或没有但不那么方便)比较两个转储

检查您与谁一起工作

我有一个操作系统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中发现缺陷的写作过程中,我将进一步描述它们。

确定生命中的谁

对于使用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);

例如,renderdoc不适合3.2以下的上下文。我想指出的是,切换上下文之后,看到相同的黑屏的可能性很高。为什么?
因为OpenGL 3.2的上下文必须需要VAO缓冲液的存在,而没有99%的图形驱动程序不起作用。添加简单:
<! - 使用hilite.me->

生成的html

 glgenvertexarrays( 1  vao
Glbindvertexaray(VAO);

不睡觉,冻结

我在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/

与驾驶员交谈

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

Leave a Comment

Your email address will not be published. Required fields are marked *