И ещё одна гонка от меня.

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

И ещё одна гонка от меня.

Сообщение Mikle » 31.12.2020 (Чт) 13:32

Очередной проект на очередной конкурс.
Изначально запланирована гоночная игра в стиле ранних NFS, в принципе - так и вышло.
Впервые моя игра достаточно требовательна к железу - чтобы играть без тормозов, желательно что-нибудь вроде GT450 или аналога.
Так же впервые достаточно большой объём - 70 Мб.

Вчера был дедлайн, вот релиз: https://yadi.sk/d/8Fl5kCql3YLFTw
Исходник: https://yadi.sk/d/KpAyqaVhCq9u3w

Первое место взял.
Что осталось недоделано: небольшой баг с тенями, таблица рекордов. Найду силы - доделаю.
Написано на VB6 с использованием порта DX9 от The trick.
Несколько скриншотов:
Изображение
Изображение
Изображение
Последний раз редактировалось Mikle 05.01.2021 (Вт) 12:28, всего редактировалось 1 раз.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: И ещё одна гонка от меня.

Сообщение The trick » 31.12.2020 (Чт) 17:32

Поздравляю! Следил за разработкой с самого начала.
UA6527P

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: И ещё одна гонка от меня.

Сообщение NashRus » 02.01.2021 (Сб) 21:55

оба молодцы.
делаете и сделываете.
наверное, самое важное умение программиста, особенно в своих проектах, не только делать, но и сделать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 03.01.2021 (Вс) 10:52

Ох, не завидую я программистам 3D-графики. Пока не проверишь на парке из сотен разных машин, будешь обречён на провал.

После нажатия кнопки [Play]:
AoS_6
---------------------------
Run-time error '-2005530516 (8876086c)':
Automation error
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 03.01.2021 (Вс) 11:22

Поотлаживал чуть-чуть, отладка показывает, что сбой происходит при вызове IDirect3DDevice9::CreateTexture, и при этом передаются следующие параметры:
Код: Выделить всё
Width := 0x200
Height := 0x200
Levels := 0
Usage := D3DUSAGE_AUTOGENMIPMAP | D3DUSAGE_RENDERTARGET
Format := D3DFMT_L8
Pool := D3DPOOL_DEFAULT
ppTexture := <ref>
pSharedHandle := 0
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 03.01.2021 (Вс) 12:15

То есть твоя видеокарта не может создать чёрно-белую текстуру (D3DFMT_L8), что очень маловероятно, либо не может её использовать для рендера, по крайней мере с генерацией мипуровней.
Вот описание этой ошибки:
The Windows Runtime Error -2005530516 failed to create D3D device (0x8876086C) appears when DirectX is unable to detect a supported graphics card.

Из Intel карт я проверял на HD Graphics 4000, там это работает. Не помню, у тебя 3000 или 4000.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 03.01.2021 (Вс) 12:39

Mikle писал(а):Не помню, у тебя 3000 или 4000.

Intel i7-2700K = Intel® HD Graphics 3000

Mikle писал(а):не может создать сёрно-белую текстуру (D3DFMT_L8), что очень маловероятно, либо не может её использовать для рендера,

Ну ошибка же при создании, а не при рендеринге.

Я пробовал менять D3DFMT_L8 на D3DFMT_R8G8B8 — всё равно падает. Так же как и смена значения аргумента Usage перед вызовом ничего не меняет.

И вообще, у меня большая просьба. Если ты не хочешь делиться исходниками, ставь при компиляции вот эту галочку и распространяй PDB-шку вместе с EXE:
debug_info.png

Будет гораздо проще находить корень проблем в подобных ситуациях (а ситуация повторяется из раза в раз). Я даже смогу показывать тебе всю обратную трассировку цепочки вызовов, приведшей к сбою. Кстати, на основе PDB можно сгенерировать DBG и встроить его прямо в EXE (если тебя беспокоит необходимость распространения лишних файлов).

И кстати, ещё один вопрос The Trick-у. Я уже давно мечтал сделать кирпич, который бы модифицировал поведение VB6 так, чтобы для необработанных ошибок выводилась ещё и трассировка вызовов в сообщении об ошибке (а не только код и описание). Мне приснилось, или ты уже реализовал такую фишку в каком-то из своих проектов?
У вас нет доступа для просмотра вложений в этом сообщении.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 03.01.2021 (Вс) 12:58

А вот и рецепт успеха:
aos6patched.png

Поправил D3DFMT_L8 на D3DFMT_A8R8G8B8 в двух местах — машинка заработала. Вроде бы даже каких-то жутких последствий в виде серобуромалиновых объектов не появилось.
У вас нет доступа для просмотра вложений в этом сообщении.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 03.01.2021 (Вс) 13:22

Хакер писал(а):Ну ошибка же при создании, а не при рендеринге.

При создании указываются флаги, как я собираюсь текстуру в дальнейшем использовать. Именно с флагами D3DUSAGE_AUTOGENMIPMAP | D3DUSAGE_RENDERTARGET создать нельзя.
Буду иметь ввиду, что i3000 этого не может.
Хакер писал(а):Поправил D3DFMT_L8 на D3DFMT_A8R8G8B8 в двух местах — машинка заработала. Вроде бы даже каких-то жутких последствий в виде серобуромалиновых объектов не появилось.

Последствий и не должно быть, единственное последствие - лишний расход памяти. Можно задавать формат D3DFMT_R5G6B5, этот формат поддерживается везде, а перерасход памяти будет меньше.
Хакер писал(а):Если ты не хочешь делиться исходниками, ставь при компиляции вот эту галочку и распространяй PDB-шку вместе с EXE:

Никаких проблем с распространением исходников нет.
Вот текущее состояние исходников: https://yadi.sk/d/yrdnVUmeqvlKaA
Тут уже немного переделано, поэтому нужно сменить папку с шейдерами: https://yadi.sk/d/uGdQu3Sn8XmnLA

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 03.01.2021 (Вс) 13:30

Mikle писал(а):Никаких проблем с распространением исходников нет.

Ну в целом, возьми пожалуйста подсказку на вооружение. Кто-то, к примеру, может не иметь установленного VB6, но запустит твой EXE-шник и поймает какой-нибудь баг. Гораздо проще будет разобраться, откуда он проистекает, имея отладочные символы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: И ещё одна гонка от меня.

Сообщение The trick » 03.01.2021 (Вс) 13:57

Хакер писал(а):И кстати, ещё один вопрос The Trick-у. Я уже давно мечтал сделать кирпич, который бы модифицировал поведение VB6 так, чтобы для необработанных ошибок выводилась ещё и трассировка вызовов в сообщении об ошибке (а не только код и описание). Мне приснилось, или ты уже реализовал такую фишку в каком-то из своих проектов?

Нет, я такого не делал.
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 03.01.2021 (Вс) 14:16

The trick писал(а):
Хакер писал(а):И кстати, ещё один вопрос The Trick-у. Я уже давно мечтал сделать кирпич, который бы модифицировал поведение VB6 так, чтобы для необработанных ошибок выводилась ещё и трассировка вызовов в сообщении об ошибке (а не только код и описание). Мне приснилось, или ты уже реализовал такую фишку в каком-то из своих проектов?

Нет, я такого не делал.

Mikle, тебе бы была полезна такая штука? Вместо «Run-time error 6 // Overflow» видеть трассировку с указанием того, в какой процедуре и на каком месте произошла ошибка, и какова была цепочка вызовов?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 03.01.2021 (Вс) 14:42

Хакер писал(а):видеть трассировку с указанием того, в какой процедуре и на каком месте произошла ошибка

При отладке из среды процедуру и место и так видно, то есть ты спрашиваешь про отладку EXE? Я этим, честно говоря, никогда не занимался.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 03.01.2021 (Вс) 15:32

Mikle писал(а):При отладке из среды процедуру и место и так видно, то есть ты спрашиваешь про отладку EXE? Я этим, честно говоря, никогда не занимался.

Конечно же речь не про отоадку в среде. Ты даёшь кому-то EXE, и человек жалуется, например, на
Run-time error 6
Overflow


При этом у тебя никакой ошибки нет, и ты даже понятия не имеешь, в каком месте проекта она возникает. Человек тоже кроме скриншота с ошибкой типа «Overflow» или «Automation error» никаких доп. сведений предоставить не может. И у тебя никаких догадок, где оно может сбоить, и воспроизвести ошибку у себя не получается. И дальнейший путь решения проблем не ясен.

А тут на скришоте вместе с сообщением ошибки будет обратная трассировка, где и названия процедур, и номера строк, и названия модулей.

Разве ты не видел, как тот же Unreal Tournament выводит ошибки?
ut99_backtrace.png

ut99_assertion.jpg
У вас нет доступа для просмотра вложений в этом сообщении.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 03.01.2021 (Вс) 16:59

Хакер писал(а):Разве ты не видел, как тот же Unreal Tournament выводит ошибки?

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

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: И ещё одна гонка от меня.

Сообщение The trick » 03.01.2021 (Вс) 17:09

Хакер, а вообще реально добавить поддержку раскрывающихся макросов по типу __FUNCTION__ в VB6? Чтобы они именно в константы разворачивались? Я не рыл в эту сторону, сначала хотел спросить у более знающего человека.
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 03.01.2021 (Вс) 20:00

Mikle писал(а):Я считал, что такие вещи встраиваются прямо в код игры разработчиками, что это не какой-то универсальный инструмент.

Ну так вообще любые вещи встраиваются рямо в код проекта разработчиками. Не так ли? И мой гипотетический кирпич пришлось бы встраивать в код проекта тоже.

Если ты имеешь в виду то, что построение цепочки вызовов может быть реализовано путём того, что при входе в каждую процедуру в эту цепочку добавляется элемент, соответствующий процедуре, а при выходе из процедуры удаляется — то да, можно в том числе и так. Но это ведь чрезвычайно муторный и недружелюбный к программисту способ, ведь он требует учитывать все точки выхода из процедура, ибо можно пропустить такую, и в цепочке останется неактуальный элемент. Хотя программисту C++ будет легче, ведь у неё есть объекты с автоматическим контролем времени жизни.

Но вместо того, чтобы составлять цепочку вызовов «прижизненно» и тратить на это какие-то ресурсы, можно пойти кардинально другим путём: составить цепочку только в момент возникновения проблем, проанализировав стек вызов и сопоставив адресам человеко-понятные имена функций/модулей.

The trick писал(а):Хакер, а вообще реально добавить поддержку раскрывающихся макросов по типу __FUNCTION__ в VB6?

Тут два аспекта, которые меня волнуют. Технический и идеологический.

Начнём с технического. Сделать это можно разными путями, и весь вопрос в том, на какие меры у нас есть условный мандат. Если у нас есть доступ к исходникам VBA6.DLL, это одна ситуация — тут у нас карт-бланш на все действия, но идеологическая проблема никуда не уходит. Если у нас есть добро на то, чтобы сделать задуманной путём глубокой модификации VBA6.DLL и последующего распространения модифицированной библиотеки — это другая ситуация. Если нам не дают добро модифицировать VBA6.DLL, а предлагается сделать Add-in, который должен уметь добавлять новый функционал к любому билду VB6 — это третья, самая неблагоприятная и самая худшая ситуация. Поскольку первая ситуация близка к неосуществимой, рассмотрим вторую и третью.

В рамках второго и третьего подхода опять же есть большая вилка вариантов того, как можно реализовать задуманной. Можно залезть очень глубоко и на очень глубоком уровне добавить поддержку этих волшебных констант. Можно не лезть глубоко, а добиваться желаемого путём подмены кода на время компиляции и возврата всего на место на время отображения. Второй подход проще, но и в нём есть целый ворох проблем: перестаёт работать преимущество JIT-компиляции (с каждой добавленной строкой инвалидируется всё, что относится к далее расположенным процедурам), не понятно, как быть с Watch Window, некорректно будет работать поддержка Quick Info и подсказок со значением при наведении. Лучше бы конечно дождаться моей статьи о PCR- и BSCR-представлении кода в цикл VB Internals. Проще было бы объяснять.

Теперь об идеологической составляющей. Я считаю, что делать такого уровня нововведения в VB6 можно только тогда, когда ты можешь назвать себя лидером реформаторского движения в отношении VB. Если твоё нововведение может стать стандартом если не де-юре, то хотя бы де-факто. В децентрализованной тусовке VB-программистов получится так, что каждый начнёт клепать свои нововведения, несовместимые с чужими нововведениями, в итоге будет куча вариантов примерно одинаковых новшеств, взаимонесовместимых друг с другом. Это окончательно добьёт и так неважно поживающий VB.

Я также очень плохо отношусь к любым примочкам к VB, за счёт которых проекты и исходники становятся принципиально некомпилируемыми на чистом VB6 без примочек. Либо нужно как-то выпускать VB 6.1 (VB 6.5, VB, 6Ext — как назвать вопрос другого порядка) и заявлять, что новые проекты и исходники не будут обратно совместимыми со старыми IDE, либо нужно доработки с обратносовместимым подходом, чтобы код, написанный для VB с примочками не превращался в некомпилируемую катастрофу для IDE без примочек. Даже когда я 13 лет назад делал FNDLL, я придерживался этого принципа — если FNDLL не установлен, проект заточенный под FNDLL нормально и безболезненно компилировался, просто у него экспортируемых функций. И то, успешно скомпилированный таким образом бинарник можно было пост-обработь пост-обработчиком (мимикрирующим под линкер в штатной установке FNDLL), который добавит экспорты.

Другой идеологический аспект — это правильный для VB6 стиль. Уверен, что __FUNCTION__ таким не является, хотя и понимаю, что это был скорее всего пример по аналогии с C/C++. __FUNCTION__ не пройдёт хотя бы просто потому, что такой токен не пройдёт через парсер VB6, он синтаксически не совместим с правилами разбора VB-кода. Если брать что-то типа FUNCTION, то рискуем получить коллизию с чужим кодом, где такая константа живёт на общих правах. Самое «трушное» с точки зрения VB было бы сделать Debug.LineNumber и Debug.ModuleName. Но это требует очень глубокого вмешательства.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: И ещё одна гонка от меня.

Сообщение The trick » 03.01.2021 (Вс) 23:02

Хакер писал(а):Другой идеологический аспект — это правильный для VB6 стиль. Уверен, что __FUNCTION__ таким не является, хотя и понимаю, что это был скорее всего пример по аналогии с C/C++. __FUNCTION__ не пройдёт хотя бы просто потому, что такой токен не пройдёт через парсер VB6, он синтаксически не совместим с правилами разбора VB-кода. Если брать что-то типа FUNCTION, то рискуем получить коллизию с чужим кодом, где такая константа живёт на общих правах. Самое «трушное» с точки зрения VB было бы сделать Debug.LineNumber и Debug.ModuleName. Но это требует очень глубокого вмешательства.

Да именно такое я подразумевал. Обратную совместимость можно сохранить использовав константы условной компиляции, которые в новой версии (если такая будет) будут равны TRUE. Для IDE я знаю подход который теоретически будет работать - это использование связки EbGetCallstackCount/EbGetCallstackFunction, и обернуть это в визов какого-нибудь DebugEx.CurrentFunctionName. Хотелось бы иметь возможность в скомпилированном виде иметь именно встраивание константы, посему спрошу, есть ли какое-либо событие (либо вызов какой-либо функции который можно отследить как-то) при котором связывание будет идти при каждом обращении к сущности в коде? Т.е. к примеру если я вызываю из нескольких разных функций какую-либо одну и ту же сущность то компилятор внутри vba6.dll должен резолвить каждый раз меня уведомляя, а я бы подменял значение.

У меня есть мысли как это можно сделать с моим текущим опытом и знанием некоторой внутренней структуры vb6, но не слишком красиво. Во время компиляции перед вызовом TipStartMakeExe добавляется скрытый модуль который имеет имя DebugEx с публичной функцией CurrentFunctionName (либо сделать через tlb - неважно, главное чтобы из функции был вызов внешней функции в COFF файле). Далее уже анализом COFF файлов изменяем внешнюю ссылку на другую с функцией возвращающей имя процедуры. Можно сделать еще лучше и вместо функции оставить публичную переменную, и в коде уже создать отдельную таблицу в которой будет уже без вызова функции, а напрямую обращение к константе.
UA6527P

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 05.01.2021 (Вт) 12:29

Залил в п.1 полный исходник.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 05.01.2021 (Вт) 16:46

Mikle писал(а):Залил в п.1 полный исходник.

Так интересен ли тебе кирпич для формирования бектрейсов при необработанных ошибках?

Кстати, с чекбоксом MSAA тоже не падает с ошибкой.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 05.01.2021 (Вт) 16:57

Да, интересен. Я как раз вчера победил в игре ещё одну ошибку, которая проявлялась только на самых новых nVidia карточках. Пришлось отправлять человеку исходник и координировать действия, благо VB6 у него уже был. Полагаю, такой кирпич помог бы.
Кстати, в п.1 уже исправленные версии.
Про чекбокс не понял, а что, без него ошибка, что ли?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 05.01.2021 (Вт) 17:49

Mikle писал(а):Про чекбокс не понял, а что, без него ошибка, что ли?

У меня опечатка в посте была.
Падает в штатном исполнении без патча форматы текстуры с L8 на ARGB8. С патчем не падает, но если поставить MSAA — то падает, что логично, потому что видимо MSAA тоже не поддерживается.

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

Mikle писал(а):Последствий и не должно быть, единственное последствие - лишний расход памяти.

Разве это не влияет на формат сырых данных при доступе к буферу, как это происходит в случае с разными FVF для вертексного буфера?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 05.01.2021 (Вт) 17:57

Хакер писал(а):Было бы хорошо, если бы ты определял, какие фишки поддерживаются видеоадаптером и блокировал их в меню настроек

Да, доступность MSAA я мог бы определить, а вот факт поддержки рендера в L8 текстуру - разве что тестовым рендером и отловом ошибки.
Хакер писал(а):Разве это не влияет на формат сырых данных при доступе к буферу

У текстур всё более единообразно, чем у вертексов. При чтении текселя текстуры в шейдере всегда получается float ARGB значение, работаем в шейдере только с ними. При работе с R5G6B5 получается ниже точность, 6 бит против 8-ми (использую G канал), но это в данном применении не заметно.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 05.01.2021 (Вт) 18:16

Mikle писал(а):а вот факт поддержки рендера в L8 текстуру - разве что тестовым рендером и отловом ошибки.

Но падает же не при рендере, а при создании объекта-текстуры. Кроме того, я пытаюсь понять, почему другие 3D-приложения и игры разных эпох (UT99, HL2, NFS:UG2) работают без проблем. Им не нужен такой тип текстуры? Или нужен, но есть откат к использованию более конвенциональных типов?

Неужели нет никакой структуры, которая перечисляет возможности видеоадаптера в плане поддержки фич? Я уже 16 лет не программировал под D3D, но по-моему что-то такое было.

Mikle писал(а):У текстур всё более единообразно, чем у вертексов. При чтении текселя текстуры в шейдере всегда получается float ARGB значение, работаем в шейдере только с ними. При работе с R5G6B5 получается ниже точность, 6 бит против 8-ми (использую G канал), но это в данном применении не заметно.

Ну я не про шейдер, я про генерацию или правку текстур процедурно, путём манипулирования данными текстуры через буфер. Метод Lock — и пошли писать данные.

И я не ведь нигде не говорил про R5G6B5, я использовал D3DFMT_A8R8G8B8 при патчинге.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 05.01.2021 (Вт) 19:49

Хакер писал(а):Но падает же не при рендере, а при создании объекта-текстуры.

Да, я неправильно написал, нужно было "тестовым созданием".
Хакер писал(а):Кроме того, я пытаюсь понять, почему другие 3D-приложения и игры разных эпох (UT99, HL2, NFS:UG2) работают без проблем.

Падают и ещё как. Ну и их создатели имеют гораздо больший доступ к оборудованию для тестирования.
Хакер писал(а):Неужели нет никакой структуры, которая перечисляет возможности видеоадаптера в плане поддержки фич?

Есть "Caps", но там не всё. Хотя, может я плохо искал.
Хакер писал(а):Ну я не про шейдер, я про генерацию или правку текстур процедурно, путём манипулирования данными текстуры через буфер. Метод Lock — и пошли писать данные

Данная текстура не правится процедурно, поэтому для неё формат не важен в этом смысле.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 05.01.2021 (Вт) 20:28

Mikle писал(а):Падают и ещё как. Ну и их создатели имеют гораздо больший доступ к оборудованию для тестирования.

Но на момент создания приведённых для примера приложений таких адаптеров и в помине не было. Нельзя было на них обкатать. Может даже и режимов и фич таких не было, и их просто никто не использовал. В таком случае возникает вопрос, почему ты не можешь без них обойтись, если флагманы смогли.

Кстати, использование COM-интерфейсов у D3D позволяет с лёгкостью создавать объекты-обёртки, имплементирующие тот же интерфейс, и внутри этих объектов-обёрток реализоввать логику обратной совместимости, при этом основной код игры никак не будет страдать за счёт добавления этой обратной совместимости.

Правда Анатолию надо сделать вторую TLB-шку, где все интерфейсы продекларировать так, чтобы нигде не было As Any и других мутных типов, которые не позволяют имплементировать метод с такими типами у аргментов и возвратов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 05.01.2021 (Вт) 22:20

Хакер писал(а):почему ты не можешь без них обойтись, если флагманы смогли

А откуда мне знать, пока не наткнусь на ошибку? Можно, конечно, использовать только A8R8G8B8 и R5G6B5, это есть везде, и доступно для рендера, начиная с Riva TNT. Но так движения вперёд не будет. Я, например, в одной игре использовал R32F формат, а без него ту фичу, что я делал, никак не осуществить. А тут L8 конечно жизненно не необходим, и я даже знал, его задействуя, что рискую, поэтому на Gamedev.ru проводил опрос-тестирование, демки многие скачивали - никто не жаловался. В конце концов - это просто проект на конкурс, все судьи успели протестировать запускаемость до релиза.
Кроме L8, в коде, вроде бы, таких рисковых мест нет, но могут ещё оставаться просто мои ошибки.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 05.01.2021 (Вт) 22:44

Mikle писал(а):то рискую, поэтому на Gamedev.ru проводил опрос-тестирование, демки многие скачивали - никто не жаловался.

Очень странно. Неужели на таком большом ресурсе ни у кого нет такого процессора как у меня? Допустим, сейчас его нельзя назвать новым, но в 2012 он был флагманским, DX9 уже был, по идее должна быть куча народа, кто тогда писал под DX9 и тестировал на таком процессоре. Негативный опыт касательно этой константы должен был накопиться.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: И ещё одна гонка от меня.

Сообщение Mikle » 06.01.2021 (Ср) 8:24

Хакер писал(а):Неужели на таком большом ресурсе ни у кого нет такого процессора как у меня?

Наверняка есть и послабее, процессор ещё хороший, даже отличный. А вот его видеокарту, видимо, за видеокарту уже никто в геймдеве не считает, имея такой процессор, пользуются дискретным видео. Ну и не все же на ресурсе тестировали, а только те, кто в теме.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: И ещё одна гонка от меня.

Сообщение Хакер » 06.01.2021 (Ср) 15:27

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

Ну, в области создания музыки есть такое понятие — shit-контроль. Аранжировку специально слушают на убогой акустике, чтобы даже на ней всё звучало сносно. Неужели в гемдеве такого нет? Я не говорю, что ты должен был в рамках небольшой конкурсной работы делать шит-контроль, я о том, что другие люди в более масштабных проектах должны были его делать и грабли с форматом L8 по-идее должны быть у людей на слуху.

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

Хотелось бы получить немного украшательств в игре: какие-нибудь птички в небе и сбиваемые дорожные знаки стали бы большим плюсом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

След.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList