Godot: должен проверить возможности графического процессора и изящно выйти

Созданный на 10 янв. 2015  ·  87Комментарии  ·  Источник: godotengine/godot

Я думаю, что Godot должен каким-то образом проверить, может ли система обрабатывать GLES2 или нет, и вместо прерывания или сбоя предоставить пользователю значимое сообщение об ошибке о том, что их драйверы не поддерживают GLES2. «В настоящее время ваш компьютер не поддерживает GLES2, который требуется для запуска этой программы. Требуются новые драйверы или обновление оборудования». Что-то в этом роде.

Я не уверен, что для этого нужно, но должен быть какой-то способ сделать это в коде.

Это специально для пользователей Windows, у которых, кажется, всегда плохие графические процессоры и плохие драйверы, но в идеале проверки должны быть на всех платформах.

bug enhancement core rendering

Самый полезный комментарий

Я только что сделал тест на своем старом нетбуке с несовместимой дрянной Intel igp под Windows.

В строке 10791 rasterizer_gles2.cpp в 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 () не возвращает истину / ложь, это как если бы у него нет выбора, кроме успеха или сбоя), я также не знаю, как сказать Godot, чтобы выйти должным образом.

Даже если этот тест на совместимость может быть ненадежным на 100%, он может, по крайней мере, уменьшить количество тихих сбоев и отобразить небольшое системное диалоговое окно, предупреждающее пользователя о том, что произойдет сбой и почему.

Все 87 Комментарий

+1

+10

+1

я написал этот код в context_gl_win.cpp, но он обычно вылетает из-за
какая-то нереализованная функция в windows из-за хренового драйвера
Хотел бы я точно узнать, почему

В субботу, 17 января 2015 г., в 14:56 MSC [email protected] написал:

+1

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/okamstudio/godot/issues/1162#issuecomment -70376758.

Установите для этого высокий приоритет, так как это будет очень полезная функция. Мы получаем множество сообщений о сбоях из-за людей, имеющих очень старые Intel IGP или еще много чего, не поддерживающие GLES2.

Хорошо, думаю, я сослался на достаточно сбоев, чтобы подчеркнуть мои вышеупомянутые «тонны», я перестану копаться в архивах: D

+1 Почему Godot волшебным образом работает на Ubuntu, а не на Windows?

Есть идеи, как это можно реализовать @reduz?

Я написал этот код в context_gl_win.cpp, но он обычно вылетает из-за нереализованной функции в Windows

Почему бы тогда не использовать динамическое связывание? Будет очевидно, какая функция отсутствует. Я считаю, что https://github.com/p3/regal делает это.

Я уже обнаружил и попытался показать сообщение, но, похоже,
все еще не работает.
Поскольку у меня нет неподдерживаемого оборудования, я не понимаю, почему оно дает сбой и
таким образом, не могу это исправить.
PR приветствуются.

Вторник, 2 февраля 2016 г., 12:11, анатолий техтоник < [email protected]

написал:

я написал этот код в context_gl_win.cpp, но он обычно вылетает из-за
какая-то нереализованная функция в windows

Почему бы тогда не использовать динамическое связывание? Будет очевидно, какая функция
отсутствует. Я считаю, что https://github.com/p3/regal делает это.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -178624438.

Если кто-то со старым графическим процессором может попытаться запустить Godot через gdb в Linux, это может быть весьма полезно. Информация об отладке "сигнатуры проблемы" Windows кажется бессмысленной: /

Я вообще не занимаюсь C ++. Только Python, поэтому я пользователь. Скажите мне, что бежать, и я могу получить информацию.

Скажите мне, что бежать, и я могу получить информацию.

Я понятия не имею, как запускать что-то через отладчик в Windows, но я думаю, что это нетривиально для людей, у которых нет большого опыта компиляции чего-либо в Windows. Вот почему я предложил кому-нибудь попробовать отладку с помощью GDB в Linux, так как им очень легко пользоваться:

$ 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.

