Ну что же. Продолжаю страдать с миграцией на Core Profile (дежурно замечу, что с миграцией на Вулкан страдания можно смело умножать на 10 или даже на 100). Прикол в том что тривиальнейшие вещи превращаются в какое-то законченное мозгоёбство. Ну вот помните функцию ещё из халфы - FillRGBA? Цветную полосочку нарисовать или квадратег там. Ну чёт такое.
Что может быть проще? В Core Profile этого нельзя в принципе. Это должна быть полноценная геометрия в VBO и с шейдером. А шейдеры у меня без материалов не рисуются в принципе. Тут конечно следует оговориться.
Да, я мог бы конечно нарисовать какие-то вещи прямо внутри движка, захардкодить, даже мог бы шейдеры встроить прямо в бинарник, но это идёт вразрез с моей концепцией. Не нужно мне такого, вот оно что.
Так что - в общем порядке. Грёбанный дефолтный материал со встроенной текстурой *white и погнали. Тварство.
Дядя Миша писал: Как я тебе переведу POINTSIZE в функцию от масштаба разрешения? Оно же нелинейное.
Ну тоесть ты делаешь шрифт с поинтсайзом допустим 10 на маленьком разрешении и растягиваешь его? Я правильно понимаю? Поинтсайз даёт картинку символа всегда в фиксированом разрешении?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Ну тоесть ты делаешь шрифт с поинтсайзом допустим 10 на маленьком разрешении и растягиваешь его?
Я растягиваю не просто шрифт, а всю композцию на текущий момент.
Поэтому меню и мыльное. Меню было создано в начале пандемии, с 2020-м году, с тех пор я его и не касался. Ну вот, через непрямое воздействие - из-за перехода на Core Profile, у меня наконец-то дошли руки до меню.
А с поинтсайзом не так всё очевидно. Какой поинтсайз использовать для разных разрешений? Можно ли его как-то вычислить?
Примечания:
Точность данных: Физический размер экрана, возвращаемый GetDeviceCaps, может быть неточным на некоторых мониторах, особенно если драйверы не предоставляют корректную информацию.
Многомониторные системы: Этот код работает только для основного монитора. Для работы с несколькими мониторами используйте EnumDisplayMonitors и GetMonitorInfo.
Высокий DPI: На системах с высоким DPI (например, Retina-экраны) может потребоваться учет масштабирования Windows. Используйте SetProcessDPIAware или SetProcessDpiAwareness для корректной работы.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Crystallize писал: В том смысле что он не будет унаследован от класса модели.
До позавчерашнего дня он и не был унаследован от класса модели.
А теперь унаследован
Добавлено 10-03-2025 в 10:34:
Мне осталось проработать концепцию динамических текстур в материалах.
Для самого движка это нужно для обновления графиков, а для пользователей - ну например чтобы сделать игру про раскраску или рисовалку.
Что-то такое вообщем. Привязка к шрифтам этот процесс упрощает, т.к. там уже есть все необходимые методы - ректанглы для заливки новых данных, ну итд.
Дядя Миша
Стоит ли расчитывать на разметку для UI пока ты им занялся? У тебя же уже есть свой аналог json, можно его использовать для разметки.
Цитата:
Дядя Миша писал:
Мне осталось проработать концепцию динамических текстур в материалах.
Для самого движка это нужно для обновления графиков, а для пользователей - ну например чтобы сделать игру про раскраску или рисовалку.
Что-то такое вообщем. Привязка к шрифтам этот процесс упрощает, т.к. там уже есть все необходимые методы - ректанглы для заливки новых данных, ну итд.
О это дело хорошее.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Стоит ли расчитывать на разметку для UI пока ты им занялся?
Вот прямщас - не стоит. Но поскольку я занялся, я буду там наводить порядок, улучшать ситуацию и переписывать меню. Чтобы нормально было.
Я это мыло в меню сделал в начале 2020-го года, когда буквально не знал за что хвататься - ни своих форматов уровней, моделей, рендер не написан, ни-че-го. Да и скриптового языка тогда уже не было. Теперь же, когда всё это появилось, я возращаюсь к старым проблемам и делаю рефакторинг.
К тому же это всё равно необходимо для правильной работы Core Profile, то есть два в одном получается. Ну и функционал расширяется, теперь можно будет использовать шейдеры в 2D.
Дядя Миша писал: Для шрифтов это требование довольно легко соблюсти - достаточно унаследовать класс шрифта от класса модели. Технически шрифт сам по себе и есть модель - он тоже использует юниформ-контейнер для хранения данных и всё такое. Тут проблем нет. А мелкие шероховатости для такой имплементации элементарно решаются в процессе отладки.
То есть система сразу заработает как надо, а если что-то вдруг будет не так, исправится после очередного бета-тестирования.
Совсем иная ситуация с рендерингом отдельно стоящих картинок.
Картинка очевидно не может быть сущностью, типа модели. Уже хотя бы потому что в материале этих картинок может быть сколько угодно загружено. Ну то есть, логическая нестыковка.
Поэтому я принял следующее решение: любые картинки будут загружаться как шрифты. То есть с тем же именем, создавать для себя уникальный материал ну и всё такое. И представлены будут как шрифт с одной буквой ну или с одной иконкой, если хотите.
К тому же, поскольку там целый набор взаимодействия с ректанглами, к этой сущности куда проще и удобнее прикрутить динамические текстуры с обновляемыми пикселями. То есть концепция достаточно стройная и надёжная. Но не без подводных камней, о которых я расскажу немного позже.
Я кстати тогда тебе и говорил, что движок по идее может работать с абстрактным массивом пикселей. А вот как туда их загружать это можно вынести и в пользовательскую часть. Чтобы каждый мог прикрутить свои форматы. Но ты помню сказал что архитектура под такое не заточена.
Цитата:
Дядя Миша писал: К тому же это всё равно необходимо для правильной работы Core Profile, то есть два в одном получается. Ну и функционал расширяется, теперь можно будет использовать шейдеры в 2D.
Это правильно. Шейдеры в 2д нужны, особенно с прозрачностью и альфой всякой. Щас мода вернулась ещё из аэро 7ки делать размыливающий фон шейдер
Цитата:
Дядя Миша писал: Вот прямщас - не стоит. Но поскольку я занялся, я буду там наводить порядок, улучшать ситуацию и переписывать меню. Чтобы нормально было.
Это хорошо. Язык разметки нужен, т.к. верстать в коде UI это полный ужас.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Чтобы каждый мог прикрутить свои форматы
Да откуда ты понабрался этой пакости?
Что значит "прикрутить свои форматы" ? А может ты тогда заодно прикрутишь вообще всё, и операционную систему впридачу, и компьютер сам соберёшь и кремний из песка тоже добудешь, я правильно понимаю?
Цитата:
FiEctro писал: Язык разметки нужен, т.к. верстать в коде UI это полный ужас.
Ну для классических халфовских-кваковских менюшек он не нужен.
Пусть уж остаются какие есть. А вот для нового абстрактного меню, я безусловно такой язык сделаю.
Итак, я полностью переработал концепцию движковых шрифтов, изменил их формат, снял некоторые ограничения, добавил мета-информацию и заставил всё это рисоваться с использованием системы материалов и кастомных шейдеров. Отдельно хочу отметить тот факт, что мне даже удалось сохранить нетронутой отрисовку в движке, что на первый взгляд было довольно непросто сделать. То есть движок рендерит ряд вещей, которые используются для отладки, а так же пресловутый FillRGBA. И ещё кадры видео. Разумеется мне совершенно не хотелось завязывать это внутри движка с системой материалов. Ибо материалы, как вы понимаете - они пользовательские. То есть у нас бы наружу торчали материалы, которые грузит и использует сам движок, а не пользователи.
Кто-то конечно скажет - да ну ерунда, такое у всех есть, но мне эта ситуация не нравилась изначально. Что движок что-то там такое грузит.
В то же время никакой хард-код внутри движка мне тоже делать совершенно не хотелось и я не стал его делать. На данный момент движок грузит ровно один уникальный материал под названием *fixedpipeline который используется для рендеринга всяких вещей, не нуждающихся в специализированном материале. То есть, проще говоря, я сэмулировал FFP в ограниченном объеме, прямо внутри движка. В принципе система получилась прозрачная и пользователям она мешать не должна. Так что с 2D отрисовкой слава богу всё получилось и устаканилось.
Следующий шаг - нарисовать через шейдеры и материалы отладочную геометрию. Но возможно что-то из нее придётся и выбросить за ненадобностью, будем посмотреть.
Добавлено 12-03-2025 в 18:32:
Вообще, в дальнейшем, если мне понадобится подгрузить дополнительные материалы из движка (ещё один или два), то я так и буду использовать звезду в качестве индикатора системности.
Добавлено 12-03-2025 в 18:48:
После того как я переведу отладочную отрисовку на VAO + шейдеры можно будет наконец-то подвести итоги по вышенаписанному и двигаться дальше.
Добавлено 12-03-2025 в 19:43:
Провёл ревизию отладочной визуализации. Насчитал 7 (СЕМЬ) не связанных друг с другом систем. Охренеть конечно. Буду сокращать, выбрасывать ненужное, нужное объединять с другим. В идеале конечно бы оставить одну, но к сожалению не получится. Впрочем поглядим.
Дядя Миша писал: азумеется мне совершенно не хотелось завязывать это внутри движка с системой материалов. Ибо материалы, как вы понимаете - они пользовательские. То есть у нас бы наружу торчали материалы, которые грузит и использует сам движок, а не пользователи.
Кто-то конечно скажет - да ну ерунда, такое у всех есть, но мне эта ситуация не нравилась изначально. Что движок что-то там такое грузит.
Но свои то материалы и шейдеры для 2д можно делать?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Потихоньку осваиваю появившиеся возможности для двухмерного рендеринга. Добавил разные материалы, кстати появилась возможность менять цвета в превьюшках модели игрока через палитру. Top и Bottom color.
Раньше это работало только для самих моделек, т.е. в 3D.
Сделал предварительную ревизию отладочной отрисовки - выбросил поддержкку .pts файлов (это где описана утечка на уровне с помощью точек). Устаревшая штука, .lin файлы гораздо лучше с этим справляются.
Так же выбросил всю визуализацию коллизии. Толку от нее всегда было немного. В силу устройства коллижен детектора в XashNT, единственное место, где что-то могло пойти не так - это стадия децимации-симплификации треугольников. Ну и за пять лет я выловил единственный такой случай - в квейке на e1m2 перед дверью, закрытой серебрянным ключом внезапно вырос лишний треугольник. Сделал чуть более строгие правила для децимации - баг прошёл. А что же касается мест, где игрок внезапно проваливается под уровень из-за того, что он как бы подныривает под плоскость, то помочь в их обнаружении данная визуализация всё равно не могла. Но при этом потребляла довольно много памяти на хранение и время при загрузке на построение. Да и код, который для этого использовался вообщем-то больше был нигде неприменим.