解决方案取决于用例,答案分散在整个网络的深处。我希望当我开始研究此内容时,无论是编码人员还是非编码人员,都应该写这篇文章。
Windows的RDP会话不会公开图形卡,至少不会直接公开图形卡。例如,您不能更改桌面分辨率,而GraphicsCard驱动程序通常仅禁用其设置菜单。因此,启动高于v1.1的OpenGL上下文失败。不幸的是,尤其是在支持IRC中,通常建议不要使用WindowsRemote。在许多公司环境中,Windows Remote是一个经常使用的工具,因此应用程序也必须在其中运行。
您可以启动OpenGL程序,使其能够查看图形卡,创建opengl上下文,然后通过WindowsRemote连接。这始终有效,因为Windows远程仅传输窗口内容。这可以通过以下方式完成:
(仅适用于OpenGL ES)将OpenGL转换为DirectX。DirectX完全可以在Windows Remote下运行,甚至在出现故障时甚至可以在DX11中内置一个软件渲染回退。
切换到软件渲染作为回退。例如3dsMax之类的某些CAD软件就可以做到这一点:
其他:
任何其他解决方案或更正,不胜感激。
我创建的应用程序脱离了任何本机框架。所有渲染均在 OpenGL 中进行,并由 GLFW 提供上下文,全部采用 C 语言,无需依赖任何框架来提供兼容性。因此,像 NVDA 这样的标准屏幕阅读器没有机会获取信息(不包括 OCR),而我的应用程序是一个可访问性黑洞。如何为屏幕阅读器提供一个可以使用的界面?我认为这是每个操作系统的事情......这在 Windows、Linux、BSD 甚至 Android 上怎么可能呢?在 *NIX 世界中,我认为这取决于桌面环境...我找到了很多关于此的信息,以框架为起点,但很难找到有关如何从头开始执行此操作的资源。
我完全意识到这远远超出了单个开发人员的能力,并且知道通过忽略本机接口来编写程序是一个常见的可访问性漏洞,建议您避免这种情况。
然而,我很难找到资源和切入点来探索这个主题。有人能指出我正确的方向吗?
TL;DR:如何从头开始提供屏幕阅读器兼容性。不是详细的——而是概念上的。
我的GCC 7.3.0和8.2.0有一些无法解释的奇怪行为。该程序显然以Segmentation错误结束:
int main()
{
double array[2]={0, 0};
printf("%f\n", array[999]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译与
gcc -Wall -O2 main.c
Run Code Online (Sandbox Code Playgroud)
产生警告
main.c: In function 'main':
main.c:6:5: warning: 'array[999]' is used uninitialized in this function [-Wuninitialized]
printf("%f\n", array[999]);
^~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
但是在关闭优化的情况下:
gcc -Wall main.c
Run Code Online (Sandbox Code Playgroud)
它根本不发出警告。我的Code linter和Debug编译(gcc -g)使用-O0,并且没有遇到类似的超出范围的错误,直到我将其编译为“打开并启用优化”。在短绒棉衣中设置-O1将按预期发布警告。