Бета 2.0 не запускается на моем Linux, но, похоже, не имеет отношения к видеокарте - # 3557

Хехе, вам повезло, что вы столкнулись со всеми известными проблемами, которые есть у нас в крайних случаях :)

Полагаю, у меня просто есть «талантливый специалист» и учетная запись GitHub. знак равно

Не знаю, как такие старые видеокарты вылетают при запуске, но, например, на NVIDIA 6800 GT,
он вылетает только на нескольких проектах. Итак, есть вывод cmd об ошибках фреймбуфера для всех проектов и модулей Godot. Это можно полностью исправить, отключив параметр "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 Думаю, причина в том, что Linux, в отличие от Windows, использует программную реализацию 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 Мб памяти! А теперь у меня 3 ГБ + 3 ГГц, и я не могу запустить игровой движок. Как так?

2 Мб памяти! А теперь у меня 3 ГБ + 3 ГГц, и я не могу запустить игровой движок. Как так?

Потому что мы в 2016 году, и этот движок Bioware очень старый? И этот тест был разработан, чтобы проверить, достаточно ли мощный графический драйвер, поэтому, вероятно, тест был _работающим_, начиная с DirectX 3.01a, но, возможно, предлагал "обновить ваше оборудование или драйверы", если у вас был ниже DirectX 7 или что-то в этом роде. И движок Bioware работал исключительно на MS Windows <= XP, а Godot работает на десятке платформ ...

Теперь, когда вы, кажется, точно знаете, что нам нужно делать, сделайте запрос на перенос.

@techtonik Основная проблема заключается в том, что ни у одного из основных разработчиков нет старого оборудования для проверки проблемы. Таким образом, вам нужно либо предоставить отладочную информацию, чтобы определить причину проблемы, либо исправить ее самостоятельно (в этом прелесть открытого исходного кода).

Baldur's Gate не запрограммирован в универсальном игровом движке 2D / 3D.
Он специально запрограммирован на C, ассемблер x86, вероятно, Watcom
компилятор, защищенный режим и использует базовую стековую машину для написания сценариев. Также
не стесняйтесь делать все настраиваемые блиттинговые коды самостоятельно.

ВС, 7 февраля 2016 г., в 12:36, Джордж Маркес [email protected]
написал:

@techtonik https://github.com/techtonik основная проблема в этом
что ни у одного из основных разработчиков нет старого оборудования для проверки проблемы. Так
вам необходимо либо предоставить информацию об отладке, чтобы определить причину проблемы, либо
исправить это самостоятельно (в этом прелесть открытого кода).

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -181034018.

@reduz может ли Godot создать "таблицу совместимости платформ" для кода, созданного движком (или используемого редактором), в котором перечислены все функции, которые в настоящее время использует игра (блиттинг, частицы, 3D-объекты, ...)?

Если это невозможно в настоящий момент, возможно ли это хотя бы технически?

Вариант использования валидации - это возможность создать минимальную игру (тест), которую можно запустить на любом устройстве копирования, и измерить производительность.

@reduz А как насчет https://github.com/godotengine/godot/issues/1162#issuecomment -180466018?

@ Algrin6 Бессмысленно проверять, поддерживается ли это в более старых версиях OpenGL. У этих графических процессоров есть драйверы, которые сообщают OpenGL, что все поддерживается, а затем переходят в какой-то странный программный откат, который работает медленно, зависает или дает сбой.

Я предпочитаю делать вид, что такого старого оборудования не существует и оно упало с планеты.

Я думаю, это означает, что "патчи приветствуются". Я действительно сомневаюсь, что кто-то отвергнет
хорошо сделанная поддержка
старая платформа.

11 февраля 2016 г., в 3:41, Хуан Линецкий [email protected]
написал:

@ Algrin6 https://github.com/Algrin6 Бессмысленно проверять, что ли
материал поддерживается в более старых версиях OpenGL. У этих графических процессоров есть драйверы
которые сообщают OpenGL, что все поддерживается, а затем перейти к какой-то
причудливый откат программного обеспечения, который работает медленно, зависает или дает сбой.

Я предпочитаю делать вид, что такого старого оборудования не существует и оно упало
с планеты.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -182658216.

Я все еще жду, когда кто-нибудь со старым чипсетом внесет свой вклад лучше
обнаружение неподдерживаемого оборудования. У меня нет этого оборудования с тех пор, как
десять лет, так что я ничего не могу сделать.

10 февраля 2016 г., среда, 23:30, Сергей Лапин [email protected]
написал:

Я думаю, это означает, что "патчи приветствуются". Я действительно сомневаюсь, что кто-то отвергнет
хорошо сделанная поддержка
старая платформа.

11 февраля 2016 г., в 3:41, Хуан Линецкий [email protected]
написал:

@ Algrin6 https://github.com/Algrin6 Бессмысленно проверять, что ли
материал поддерживается в более старых версиях OpenGL. У этих графических процессоров есть драйверы
которые сообщают OpenGL, что все поддерживается, а затем перейти к какой-то
причудливый откат программного обеспечения, который работает медленно, зависает или дает сбой.

Я предпочитаю делать вид, что такого старого оборудования не существует и оно упало
с планеты.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
< https://github.com/godotengine/godot/issues/1162#issuecomment -182658216
.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -182676389.

У меня есть доступ к магазину с ПК с 80-х до начала 2000-х, если это поможет,
но мне нужны некоторые подробности о том, как тестировать и отлаживать, поскольку я не
Windows-разработчик никак и не имеет идей по инструментам и т. д.
Есть набор i740 с коробками win95se2, даже Pentim233MMX.
Из-за бухгалтерского учета это не будет выброшено до 2025 года.

кстати, Хуан, не могли бы вы связаться со мной по электронной почте, чтобы у меня был ваш личный адрес?
Не буду забрасывать его чем-нибудь глупым.

Чт, 11 февраля 2016 г., в 5:48, Хуан Линецкий [email protected]
написал:

Я все еще жду, когда кто-нибудь со старым чипсетом внесет свой вклад лучше
обнаружение неподдерживаемого оборудования. У меня нет этого оборудования с тех пор, как
десять лет, так что я ничего не могу сделать.

10 февраля 2016 г., среда, 23:30, Сергей Лапин [email protected]
написал:

Я думаю, это означает, что "патчи приветствуются". Я действительно сомневаюсь, что кто-нибудь
отвергать
хорошо сделанная поддержка
старая платформа.

11 февраля 2016 г., 3:41, Хуан Линецкий <
[email protected]>
написал:

@ Algrin6 https://github.com/Algrin6 Бессмысленно проверять, что ли
материал поддерживается в более старых версиях OpenGL. У этих графических процессоров есть драйверы
которые сообщают 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, что оборудование не поддерживается

11 февраля 2016 г. в 12:00 Сергей Лапин [email protected]
написал:

У меня есть доступ к магазину с ПК с 80-х до начала 2000-х, если это поможет,
но мне нужны некоторые подробности о том, как тестировать и отлаживать, поскольку я не
Windows-разработчик никак и не имеет идей по инструментам и т. д.
Есть набор i740 с коробками win95se2, даже Pentim233MMX.
Из-за бухгалтерского учета это не будет выброшено до 2025 года.

кстати, Хуан, не могли бы вы связаться со мной по электронной почте, чтобы у меня был ваш личный адрес?
Не буду забрасывать его чем-нибудь глупым.

Чт, 11 февраля 2016 г., в 5:48, Хуан Линецкий [email protected]

написал:

Я все еще жду, когда кто-нибудь со старым чипсетом внесет свой вклад лучше
обнаружение неподдерживаемого оборудования. У меня нет такого оборудования
поскольку
десять лет, так что я ничего не могу сделать.

10 февраля 2016 г., среда, 23:30, Сергей Лапин < [email protected]

написал:

Я думаю, это означает, что "патчи приветствуются". Я действительно сомневаюсь, что кто-нибудь
отвергать
хорошо сделанная поддержка
старая платформа.

11 февраля 2016 г., 3:41, Хуан Линецкий <
[email protected]>
написал:

@ Algrin6 https://github.com/Algrin6 Бессмысленно проверять,
тот
материал поддерживается в более старых версиях OpenGL. Эти графические процессоры имеют
водители
которые сообщают 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.

Скомпилирован godot.windows.tools.32.exe с помощью MinGW. Сбои. Что делать дальше?

Единственное, о чем я могу думать, это то, что вам нужно отладить сбой. Я бы
начните с функции main () и распечатайте имя каждой функции
он работает до тех пор, пока не будет найден тот, в котором произошел сбой, затем просто добавьте печать в
каждую строку функции, чтобы найти точную строку, в которой она
вылетает и сообщает о результатах. Также, если скомпилирован mingw, когда вы получите
адрес аварии, который вы можете использовать
addr2line -e / путь / к / отладке / exe 0x

чтобы узнать номер строки.
Эта информация будет очень полезна,
но это не значит, что отладка здесь закончена, но это будет большой
шаг вперед.

11 февраля 2016 г. в 23:46 анатолий техтоник <
[email protected]> написал:

Скомпилирован godot.windows.tools.32.exe с помощью MinGW. Сбои. Что делать дальше?

-
Ответьте на это письмо напрямую или просмотрите его на 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);
...

https://github.com/godotengine/godot/blame/f6a8a0f51358e42295cc5a049074a59466161ad8/drivers/gles2/rasterizer_gles2.cpp#L10808

Ну и что дальше?

выход 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, потому что драйвер не предоставляет ее, поэтому она
вылетает.

12 февраля 2016 г. в 01:21 анатолий 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, вот как это
выглядит так, когда вы вызываете указатель на функцию, который имеет значение NULL

12 февраля 2016 г. в 06:58 анатолий techtonik [email protected]
написал:

@ punto- https://github.com/punto- где вы видите, что это NULL?

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -183257600.

Но я не понимаю - C ++ - это не Python, поэтому при загрузке двоичного файла godot система должна загрузить dll драйвера и выйти из строя с предупреждением о том, что данный символ отсутствует. Почему этого не происходит?

Или это означает, что Godot фактически реализует динамическое связывание во время выполнения, но не предупреждает об отсутствующих символах?

glew связывает время выполнения, поэтому функция существует, но может
иногда быть нулевым ..

12 февраля 2016 года в 13:41 анатолий techtonik [email protected]
написал:

Или это означает, что Godot действительно реализует динамическое связывание во время выполнения,
но не предупреждает о пропущенных символах?

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -183401773.

@ punto - это не кажется правильным. Может ли этот GLEW вводить ваши собственные заглушки для этих NULL-функций, которые жалуются на ошибку, а не на отказ?

Я не знаю .. может быть .. это было бы хорошей идеей

12 февраля 2016 года в 15:01 анатолий techtonik [email protected]
написал:

@ punto- https://github.com/punto- это кажется неправильным. Может это
GLEW вставляет свои собственные заглушки для этих NULL-функций, которые жалуются на
ошибка вместо segfaulting?

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -183431329.

C ++ - это не python, но python - это C :) glew, вероятно, ищет символы
а когда их нет, он присваивает NULL указателю функции. я
не помню всех деталей, но вот как всегда вылетает,
любая функция из gl имеет значение NULL ..

12 февраля 2016 г. в 13:40 анатолий 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

12 февраля 2016 года в 15:45 Ариэль Манзур [email protected] написал:

C ++ - это не python, но python - это C :) glew, вероятно, ищет символы
а когда их нет, он присваивает NULL указателю функции. я
не помню всех деталей, но вот как всегда вылетает,
любая функция из gl имеет значение NULL ..

12 февраля 2016 г. в 13:40 анатолий techtonik [email protected]
написал:

