Добрый день, столкнулся с еще одной странной проблемой, вывожу bitmap шрифты аналогично тому, как я делаю это для D3D9, но получаю странный результат
Как видно с картинки низ шрифта обрезается (иногда и боковина тоже, но гораздо реже), на картинке я навел на пиксель 564 по высоте, как видно из истории в него ничего не записано, хотя если судить по вершинам - геометрия там есть
Вот такой код для семплера
samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; samplerDesc.MipLODBias = 0.0f; samplerDesc.MaxAnisotropy = 4; samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; samplerDesc.BorderColor[0] = 0; samplerDesc.BorderColor[1] = 0; samplerDesc.BorderColor[2] = 0; samplerDesc.BorderColor[3] = 0; samplerDesc.MinLOD = 0; samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;
Подкиньте идей, что это может быть.
Текстуры не кратные двойке? Хотя уже вижу что не кратные, в общем скорее всего если ты грузил ее средствами d3d то ее размер был автоматом дополнен до кратности 2 и текстурные координаты нужно задать с учетом нового размера.
Aroch
> Текстуры не кратные двойке?
Кратные, dds 32 bit
Osiris
у тебя высота 768, она достраивается до 1024
Aroch
> у тебя высота 768, она достраивается до 1024
Ты имеешь ввиду backbuffer RT?
Osiris
> Ты имеешь ввиду backbuffer RT?
если это к backbuffer'u относилось то пофиг. Но проблема всё равно в неверных текстурных координатах.
Aroch
> Но проблема всё равно в неверных текстурных координатах.
Они верные, сейчас перепроверю еще раз
Вершинный шейдер почему-то не стартует в отладчике, но входные вершинные координаты верные
Osiris
Предлагаешь верить на слово? Ошибка в один пиксель запросто может дать то что у тебя на выходе.
Как выглядит символ 'А' в DDS ?
bykabak
> Как выглядит символ 'А' в DDS ?
font_utf8_bodonitown_18px_0
Aroch
> Предлагаешь верить на слово? Ошибка в один пиксель запросто может дать то что у
> тебя на выходе.
Предлагаю читать внимательно, геометрия на один пиксель ниже, чем изображение, можешь глянуть текстуру выше, как там нужно ошибиться, чтобы получить четкий срез?
Кроме того расчет координат такой же для D3D9
Входные данные точные, вот что там дальше творится - тут я не могу утверждать ничего.
Текстурные координаты начала каждого символа - U, левый верхний угол, - верные. Но правый нижний угол - V чуть сбиты на несколько пиклелей. Попробуй принудительно добавить к координатам конца символа по V , по пару пикселей и посмотри что получится. Тогда можно будет судить.
Как у тебя рассчитываются текстурные координаты символа ?
bykabak
>Попробуй принудительно добавить к координатам конца символа по V
Спасибо натолкнул на мысль, вот что вышло
Походу это как-то связано с фильтрацией, потому что кажется что обрабатывает он по 2 пикселя
Попробуй без фильтрации
samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.MipLODBias = 0.0f; samplerDesc.MaxAnisotropy = 0; samplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; samplerDesc.BorderColor[0] = 0; samplerDesc.BorderColor[1] = 0; samplerDesc.BorderColor[2] = 0; samplerDesc.BorderColor[3] = 0; samplerDesc.MinLOD = 0; samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;
Тема в архиве.