c-OpenGL当项目打包为Windows`.appx`或`.msix`文件时报告旧版本



我正在制作一个用C编写的视频游戏,它使用SDL和OpenGL绘制图形。编译后的版本在Linux和Android上运行良好。

我编译了Windows版本,它也很好用,只是作为一个独立的版本。我尝试将所有编译后的文件打包为.appx.msix格式,发现OpenGL在作为打包应用程序运行时报告的版本号完全不同。

我使用以下代码来获得一些OpenGL信息:

printf("Vendor graphic card: %sn", glGetString(GL_VENDOR));
printf("Renderer: %sn", glGetString(GL_RENDERER));
printf("Version GL: %sn", glGetString(GL_VERSION));
printf("Version GLSL: %sn", glGetString(GL_SHADING_LANGUAGE_VERSION));

当我作为一个独立的项目运行时,我会得到以下信息:

Vendor graphic card: Intel
Renderer: Intel(R) HD Graphics 2000
Version GL: 3.1.0 - Build 9.17.10.4459
Version GLSL: 1.40 - Intel Build 9.17.10.4459

这一切看起来都是正确的,应用程序的行为也如预期。然而,我随后将所有文件打包为.appx文件和.msix文件,运行时它们都报告了相同的结果:

Vendor graphic card: Microsoft Corporation
Renderer: GDI Generic
Version GL: 1.1.0
Version GLSL: (null)

不用说,我对glCreateShader的第一个调用就崩溃了。

作为参考,我在PowerShell中使用以下命令将所有文件打包为.appx.msix文件:

MakeAppx pack /d <my_file_directory> /p project.msix
SignTool sign /a /v /fd SHA256 /f mycert.pfx /p "mypassword" project.msix

有人知道是什么原因造成的吗?如果需要,很乐意提供更多信息。

根据我所做的一些研究,以及我从其他网站得到的评论,以下是我对这个问题的发现:

OpenGL对UWP的支持似乎需要一些技巧才能使其正常运行。Microsoft Store(使用.appx.msix文件(正在后台将OpenGL ES调用转换为Direct3D调用,这使得获取准确信息变得更加困难。

因此,最简单的方法似乎是将项目移植到Direct3D,这应该可以解决问题中提到的问题。

最新更新