繁体   English   中英

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

[英]OpenGL Reporting an old version when project packaged as a Windows `.appx` or `.msix` file

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

我编译了 Windows 版本,它也可以正常工作,只是作为独立版本。 我尝试 package .appx.msix格式内的所有编译文件,我发现 OpenGL 在作为打包应用程序运行时报告完全不同的版本号。

我正在使用以下代码获取一些 OpenGL 信息:

printf("Vendor graphic card: %s\n", glGetString(GL_VENDOR));
printf("Renderer: %s\n", glGetString(GL_RENDERER));
printf("Version GL: %s\n", glGetString(GL_VERSION));
printf("Version GLSL: %s\n", 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,这应该可以解决问题中提到的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM