我正在制作一个用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
有人知道这可能是什么原因吗?如果需要,我很乐意提供更多的信息。
1条答案
按热度按时间xdnvmnnf1#
根据我做的一些研究,以及我从其他网站得到的评论,以下是我对这个问题的发现:
UWP上的OpenGL支持似乎需要一些技巧才能使其正确运行。Microsoft应用商店(使用
.appx
和.msix
文件)正在幕后将OpenGL ES调用转换为Direct3D调用,这使得获取准确信息变得更加困难。因此,最简单的方法似乎是将项目移植到Direct3D,这应该可以解决问题中提到的问题。