ПрограммированиеФорумГрафика

Растровый шрифт

Страницы: 1 2 3 4 5 Следующая »
#0
21:47, 12 апр 2020

Всем привет!

Сделал растровый шрифт для GL'я, но у него куча недостатов:
1. Надо постоянно пересоздавать меш текста и заливать его в буфер.
2. Размер буфера всегда ограничен максимальной длиной строки.
3. Текст динамически изменяется, что приводит к постоянному обновлению буфера.

+ Показать

В общем вопрос: можно ли рисовать/генерить треугольники в геометрическом шейдере?

... и еще куча вопросов ...

Или там тоже буфер и ограничения?
И вообще, как рисовать шрифты без ограничений по скорости?
Есть ли свободная библиотека или заголовки FreeType для Delphi?

У меня получается, что строка из 256 символов в треугольниках жрет 2,95 Мб вместе с цветом.
Если куча объекто, то видеопамять быстро кончится.

#1
22:20, 12 апр 2020

eDmk

> строка из 256 символов в треугольниках жрет 2,95 Мб
Ты где-то в 1000 раз ошибся, а так норм.

#2
22:30, 12 апр 2020

Ghost2
Без аргументов ваши подписи не интересны.

#3
22:36, 12 апр 2020

eDmk

Открой калькулятор и посчитай. 256 символов * 4 вершины * (3 координаты + 2 текстурных координаты + цвет). Если у тебя получится почти 3 мегабайта, то извини, кибернетика тут бессильна.

#4
22:43, 12 апр 2020

Ghost2
Вы не так считаете. Там размер символа 55x55 пикселей.
Это 3025 quad'ов на символ или 6050 точек на символ, т.к. квад состоит из 2-х треугольников.
6050 x 256 = 1548800 точек * 16 байт (vec4) = 24780800 или 23,6 Мб.
Да в меньшую сторону ошибся.

#5
22:51, 12 апр 2020

eDmk

> Вы не так считаете
Я как раз правильно считаю. С позиций здравого смысла.

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

#6
23:14, 12 апр 2020

Ghost2
> А у тебя получился майнкрафт из глифов
Ну да - получился меш. Вот я и спрашиваю опыта местных. Может кто делал как иначе.

#7
23:15, 12 апр 2020

Ghost2
> А у тебя получился майнкрафт из глифов.
Я плакаль :))))
eDmk
> Это 3025 quad'ов на символ
Это мега фейл! Один символ - один квад.
eDmk
> Может кто делал как иначе.
Ты смотрел уже как это стандартно делается?
Learn OpenGL. Урок 7.2 – Отрисовка текста
eDmk
> В общем вопрос: можно ли рисовать/генерить треугольники в геометрическом
> шейдере?
Можно и на ComputeShader. Скажем в альфа канал записываешь код символа. Позиция вершины будет позицией символа. Получиться вершина на символ.

#8
23:56, 12 апр 2020

eDmk

> Вот я и спрашиваю опыта местных
Опыт подсказывает, что нужно создать текстуру с символами (фритайп не нужен, достаточно стандартной WinAPI функции GetGlyphOutline), запоминая где-то их текстурные координаты и расположение относительно baseline. А потом рисовать квады, на которые натянуты кусочки подготовленной выше текстуры, по одному символу на квад.

#9
23:59, 12 апр 2020

foxes
> Это мега фейл!
Это работает! Правда тормозека сплошная :)

#10
0:09, 13 апр 2020

eDmk
> У меня получается, что строка из 256 символов в треугольниках жрет 2,95 Мб
> вместе с цветом
Сделай 2 треугольника (квад) и прицепи к ним картинку с текстом.

#11
0:15, 13 апр 2020

Imgui просто векторный шрифт перегоняется в геометрию и формирует строку из симвов в вершинном буфере. Но то также, дело вкуса

#12
0:41, 13 апр 2020

Deamon
> Imgui
у ТС GL, а Imgui требуется для работы DX (https://gamedev.ru/flame/forum/?id=250288&page=9&m=5160701#m120)

#13
2:35, 13 апр 2020

Можно использовать SDF для векторного шрифта и шейдер невероятно простой (с аутлайном и тенями), 1 квад на символ. (а лучше треугольник с discard)
https://habr.com/ru/post/215905

#14
3:13, 13 апр 2020

Хмм.. А зачем самому то делать? Я взял GDI+, вывожу им текст в битмап, а потом его копирую в текстуру. Там кода получается несколько десятков строк всего.  При этом можно использовать любые шрифты винды, масштабировать их, накладывать на картинку и т.п.  Единственный минус - генерацию текста нужно делать в отдельном треде, поскольку GDI делает все довольно медленно, так что бы не тормозила основной рендер. Но зато никакого геморроя.

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.