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

zkure5ic  于 2022-09-26  发布在  Windows
关注(0)|答案(1)|浏览(156)

我正在制作一个用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

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

xdnvmnnf

xdnvmnnf1#

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

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

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

相关问题