我认为Godot应该以某种方式检查系统是否可以处理GLES2,而不是中止或失败,而是向用户显示有关其驱动程序不支持GLES2的有意义的错误消息。 “您的计算机似乎当前不支持运行此程序所需的GLES2。需要新的驱动程序或硬件升级。” 遵循这些原则。
我不确定这将要做什么,但是在代码中必须有某种方法可以做到。
这是专门针对Windows用户的,他们似乎总是拥有糟糕的GPU和糟糕的驱动程序,但理想情况下,检查应在所有平台上进行。
+1
+10
+1
我在context_gl_win.cpp中编写了该代码,但是由于
由于驱动程序糟糕,Windows中一些未实现的功能
我希望我能找出原因
2015年1月17日,星期六,下午2:56,MSC [email protected]写道:
+1
-
直接回复此电子邮件或在GitHub上查看
https://github.com/okamstudio/godot/issues/1162#issuecomment -70376758。
暂时将其设置为高优先级将是一个非常有用的功能。 我们收到大量死机报告,原因是有人使用非常老的英特尔IGP或不支持GLES2的东西。
好的,我想我已经参考了足够多的崩溃来强调我的上述“吨”,我将停止深入研究档案:D
+1为什么Godot可以在Ubuntu上神奇地工作而在Windows上却不能工作?
关于如何实现@reduz的任何想法吗?
我在context_gl_win.cpp中编写了该代码,但是由于Windows中一些未实现的功能,它通常会崩溃
那为什么不使用动态链接呢? 很明显,缺少哪个功能。 我相信https://github.com/p3/regal可以做到这一点。
我已经进行了检测并尝试显示一条消息,但是似乎
仍然无法正常工作。
由于我没有任何不受支持的硬件,因此我看不到它为什么崩溃并且
因此,无法修复它。
欢迎公关。
在2016年2月2日星期二中午12:11,anatoly techtonik < [email protected]
写道:
我在context_gl_win.cpp中编写了该代码,但是由于
Windows中一些未实现的功能那为什么不使用动态链接呢? 显然哪个功能是
失踪。 我相信https://github.com/p3/regal可以做到这一点。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -178624438。
如果使用旧GPU的人可以尝试在Linux上通过gdb运行Godot,那么可能会很有帮助。 Windows“问题签名”调试信息似乎毫无意义:/
我根本没有做C ++。 只有Python,所以我是用户。 告诉我要运行什么,我可能会得到信息。
告诉我要运行什么,我可能会得到信息。
我不知道如何在Windows上通过调试器运行内容,但是对于那些没有太多在Windows上编译内容的经验的人来说,这并不简单。 这就是为什么我建议某人尝试在Linux上使用GDB进行调试的原因,因为它非常易于使用:
$ gdb /path/to/godot/binary // if possible self-compiled in debug mode, to have more info
-> run
// see that it segfaults in the terminal
-> bt
并将此bt
(backtrace)命令的输出复制到此错误报告。
当然,问题可能出在Windows上,因此在Linux上进行调试是没有意义的,但是我相信Linux用户也遇到了段错误,这些段错误并未被告知用户其硬件不支持OpenGL(ES)2.1。
Beta 2.0无法在我的Linux上运行,但似乎与图形卡无关-#3557
呵呵,您很幸运地遇到了我们在极端情况下遇到的所有已知问题:)
我想我只有一个“抱怨人才”和一个GitHub帐户。 =)
我不知道这些旧的视频卡在启动时会崩溃,但是在NVIDIA 6800 GT上,
它仅在少数项目上崩溃。 因此,在所有项目和Godot模块上都有关于帧缓冲区错误的cmd输出。 通过禁用项目光栅化器设置中的“ fp16_framebuffer”设置,可以完全修复该问题。 我知道,在相同的视频卡上(不知道完全连接),存在错误的光栅化(没有纹理),可以通过禁用“ fragment_lighting”设置完全固定。
因此,我认为Godot应该检查是否支持这些功能,如果不支持,请注意用户并禁用它们。
也许对启动时崩溃也有帮助。
告诉我要运行什么,我可能会得到信息。
$ gdb / path / to / godot / binary //如果可能的话在调试模式下自动编译,以获取更多信息
Godot_v2.0_beta_20160205_x11.64
不会在具有相同硬件的Fedora 23上崩溃。 在此处将其检测为Mobile Intel® GM45 Express Chipset
。
Godot_v2.0_beta_20160205_win32.exe
在Vista 32上仍然崩溃。
@techtonik我认为原因是,与Windows不同,Linux在硬件OpenGL存在问题时使用OpenGL的软件实现,但是它的速度比硬件慢。
@ Algrin6如果引擎可以提供一些透明性,那就太好了。 在过去,Baldur's Gate之类的游戏附带图形测试二进制文件。 http://www.fileplanet.com/13582/download/Baldur's-Gate-Graphics-Test
BIOWARE VIDEO DRIVER TEST
PURPOSE
-------
This program tests each of the DirectDraw calls used in the full version of Baldur's
Gate. The program uses 640x480 mode with 16-bit color, which has proved to be
problematic with some video drivers.
REQUIREMENTS
------------
This program requires a video card with 2 MB of memory. This program also expects
to see DirectX 3.01a or greater on your system.
...
2 MB的内存! 现在我有3 GB + 3 GHz,并且无法运行游戏引擎。 怎么来的?
2 MB的内存! 现在我有3 GB + 3 GHz,并且无法运行游戏引擎。 怎么来的?
因为我们在2016年,而那个Bioware引擎已经过时了? 并且此测试旨在检查图形驱动程序是否足够强大,因此该测试很可能是从DirectX 3.01a开始_正在工作,但是如果您低于DirectX 7或其他,则可能会说“升级硬件或驱动程序”。 Bioware引擎仅在MS Windows <= XP上运行,而Godot在十几个平台上运行...
现在,既然您似乎确切地知道我们需要做什么,请提出请求。
@techtonik的主要问题是核心开发人员都没有旧硬件可以测试该问题。 因此,您要么必须提供调试信息以查明问题的原因,要么自己解决(这是开源的魅力)。
博德之门未在通用2D / 3D游戏引擎中进行编程。
它是使用C,x86汇编器(可能是Watcom)定制的定制程序
编译器,保护模式,并使用基本的堆栈计算机进行脚本编写。 也
随时自行完成所有自定义的blitting代码。
在2016年2月7日,星期日,下午12:36,George Marques [email protected]
写道:
@techtonik https://github.com/techtonik关于此的主要问题是
核心开发人员都没有旧硬件可以测试该问题。 所以
您要么提供调试信息以查明故障原因,要么
自行修复(这是开源的美)。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -181034018。
@reduz Godot可以为引擎产生的代码(或由编辑器使用)生成“平台兼容性表”
如果目前无法做到这一点,那么这至少在技术上是否可行?
验证的用例是能够产生一个最小的游戏(测试),该游戏可以在任何打点设备上运行并衡量性能。
@reduz https://github.com/godotengine/godot/issues/1162#issuecomment -180466018怎么样?
@ Algrin6检查旧版本的OpenGL是否支持该内容是毫无意义的。 这些GPU的驱动程序告诉OpenGL所有功能都受支持,然后进入某种奇怪的软件回退,该回退很慢,冻结或崩溃。
我更愿意假装这种旧硬件不存在,已经从地球上掉下来了。
我认为这意味着“欢迎补丁”,我真的怀疑有人会拒绝
很好的支持
较旧的平台。
2016年2月11日星期四,凌晨3:41,胡安·利尼茨基[email protected]
写道:
@ Algrin6 https://github.com/Algrin6检查是否没有意义
OpenGL的较早版本支持该功能。 这些GPU具有驱动程序
告诉OpenGL所有内容都受支持,然后进行某种
缓慢,死机或崩溃的怪异软件回退。我更愿意假装这样的旧硬件不存在并且已经崩溃
来自地球。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -182658216。
我仍在等待使用旧芯片组的人做出更好的贡献
检测不支持的硬件。 我没有任何硬件,因为
十年,所以我无能为力。
2016年2月10日,星期三,晚上11:30,谢尔盖·拉平(Sergey Lapin) [email protected]
写道:
我认为这意味着“欢迎补丁”,我真的怀疑有人会拒绝
很好的支持
较旧的平台。2016年2月11日星期四,凌晨3:41,胡安·利尼茨基[email protected]
写道:@ Algrin6 https://github.com/Algrin6检查是否没有意义
OpenGL的较早版本支持该功能。 这些GPU具有驱动程序
告诉OpenGL所有内容都受支持,然后进行某种
缓慢,死机或崩溃的怪异软件回退。我更愿意假装这样的旧硬件不存在并且已经崩溃
来自地球。-
直接回复此电子邮件或在GitHub上查看
< https://github.com/godotengine/godot/issues/1162#issuecomment -182658216
。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -182676389。
我可以使用80年代到2000年初的PC进行存储,如果有帮助的话,
但是我需要一些有关如何测试和调试的详细信息,因为我不是
Windows开发人员以任何方式,对工具等一无所知。
有一套带有win95se2盒的i740,甚至还有Pentim233MMX。
出于会计考虑,这要到2025年才被丢弃。
顺便说一句,胡安,您可以通过电子邮件与我联系,以便获得您的个人地址吗?
不会用任何愚蠢的东西轰炸它。
2016年2月11日,星期四,5:48 AM,胡安·利尼茨基[email protected]
写道:
我仍在等待使用旧芯片组的人做出更好的贡献
检测不支持的硬件。 我没有任何硬件,因为
十年,所以我无能为力。2016年2月10日,星期三,晚上11:30,谢尔盖·拉平(Sergey Lapin) [email protected]
写道:我认为这意味着“欢迎补丁”,我真的怀疑有人会
拒绝
很好的支持
较旧的平台。在2016年2月11日,星期四,凌晨3:41,Juan Linietsky <
[email protected]>
写道:@ Algrin6 https://github.com/Algrin6检查是否没有意义
OpenGL的较早版本支持该功能。 这些GPU具有驱动程序
告诉OpenGL所有东西都受支持,然后再进行某种排序
的
缓慢,死机或崩溃的怪异软件回退。我更愿意假装这样的旧硬件不存在并且具有
堕落
来自地球。-
直接回复此电子邮件或在GitHub上查看
<
https://github.com/godotengine/godot/issues/1162#issuecomment -182658216
。-
直接回复此电子邮件或在GitHub上查看
< https://github.com/godotengine/godot/issues/1162#issuecomment -182676389
。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -182678470。
您不需要再往回走。 只是Intel Series 3/4或i940是
足以使其崩溃...
只需使用mingw / msvc进行编译,然后尝试找出导致崩溃的原因
显示不支持硬件的MessageBox的视图
2016年2月11日,星期四,12:00 AM,谢尔盖·拉平(Sergey Lapin) [email protected]
写道:
我可以使用80年代到2000年初的PC进行存储,如果有帮助的话,
但是我需要一些有关如何测试和调试的详细信息,因为我不是
Windows开发人员以任何方式,对工具等一无所知。
有一套带有win95se2盒的i740,甚至还有Pentim233MMX。
出于会计考虑,这要到2025年才被丢弃。顺便说一句,胡安,您可以通过电子邮件与我联系,以便获得您的个人地址吗?
不会用任何愚蠢的东西轰炸它。2016年2月11日,星期四,5:48 AM,胡安·利尼茨基[email protected]
写道:
我仍在等待使用旧芯片组的人做出更好的贡献
检测不支持的硬件。 我没有任何硬件
以来
十年,所以我无能为力。2016年2月10日,星期三,晚上11:30,谢尔盖·拉平(Sergey Lapin)< [email protected]
写道:
我认为这意味着“欢迎补丁”,我真的怀疑有人会
拒绝
很好的支持
较旧的平台。在2016年2月11日,星期四,凌晨3:41,Juan Linietsky <
[email protected]>
写道:@ Algrin6 https://github.com/Algrin6检查是否没有意义
那
OpenGL的较早版本支持该功能。 这些GPU具有
司机
告诉OpenGL所有东西都受支持,然后再进行某种排序
的
缓慢,死机或崩溃的怪异软件回退。我更愿意假装这样的旧硬件不存在并且具有
堕落
来自地球。-
直接回复此电子邮件或在GitHub上查看
<
https://github.com/godotengine/godot/issues/1162#issuecomment -182658216
。-
直接回复此电子邮件或在GitHub上查看
<
https://github.com/godotengine/godot/issues/1162#issuecomment -182676389
。-
直接回复此电子邮件或在GitHub上查看
< https://github.com/godotengine/godot/issues/1162#issuecomment -182678470
。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -182679526。
用MinGW编译的godot.windows.tools.32.exe。 崩溃。 接下来做什么?
我唯一能想到的就是您需要调试崩溃。 ID
从main()函数开始并打印每个函数名称
它一直运行到找到崩溃的那一个,然后将打印添加到
函数的每一行以查找确切的行
崩溃并报告结果。 另外,如果您使用mingw编译,
您可以使用的崩溃地址
addr2line -e / path / to / debug / exe 0x
在2016年2月11日,星期四,晚上11:46,anatoly techtonik <
[email protected]>写道:
用MinGW编译的godot.windows.tools.32.exe。 崩溃。 接下来做什么?
-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183054269。
实际上,MinGW似乎随附有gdb
:
E:\r\godot\bin>gdb godot.windows.tools.32.exe
GNU gdb (GDB) 7.8.1
...
This GDB was configured as "i686-w64-mingw32".
...
Reading symbols from godot.windows.tools.32.exe...done.
(gdb) run
Starting program: E:\r\godot\bin\godot.windows.tools.32.exe
[New Thread 384.0xca0]
EXEC PATHP??: E:\r\godot\bin\godot.windows.tools.32.exe
EXEC PATHP??: E:\r\godot\bin\godot.windows.tools.32.exe
EXEC PATHP??: E:\r\godot\bin\godot.windows.tools.32.exe
DETECTED MONITORS: 1
Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) bt
#0 0x00000000 in ?? ()
#1 0x004baf5f in RasterizerGLES2::init (this=0xa144dd0) at drivers\gles2\rasterizer_gles2.cpp:10808
#2 0x00db4863 in VisualServerRaster::init (this=0xa1c6a20) at servers\visual\visual_server_raster.cpp:7550
#3 0x00db5cef in VisualServerWrapMT::init (this=0xb3c3e30) at servers\visual\visual_server_wrap_mt.cpp:156
#4 0x004041e6 in OS_Windows::initialize (this=0x22dd20, p_desired=..., p_video_driver=0, p_audio_driver=0) at platform\windows\os_windows.cpp:984
#5 0x004101c6 in Main::setup2 () at main\main.cpp:852
#6 0x0040f504 in Main::setup (execpath=0x8f143a8 "E:\\r\\godot\\bin\\godot.windows.tools.32.exe", argc=0, argv=0x8f1438c, p_second_phase=true)
at main\main.cpp:796
#7 0x00401935 in widechar_main (argc=1, argv=0x273e58) at platform\windows\godot_win.cpp:138
#8 0x00401a53 in main (_argc=1, _argv=0x8f11c98) at platform\windows\godot_win.cpp:172
(gdb)
根据上面的跟踪,它在以下行崩溃:
...
glGenTextures(1, &white_tex);
unsigned char whitetexdata[8*8*3];
for(int i=0;i<8*8*3;i++) {
whitetexdata[i]=255;
}
--> glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,white_tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 8, 8, 0, GL_RGB, GL_UNSIGNED_BYTE,whitetexdata);
glGenerateMipmap(GL_TEXTURE_2D);
...
下一个是什么?
apitrace输出
E:\r\godot\bin>apitrace.exe trace godot.windows.tools.32.exe
apitrace: loaded into E:\r\godot\bin\godot.windows.tools.32.exe
EXEC PATHP??: E:\r\godot\bin\godot.windows.tools.32.exe
EXEC PATHP??: E:\r\godot\bin\godot.windows.tools.32.exe
EXEC PATHP??: E:\r\godot\bin\godot.windows.tools.32.exe
DETECTED MONITORS: 1
apitrace: tracing to E:\r\godot\bin\godot.windows.tools.32.1.trace
apitrace: warning: caught exception 0xc0000005
apitrace: flushing trace due to an exception
E:\r\godot\bin>glretrace.exe godot.windows.tools.32.1.trace -v -d
2 <strong i="8">@0</strong> wglCreateContext(hdc = 0xcd01199a) = 0x10000
3 <strong i="9">@0</strong> wglMakeCurrent(hdc = 0xcd01199a, hglrc = 0x10000) = TRUE
warning: ChoosePixelFormat returned a pixel format supported by the GDI software implementation
4 <strong i="10">@0</strong> glViewport(x = 0, y = 0, width = 1024, height = 600)
4: warning: glGetError(glViewport) = GL_INVALID_ENUM
5 <strong i="11">@0</strong> glScissor(x = 0, y = 0, width = 1024, height = 600)
741 <strong i="12">@0</strong> glEnable(cap = GL_DEPTH_TEST)
742 <strong i="13">@0</strong> glDepthFunc(func = GL_LEQUAL)
743 <strong i="14">@0</strong> glFrontFace(mode = GL_CW)
744 <strong i="15">@0</strong> glClearColor(red = 0, green = 0, blue = 0, alpha = 1)
745 <strong i="16">@0</strong> glClear(mask = GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
746 <strong i="17">@0</strong> glGenTextures(n = 1, textures = &1)
Rendered 0 frames in 0.268717 secs, average of 0 fps
该函数为NULL,因为驱动程序未提供它,这就是为什么
崩溃。
2016年2月12日,01:21,anatoly techtonik [email protected]
写道:
godot.windows.tools.32.1.trace.zip
https://github.com/godotengine/godot/files/127485/godot.windows.tools.32.1.trace.zip-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183174112。
@ punto-您在哪里看到它为NULL?
在回溯的顶部,第0帧,地址为0x00000,这就是它的方式
看起来像当您调用一个为空的函数指针时
2016年2月12日,06:58,anatoly techtonik [email protected]
写道:
@ punto- https://github.com/punto-您在哪里看到它为NULL?
-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183257600。
但我不明白-C ++不是Python,因此当加载godot二进制文件时,系统应加载驱动程序dll并失败,并警告给定的符号不存在。 为什么不发生呢?
还是这意味着Godot实际上实现了动态运行时链接,但是没有警告缺少符号?
运行时链接出现问题,这就是功能存在但可以
有时为空。
2016年2月12日13:41,anatoly techtonik [email protected]
写道:
或这是否意味着Godot实际上实现了动态运行时链接,
但是不警告缺少符号吗?-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183401773。
@punto-这似乎不正确。 这个GLEW可以为这些带有错误而不是段错误的NULL函数注入自己的存根吗?
我不知道..也许..那将是一个好主意
2016年2月12日15:01,anatoly techtonik [email protected]
写道:
@ punto- https://github.com/punto-这似乎不正确。 可以吗
GLEW为这些抱怨的NULL函数注入自己的存根
错误而不是段错误?-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183431329。
C ++不是python,但是python是C :) glew可能会寻找符号
当它们不存在时,它将为函数指针分配NULL。 一世
不记得所有的细节,但这就是它总是崩溃的原因,
gl的任何函数都是NULL。
2016年2月12日13:40,anatoly techtonik [email protected]
写道:
但我不明白-C ++不是Python,因此当godot二进制加载时,
系统应加载驱动程序dll并失败,并警告给定符号为
不存在。 为什么不发生呢?-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183401442。
拥有这些Intel卡之一的人可以尝试这种构建吗?
http://op.godotengine.org:81 / godot.windows.tools.angle.32.exe
2016年2月12日15:45,Ariel Manzur [email protected]写道:
C ++不是python,但是python是C :) glew可能会寻找符号
当它们不存在时,它将为函数指针分配NULL。 一世
不记得所有的细节,但这就是它总是崩溃的原因,
gl的任何函数都是NULL。2016年2月12日13:40,anatoly techtonik [email protected]
写道:但我不明白-C ++不是Python,因此当godot二进制加载时,
系统应加载驱动程序dll并失败,并警告给定符号为
不存在。 为什么不发生呢?-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183401442
。
享有风景32
它是32位.. Windows是否可能只接受64位?
2016年2月14日,01:29,anatoly techtonik [email protected]
写道:
[image:图片]
https://cloud.githubusercontent.com/assets/515889/13031852/90815d62-d2ec-11e5-8b8c-ccbc54af1f48.png-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183819635。
依赖关系遍历器显示它是链接到32位库的64位模块。
它说哪个?
2016年2月14日,01:38,anatoly techtonik [email protected]
写道:
依赖关系遍历器显示它是链接到32位库的64位模块。
-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183820237。
(又为什么它在我的计算机上可以工作?那是32位的CPU吗?)
2016年2月14日,01:52,Ariel Manzur [email protected]写道:
它说哪个?
2016年2月14日,01:38,anatoly techtonik [email protected]
写道:依赖关系遍历器显示它是链接到32位库的64位模块。
-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183820237
。
你可以试试这个吗?
http://op.godotengine.org:81 / godot.windows.opt.tools.angle.64.exe
2016年2月14日,01:54,Ariel Manzur [email protected]写道:
(又为什么它在我的计算机上可以工作?那是32位的CPU吗?)
2016年2月14日,01:52,Ariel Manzur [email protected]写道:
它说哪个?
2016年2月14日,1:38,anatoly techtonik < [email protected]
写道:
依赖关系遍历器显示它是链接到32位库的64位模块。
-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183820237
。
在我的旧笔记本电脑(intel gma x3100)上,它没有崩溃,但是窗口保持灰色,并出现以下错误:
ERROR: ShaderGLES2::get_current_version: CanvasShaderGLES2: Program LINK FAILED:
Failed to create D3D shaders.
At: drivers\gles2\shader_gles2.cpp:544
ERROR: ShaderGLES2::get_current_version: Method/Function Failed, returning: 0
At: drivers\gles2\shader_gles2.cpp:551
ERROR: ShaderGLES2::bind: Condition ' !version ' is true. returned: false
At: drivers\gles2\shader_gles2.cpp:126
ERROR: ShaderGLES2::_get_uniform: Condition ' !version ' is true. returned: -1
At: .\drivers/gles2/shader_gles2.h:354
可以是太旧的着色器版本吗?
但是奇怪的是它尝试使用D3D而不是GLSL ...
在2016年2月14日,星期日,上午9:03,Hondres [email protected]写道:
在我的旧笔记本电脑(intel gma x3100)上,它没有崩溃,但窗口仍然存在
灰色,出现以下错误:错误:ShaderGLES2 :: get_current_version:CanvasShaderGLES2:程序链接失败:
无法创建D3D着色器。
位于:drivers \ gles2 \ shader_gles2。 cpp:544
错误:ShaderGLES2 :: get_current_version:方法/函数失败,返回:0
位于:drivers \ gles2 \ shader_gles2。 cpp:551
错误:ShaderGLES2 :: bind:条件'!version'为true。 返回:false
位于:drivers \ gles2 \ shader_gles2。 cpp:126
错误:ShaderGLES2 :: _ get_uniform:条件'!version'为true。 返回:-1
地点:。\ drivers / gles2 / shader_gles2.h:354-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183827627。
那么,有没有图形使用角度而不直接使用gl的情况?
2016年2月14日,03:25,Sergey Lapin [email protected]写道:
可以是太旧的着色器版本吗?
但是奇怪的是它尝试使用D3D而不是GLSL ...在2016年2月14日,星期日,上午9:03,Hondres [email protected]写道:
在我的旧笔记本电脑(intel gma x3100)上,它没有崩溃,但窗口仍然存在
灰色,出现以下错误:错误:ShaderGLES2 :: get_current_version:CanvasShaderGLES2:程序链接
失败:
无法创建D3D着色器。
位于:drivers \ gles2 \ shader_gles2。 cpp:544
错误:ShaderGLES2 :: get_current_version:方法/函数失败,
返回:0
位于:drivers \ gles2 \ shader_gles2。 cpp:551
错误:ShaderGLES2 :: bind:条件'!version'为true。 返回:false
位于:drivers \ gles2 \ shader_gles2。 cpp:126
错误:ShaderGLES2 :: _ get_uniform:条件'!version'为true。
返回:-1
地点:。\ drivers / gles2 / shader_gles2.h:354-
直接回复此电子邮件或在GitHub上查看
< https://github.com/godotengine/godot/issues/1162#issuecomment -183827627
。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183830014。
@ punto-tools报告godot.windows.tools.angle.32.exe
不是有效的PE可执行文件。 您可以发布不被UPX触及的版本吗?
它的IMAGE_OPTIONAL_HEADER.Magic等于IMAGE_NT_OPTIONAL_HDR64_MAGIC,这是错误的https://msdn.microsoft.com/zh-CN/library/windows/desktop/ms680339%28v=vs.85%29.aspx
好的,试试这个:
http://op.godotengine.org:81 / godot.windows.opt.tools.angle.32.exe
它没有被upx压缩
2016年2月14日,5:10,anatoly techtonik [email protected]
写道:
@ punto- https://github.com/punto-其IMAGE_OPTIONAL_HEADER.Magic是
等于IMAGE_NT_OPTIONAL_HDR64_MAGIC,这是错误的
https://msdn.microsoft.com/zh-CN/library/windows/desktop/ms680339%28v=vs.85%29.aspx-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -183846301。
还是一样的问题。 depends
认为它是64位二进制文件,而不仅仅是depends
:
E:\_IDE_\godot>file godot.windows.opt.tools.angle.32.exe
godot.windows.opt.tools.angle.32.exe: PE32+ executable (console) x86-64, for MS Windows
它是unix实用程序,顺便说一句。
@Hinsbart您可以在出现灰屏和该错误的计算机上尝试http://tof.p1x.in/html5/吗? 据说chrome对渲染器使用相同的代码。
@techtonik也许我遇到那个我使用bits = 32的错误,而实际上却得到了64位二进制文件?
@ punto-我不知道您如何编译它或指的是什么错误。 命令和构建日志可能会澄清它。 如果您准备将更改提交到某个分支,我可以自己编译。
是的,我在
这是https://github.com/punto-/godot/tree/angle
2016年2月15日14:53,anatoly techtonik [email protected]
写道:
@ punto- https://github.com/punto-我不知道如何编译它,或者
错误指的是什么。 命令和构建日志可能会澄清它。 我可以
如果您准备将更改提交到某个分支,请自己进行编译。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -184323695。
用angle = yes编译
2016年2月15日15:25,Ariel Manzur [email protected]写道:
这是https://github.com/punto-/godot/tree/angle
2016年2月15日14:53,anatoly techtonik [email protected]
写道:@ punto- https://github.com/punto-我不知道如何编译
或指的是什么错误。 命令和构建日志可能会澄清它。 一世
如果您准备对某些内容进行更改,可以自己编译
科。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -184323695
。
scons: *** [drivers\theora\theora\x86\mmxencfrag.windows.tools.32.o] Source `drivers\theora\theora\x86\mmxencfrag.c' not found, needed by target `drivers\theora\theora\x86\mmxencfrag.windows.tools.32.o'.
scons: building terminated because of errors.
没有运气。
也尝试theora_opt = no
2016年2月15日18:40,anatoly techtonik [email protected]
写道:
scons:*** [drivers \ theora \ theora \ x86 \ mmxencfrag.windows.tools.32.o]源
drivers\theora\theora\x86\mmxencfrag.c' not found, needed by target
drivers \ theora \ theora \ x86 \ mmxencfrag.windows.tools.32.o'。
scons:建筑因错误而终止。没有运气。
-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -184405417。
In file included from drivers\angle/common/angleutils.h:12:0,
from drivers\angle\common\angleutils.cpp:7:
drivers\angle/common/platform.h:62:28: fatal error: d3d11_1.h: No such file or directory
# include <d3d11_1.h>
^
句号?
嗯,这就是角度,它使用直接3d而不是opengl:p
2016年2月15日18:57,anatoly techtonik [email protected]
写道:
在drivers \ angle / common / angleutils.h:12:0中包含的文件中,
来自drivers \ angle \ common \ angleutils。 cpp:7 :
drivers \ angle / common / platform.h:62:28:致命错误:d3d11_1.h:没有此类文件或目录
#包括
^句号?
-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -184411949。
ANGLE有两个后端-较旧的一个使用DirectX9。我现在正在下载带有DirectX 11标头的更新的MinGW。
上下文是在platform / windows / gl_context_egl_angle.cpp中创建的,
认为那里有一个参数可以选择后端。
问题在于该文件中,可能有一种方法可以检测到哪些参数
最适合系统
2016年2月16日,05:51,anatoly techtonik [email protected]
写道:
ANGLE有两个后端-较旧的一个使用DirectX9。我正在下载较新的
现在具有DirectX 11标头的MinGW。-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -184580963。
较新的gcc 5.3.0有很多错误,例如:
In file included from drivers\angle\common\angleutils.cpp:7:0:
drivers\angle/common/angleutils.h:29:21: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11
NonCopyable() = default;
^
...
我需要将-std=c++11
到C ++标志中。
例如,在以下位置添加此行: https :
env_angle.Append(CCFLAGS=['-std=c++11'])
虽然不确定语法是否适用于MSVC,但是对于MinGW来说应该可以。
也许有关ANGLE的讨论应该移到另一个问题上,让此问题只为“在崩溃前告诉用户其硬件已旧且不受支持”?
是的,我同意
2016年2月17日13:25,RémiVerschelde [email protected]
写道:
也许关于ANGLE的讨论应该移到另一个问题上,
保持这一状态是为了“告诉用户其硬件已经过时,
崩溃前不受支持”?-
直接回复此电子邮件或在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -185282158。
@ Heybye44
为什么Godot可以在Ubuntu上神奇地工作而在Windows上却不能工作?
是! 我也想知道原因。 当我使用Xubuntu进行测试时,它可以工作,但不能在任何Windows版本上使用。
^^
这与操作系统无关,而与驱动程序有关。 通常,由于Direct3D,与Linux相比,GL驱动程序在Windows上被忽略了。 许多较旧的GPU最终都在较新版本的Windows上以最小的GL 1.5实现。
@阿道森
许多较旧的GPU最终都在较新版本的Windows上以最小的GL 1.5实现。
那么何时Godot将支持较早的OpenGL版本? 是否绝对有必要依赖2.0+? 这并不是说不存在向后兼容性,因此功能更强大的设备在渲染早期OpenGL时不会失败。 视觉编辑器本身是否具有围绕GLES2构建的功能,这些功能无法缩小以使用GL1.4代替? 我的意思是,大多数后来的GL功能仍然是用于3D渲染的,从打算用Godot来创建2D游戏的角度来看,这是不必要的。
@WinnerEX不会发生。 与GL 1.4兼容将意味着放弃许多用于2D和3D的有趣功能。 而在另一方面,我们迫不及待地希望获得GL 3+甚至Vulkan的支持。 您可以放心地将Godot视为GL 2.1+引擎; 如果这不是您想要的,那么还有很多其他的引擎可能具有较低的GL限制(例如OGRE 1.9或SDL 2.0)。
这里的主题是,当所需的GL 2.1+功能不可用而不是崩溃时,Godot应该给出适当的错误; 没有意图重写GLES1渲染器。 对于Windows用户,如果通过Direct3D为GL仿真集成了ANGLE,可能会有些希望,但是GLES2渲染器不会降级。
返回主题: @reduz ,我认为通过尝试在没有2D和3D加速的虚拟机中加载Godot,甚至可以在支持GL 2.1的硬件上重现崩溃。 我将尽快尝试进行确认,但这可能有助于找出崩溃的位置,以及如何使用人类可读的错误消息(而不是段错误)正确地进行紧急救援。
我认为,即使尝试在没有2D和3D加速的虚拟机中加载Godot,也可以在支持GL 2.1的硬件上重现崩溃。 我会尽快尝试确认
好吧,看起来像使用VirtualBox 5一样,这并不容易,因为它现在具有不错的GL驱动程序,该驱动程序最多支持OpenGL 3.0 xD。
opengl 3.0更易于检测,因为您必须请求特殊的conext
(我跳)
在2016年7月25日星期一12:28 PM,RémiVerschelde [email protected]
写道:
我认为即使在GL 2.1上也有可能重现崩溃
通过尝试在没有2D的虚拟机中加载Godot来实现功能强大的硬件
和3D加速。 我会尽快尝试确认好吧,看起来像使用VirtualBox 5一样,这并不容易,因为它现在已经很不错了
GL驱动程序,最多支持OpenGL 3.0 xD。-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/godotengine/godot/issues/1162#issuecomment -234987968,
或使线程静音
https://github.com/notifications/unsubscribe-auth/AF-Z2_MK5iQA0RxLwv0FHu6po8ucVE8kks5qZNYlgaJpZM4DQoN3
。
我刚刚在旧的上网本上使用Windows下不兼容的糟糕英特尔igp进行了测试。
在rasterizer_gles2.cpp
10791行中,我在RasterizerGLES2::init()
添加了以下几行:
if (!glewIsSupported("GL_VERSION_2_1")) {
print_line(String("Your graphics card is crappy. It does not support Opengl 2.1. Now Godot is going to crash."));
}
Godot仍然崩溃,但是在晕倒之前它会在控制台中显示此错误消息。
我不知道如何告诉Godot取消光栅化器的初始化(RasterizerGLES2 :: init()不会返回true / false,就像它别无选择,只能成功或崩溃),我也不知道如何告诉Godot退出正确地。
即使此兼容性测试可能不是100%可靠的,它也至少可以减少静默崩溃的次数,并显示一个小的系统对话框,警告用户即将崩溃以及原因。
很棒的发现@SuperUserNameMan。 我试了一下,并确认它可以工作(至少在我的测试中,由于我的GPU支持,因此我检查了if (glewIsSupported("GL_VERSION_2_1"))
)。 我们可以使用OS::alert()
显示一个阻止消息框。
如您所述,唯一缺少的部分(也是最难的部分)是让Godot正确退出。 我快速浏览了一下,但是使Godot在其OS初始化过程中退出很困难。
以下是概念证明的区别:
diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp
index 4cd97a7..910d5bf 100644
--- a/drivers/gles2/rasterizer_gles2.cpp
+++ b/drivers/gles2/rasterizer_gles2.cpp
@@ -10788,8 +10788,14 @@ void RasterizerGLES2::init() {
if (OS::get_singleton()->is_stdout_verbose()) {
print_line(String("GLES2: Using GLEW ") + (const char*) glewGetString(GLEW_VERSION));
}
-#endif
+ // Check for GL 2.1 compatibility, if not bail out
+ if (!glewIsSupported("GL_VERSION_2_1")) {
+ ERR_PRINT("Your system's graphic drivers seem not to support OpenGL 2.1 / GLES 2.0, sorry :(\nTry a drivers update, buy a new GPU or move to Linux; Godot will now exit.");
+ OS::get_singleton()->alert("Your system's graphic drivers seem not to support OpenGL 2.1 / GLES 2.0, sorry :(", "Insufficient OpenGL / GLES drivers");
+ // Now DIE! Or at least stop without segfault and memory leaks :)
+ }
+#endif
为了能够测试支持GL 2.1的人员,只需在if测试中删除!
。
它在X11上生成此(阻塞)消息框:
与@reduz讨论
要在Linux下测试而不更改代码和重新编译,我认为您可以将环境变量MESA_GL_VERSION_OVERRIDE设置为2.0: http :
IIRC,这也是如何迫使MESA允许列入黑名单的GPU与Godot一起使用。
最有用的评论
我刚刚在旧的上网本上使用Windows下不兼容的糟糕英特尔igp进行了测试。
在
rasterizer_gles2.cpp
10791行中,我在RasterizerGLES2::init()
添加了以下几行:Godot仍然崩溃,但是在晕倒之前它会在控制台中显示此错误消息。
我不知道如何告诉Godot取消光栅化器的初始化(RasterizerGLES2 :: init()不会返回true / false,就像它别无选择,只能成功或崩溃),我也不知道如何告诉Godot退出正确地。
即使此兼容性测试可能不是100%可靠的,它也至少可以减少静默崩溃的次数,并显示一个小的系统对话框,警告用户即将崩溃以及原因。