Но я не понимаю - C ++ - это не Python, поэтому, когда загружается двоичный файл godot,
система должна загрузить драйвер dll и выйти из строя с предупреждением, что данный символ
нет. Почему этого не происходит?

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -183401442
.

image

вид 32

Это 32 бита .. может ли Windows принимать только 64 бита?

14 февраля 2016 г. в 01:29 анатолий techtonik [email protected]
написал:

[image: image]
https://cloud.githubusercontent.com/assets/515889/13031852/90815d62-d2ec-11e5-8b8c-ccbc54af1f48.png

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -183819635.

Обходчики зависимостей показывают, что это 64-битный модуль, связанный с 32-битными библиотеками.

Он говорит, какой именно?

14 февраля 2016 г. в 01:38 анатолий techtonik [email protected]
написал:

Обходчики зависимостей показывают, что это 64-битный модуль, связанный с 32-битными библиотеками.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -183820237.

(также почему он работает на моем компьютере? это 32-битный процессор?)

14 февраля 2016 года в 01:52 Ариэль Манзур [email protected] написал:

Он говорит, какой именно?

14 февраля 2016 г. в 01:38 анатолий techtonik [email protected]
написал:

Обходчики зависимостей показывают, что это 64-битный модуль, связанный с 32-битными библиотеками.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -183820237
.

Вы можете попробовать это?

http://op.godotengine.org : 81 / godot.windows.opt.tools.angle.64.exe

14 февраля 2016 года в 01:54 Ариэль Манзур [email protected] написал:

(также почему он работает на моем компьютере? это 32-битный процессор?)

14 февраля 2016 года в 01:52 Ариэль Манзур [email protected] написал:

Он говорит, какой именно?

14 февраля 2016 г. в 01:38 анатолий техтоник < [email protected]

написал:

Обходчики зависимостей показывают, что это 64-битный модуль, связанный с 32-битными библиотеками.

-
Ответьте на это письмо напрямую или просмотрите его на 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

Может это слишком старая версия шейдеров?
Но странно, что вместо GLSL пробует D3D ...

14 февраля 2016 г. в 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: условие '! Версия' истинно. возвращено: ложь
По адресу: drivers \ gles2 \ shader_gles2. CPP: 126
ОШИБКА: ShaderGLES2 :: _ get_uniform: условие '! Version' истинно. возвращено: -1
По адресу:. \ Drivers / gles2 / shader_gles2.h: 354

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -183827627.

Так есть ли когда-нибудь случай, когда графика работает с использованием угла, а не напрямую?

14 февраля 2016 года в 03:25 Сергей Лапин [email protected] написал:

Может это слишком старая версия шейдеров?
Но странно, что вместо GLSL пробует D3D ...

14 февраля 2016 г. в 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: условие '! Версия' истинно. возвращено: ложь
По адресу: drivers \ gles2 \ shader_gles2. CPP: 126
ОШИБКА: ShaderGLES2 :: _ get_uniform: условие '! Version' истинно.
возвращено: -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/en-us/library/windows/desktop/ms680339%28v=vs.85%29.aspx

хорошо, попробуйте это:

http://op.godotengine.org : 81 / godot.windows.opt.tools.angle.32.exe

он не сжимается upx

14 февраля 2016 в 05:10 анатолий techtonik [email protected]
написал:

@ punto- https://github.com/punto- его IMAGE_OPTIONAL_HEADER.Magic
равно IMAGE_NT_OPTIONAL_HDR64_MAGIC, что неверно
https://msdn.microsoft.com/en-us/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/ на компьютере, на котором отображается серый экран и эта ошибка? предположительно хром использует тот же код для своего средства визуализации ..

@techtonik, может быть, у меня эта ошибка, когда я использую bit = 32, и я действительно получаю 64-битный двоичный файл?

@ punto - я не знаю, как вы его скомпилируете и о какой ошибке идет речь. Журналы команд и сборок могут прояснить это. Я могу скомпилировать его сам, если вы готовы зафиксировать свои изменения в какой-нибудь ветке.

да я в этом

вот это https://github.com/punto-/godot/tree/angle

15 февраля 2016 в 14:53 анатолий techtonik [email protected]
написал:

@ punto- https://github.com/punto- Я не знаю, как это скомпилировать или
о какой ошибке идет речь. Журналы команд и сборок могут прояснить это. Я могу
скомпилируйте его самостоятельно, если вы готовы внести свои изменения в какую-либо ветку.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -184323695.

Скомпилировать с углом = да

15 февраля 2016 года в 15:25 Ариэль Манзур [email protected] написал:

вот это https://github.com/punto-/godot/tree/angle

15 февраля 2016 в 14:53 анатолий 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

15 февраля 2016 г. в 18:40 анатолий techtonik [email protected]
написал:

scons: *** [драйверы \ 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>
                            ^

Полная остановка?

Ну в том-то и дело, что вместо opengl используется прямой 3d: p

15 февраля 2016 г. в 18:57 анатолий techtonik [email protected]
написал:

В файле, который находится в папке drivers \ angle / common / angleutils.h: 12: 0,
из драйверов \ 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 два бэкенда - в старом используется DirectX 9. Я загружаю новый MinGW с заголовками DirectX 11 прямо сейчас.

контекст создается в платформе / windows / gl_context_egl_angle.cpp, я
думаю, там был параметр для выбора серверной части .. Я думаю, что
проблема в этом файле, может быть способ определить, какие параметры
лучший для системы ..

16 февраля 2016 в 05:51 анатолий techtonik [email protected]
написал:

У ANGLE два бэкенда - старый использует DirectX 9. Я скачиваю более новый.
MinGW с заголовками DirectX 11 прямо сейчас.

-
Ответьте на это письмо напрямую или просмотрите его на 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://github.com/punto-/godot/blob/angle/drivers/angle/SCsub#L276

env_angle.Append(CCFLAGS=['-std=c++11'])

Не уверен, что синтаксис будет работать для MSVC, но с MinGW все должно быть в порядке.

drivers\angle\libANGLE\renderer\d3d\d3d11\win32\NativeWindow.cpp:15:19: fatal error:
dcomp.h: No such file or directory
compilation terminated.

Нужно дождаться нового релиза MinGW .

Может быть, обсуждение ANGLE следует вынести в отдельный вопрос, оставив его для того, чтобы «сообщить пользователю, что его оборудование старое и не поддерживается до сбоя»?

Ага, я согласен

17 февраля 2016 г. в 13:25 Реми Вершельде [email protected]
написал:

Может быть, обсуждение УГОЛОВ стоит вынести в отдельную тему,
сохраняя это, чтобы "сообщить пользователю, что его оборудование старое и
не поддерживается до сбоя "?

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/1162#issuecomment -185282158.

3634 - это УГЛ. # 3694 - PR для получения дополнительной информации при загрузке двигателя.

@ Heybye44

Почему Godot волшебным образом работает в Ubuntu, но не в Windows?

Да! Я тоже хотел бы знать причину. Когда я тестировал Xubuntu, он работает, но не работает ни с одной из версий Windows.

^^

Дело не в ОС, дело в драйверах. В целом, драйверы GL игнорируются в Windows по сравнению с Linux благодаря Direct3D. Многие устаревшие графические процессоры имеют минимальную реализацию GL 1.5 в новых версиях Windows.

@adolson

Многие устаревшие графические процессоры имеют минимальную реализацию GL 1.5 в новых версиях Windows.

Итак, когда в Godot будут поддерживаться более ранние версии OpenGL? Есть ли абсолютная необходимость полагаться на 2.0+? Это не значит, что обратной совместимости не существует, поэтому более способное устройство не потерпит неудачу при рендеринге более ранней итерации OpenGL. Существуют ли особенности самого визуального редактора, построенные на основе GLES2, которые нельзя масштабировать для использования вместо него GL1.4? Я имею в виду, что большинство более поздних функций GL в любом случае предназначены для 3D-рендеринга, что излишне, если исходить из перспективы создания 2D-игры с Godot.

@WinnerEX Этого не произойдет. Быть совместимым с GL 1.4 означало бы отказаться от многих интересных функций, которые используются как для 2D, так и для 3D; а на другом конце спектра есть люди, которые больше не могут ждать поддержки GL 3+ или даже Vulkan. Можно смело рассматривать Godot как движок GL 2.1+; если это не то, что вы хотите, существует множество других движков, которые могут иметь более низкие ограничения GL (например, OGRE 1.9 или SDL 2.0).

Речь идет о том, что Godot должен выдавать правильную ошибку, когда требуемые функции GL 2.1+ недоступны, вместо сбоя; нет никакого намерения переписывать рендерер GLES1. Для пользователей Windows может быть некоторая надежда, если ANGLE будет интегрирован для эмуляции GL через Direct3D, но не произойдет понижения версии рендерера GLES2.

Возвращаясь к теме: @reduz , я подумал, что можно было бы воспроизвести сбой даже на оборудовании с поддержкой GL 2.1, попытавшись загрузить Godot на виртуальной машине без 2D и 3D ускорения. Я попробую как можно скорее подтвердить, но это может помочь выяснить, где происходит сбой, и как правильно выручить с помощью удобочитаемого сообщения об ошибке вместо segfaulting.

Я подумал, что можно было бы воспроизвести сбой даже на оборудовании с поддержкой GL 2.1, попытавшись загрузить Godot на виртуальной машине без 2D и 3D ускорения. Я попробую как можно скорее, чтобы подтвердить

Хорошо, похоже, с VirtualBox 5 это непросто, поскольку теперь у него есть достойный драйвер GL, который поддерживает до OpenGL 3.0 xD.

opengl 3.0 легче обнаружить, потому что вам нужно запросить специальный conext
(Я надеялся)

В понедельник, 25 июля 2016 г., в 12:28, Реми Вершельде [email protected]
написал:

Думал, что можно будет воспроизвести вылет даже на GL 2.1
способное оборудование, пытаясь загрузить Godot в виртуальную машину без 2D
и 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
.

Я только что сделал тест на своем старом нетбуке с несовместимой дрянной Intel igp под Windows.

В строке 10791 rasterizer_gles2.cpp в 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 () не возвращает истину / ложь, это как если бы у него нет выбора, кроме успеха или сбоя), я также не знаю, как сказать Godot, чтобы выйти должным образом.

Даже если этот тест на совместимость может быть ненадежным на 100%, он может, по крайней мере, уменьшить количество тихих сбоев и отобразить небольшое системное диалоговое окно, предупреждающее пользователя о том, что произойдет сбой и почему.

Замечательная находка @SuperUserNameMan. Я немного поигрался с ним и подтверждаю, что он работает (по крайней мере, в моих тестах, где я проверял if (glewIsSupported("GL_VERSION_2_1")) поскольку мой GPU поддерживает его). Мы можем использовать OS::alert() для отображения окна сообщения о блокировке.

Как вы упомянули, единственная недостающая часть (и самая сложная) - это позволить Годо выйти должным образом. Я бегло посмотрел, но это выходит за рамки моих навыков, чтобы заставить Godot выйти в середине инициализации ОС.

Вот отличия от доказательства концепции:

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:
spectacle w30011

После обсуждения с @reduz выяснилось , что мой вышеупомянутый патч может быть достаточно хорош в качестве первого шага; так как предупреждение ОС блокируется, мы можем сообщить людям о проблеме и предупредить их, что Godot выйдет из строя :) Конечно, лучше было бы выйти чисто, но это промежуточное решение уже неплохо.

для тестирования под Linux без изменения кода и перекомпиляции, я думаю, вы можете установить для переменной среды MESA_GL_VERSION_OVERRIDE значение 2.0: http://www.mesa3d.org/envvars.html

IIRC, это также то, как заставить MESA разрешить графическому процессору из черного списка работать с Godot.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги