美文网首页OpenGL程序员OpenGL
关于我这踩过的关于OpenGL的坑

关于我这踩过的关于OpenGL的坑

作者: 旅行中的穿越者 | 来源:发表于2019-03-18 22:16 被阅读10次

    这两天我几乎一门心思扑在了OpenGL上面了,也踩了不少坑,在这里我向大家分享一下关于我所踩过的坑。

    1.OpenGL关于版本

    以下是我的吐槽,可以跳过。

    OpenGL最新版本是2017年出的4.6,从NVIDIA当年发布的驱动说明来看,这貌似是OpenGL的最终版本。妈耶,这东西原来都差不多凉了吗。其实以目前来看OpenGL还是挺不错的,特别是4.6版本开始完全支持SPIR-V。这是个什么东西呢?玩过现代OpenGL的想必都写过着色器,但如果你想要使用着色器,在此之前你要么在源代码里写个const char*类型的字符串,要么自己写一个着色器的加载类,这他妈烦不烦啊。而且我等既然都用起了C++,这种运行时的编译过程自然是怎么看怎么不顺眼。所以,这个时候,SPIR-V登场了,SPIR-V实际上就是着色器程序的中间代码,可以直接加载到程序中使用,但是这有个问题出现了。

    使用二进制的中间代码文件要求使用两个API函数,一个是glShaderBinary,一个是glSpecializelizeShader。这两个函数一个是OpenGL4.1的函数,一个是OpenGL4.6的函数,我也不知道为什么要这么设计,反正如果你OpenGL如果不是4.6,你就不得不自己写个着色器代码的加载类了,或者字符串内嵌到代码里面。本人的GTX 1050自然是支持OpenGL4.6的所以我就开开心心的上手了。

    但是GLFW在我设置了4.6版本后居然罢工了。

    我甚至一度怀疑GLFW这个2016年最后一个版本的第三方窗体库是不是不支持4.6,最后自然是我错了,人家当然支持。

    是我一直在开着核显跑程序。

    intel7代酷睿的核显不支持4.6。 

    解决方法自然是更改了显卡的全局设置,问题解决。


    2.关于GLAD的问题

    一开始我的GLAD是从github上不知道哪里下的,第三方库本身就不支持4.6版本。

    这里我给出一下我最后弄GLAD的地址。

    3.关于glslang工具编译报错

    我一开始编译着色器的时候会报如下错误:

    'location' : SPIR-V requires location for user input/output

    其实SPIR-V对源代码的要求更加严格,你必须要对每个着色器程序的in和out变量都要加上一个layout(location=xxx),不然就会报错。

    相关文章

      网友评论

        本文标题:关于我这踩过的关于OpenGL的坑

        本文链接:https://www.haomeiwen.com/subject/mltpmftx.html