记一次有意义的调试

栏目: 编程工具 · 发布时间: 7年前

内容简介:最近阳光明媚,天气晴朗,我为了更好地没有了,并且没有任何错误输出。因为似乎坊间传言 Windows 对 OpenGL 的支持很迷,所以我的第一直觉是 GLSL 的兼容问题,不过这个角度似乎很难排查。

最近阳光明媚,天气晴朗,我为了更好地

折腾 理解 CMake,尝试把以前在 macOS 上写的一个 OpenGL 程序从 Makefile 改成 CMake 构建,顺带看看同样的东西在 Windows 上编译、运行效果如何。然而在 Windows 上用 MSVC 2015 构建后运行,发现场景里的东西

没有了,并且没有任何错误输出。

因为似乎坊间传言 Windows 对 OpenGL 的支持很迷,所以我的第一直觉是 GLSL 的兼容问题,不过这个角度似乎很难排查。

所以还是搞个最小的可重现问题的代码吧,于是从经典的「三角形」Hello World 开始很快地试了一下,发现在 Shader 里做矩阵乘法就有问题;进而发现只要不乘投影矩阵就没有大问题,至少场景里的东西还是可以显示出来的。

蛤?这是什么鬼?总不见得 glm::perspective 有移植性问题吧?

经过一番调试,终于找到了问题所在,结论让人哭笑不得:

我在代码里自己封装了摄像机类,初始化时需要设置投影矩阵所需的远近裁剪平面,相当于下面这样。

Camera(float far, float near) : far_{far}, near_{near} { /* blah blah */ }

虽然在其它平台没什么问题,但 windows.h 里有这种东西:

#define far
#define near

于是代码就相当于变成了

Camera(float, float) : far_{}, near_{} { /* blah blah */ }

把远近裁剪平面的两个变量都初始化成了 0,也难怪场景里什么东西都看不见了。

唉,写代码的时候忘记了 far / near 指针这种历史遗留爆点,不过还是要吐槽下 windows.h 如此暴力的解决方法。

以上,真是有意义的一天呀~


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

影响力

影响力

[美] 罗伯特·西奥迪尼 / 陈叙 / 中国人民大学出版社 / 2006-5 / 45.00元

政治家运用影响力来赢得选举,商人运用影响力来兜售商品,推销员运用影响力诱惑你乖乖地把金钱捧上。即使你的朋友和家人,不知不觉之间,也会把影响力用到你的身上。但到底是为什么,当一个要求用不同的方式提出来时,你的反应就会从负面抵抗变成积极合作呢? 在这本书中,心理学家罗伯特·B·西奥迪尼博士为我们解释了为什么有些人极具说服力,而我们总是容易上当受骗。隐藏在冲动地顺从他人行为背后的6大心理秘笈,正是......一起来看看 《影响力》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试