C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了OpenGL与OpenGLES2的兼容性大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在尝试编写一些可以在任何地方运行的opengl代码,但不要过多限制自己.我想在仅支持它的设备上使用opengles2,并在支持的情况下使用opengl核心.

此外,我希望能够在运行时选择我使用的那个(当然,如果可用的话).

我的问题是:
如果我每次将代码与OpenGL库链接,然后创建GLES2或GL核心上下文,GLES2上下文的行为是否与GLESv2库完全相同?这会是什么影响,标题明智?
例如,GLESv2没有定义BGRA纹理格式,所以我想我必须将所有格式转换为RGBA.这不是什么麻烦,但我有兴趣知道替代品.

我曾想过动态加载库并加载所有使用过的函数指针,但对于可能有更简单答案的东西来说,这是一项巨大的工作.
在这种情况下,我只需要包含glext.h,并声明所用函数的所有函数指针,并填充它们.
这里的问题是glext没有定义任何数据类型(glenum等),所以我总是要包含gl.h.
通过包含两者,我得到gl.h函数声明和我自己的函数指针声明,所以我不能只使函数指针的通用命名空间…即使这样,一些函数(如glGetError)似乎不有一个关联的typedef作为他们的函数指针.

我知道GLEW,但不幸的是,大多数Linux发行版都发布了一个仍然不兼容GLES2的GLEW版本(debian,我在看你).它只是段错误.

你们这样做怎么样? opengl函数链接的任何其他方法

解决方法

我在航空航天工业,我开始使用各种OpenGL子集,因为每个硬件提供商都有自己的版本. (我希望能够完整记录……好吧……任何东西.)看来我们确实有类似的问题.我会告诉你到目前为止我学到的东西.

首先,您将希望发展成为您可以获得的所有配置文件中最大的最佳超集.使用硬件供应商提供的最新版本的OpenGL标头.这样你的程序至少可以解决编译部分.

BGRA宏/枚举将成为您的GLESv2运行时的一部分,但如果您的平台仅支持RGBA,您肯定永远不会在运行时使用它.

基于平台功能的运行时决策基于OpenGL扩展列表.将扩展列表与应用程序使用的任何内容进行比较,停用不支持的分支并激活支持的分支.您可以通过这种方式区分OpenGL和GLEs.

大佬总结

以上是大佬教程为你收集整理的OpenGL与OpenGLES2的兼容性全部内容,希望文章能够帮你解决OpenGL与OpenGLES2的兼容性所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。