У меня есть текстура, которая содержит символы и символы, которые я использую для наложения строк и иконок на конечную цель рендеринга. Например, чтобы создать строку, я отображаю каждый символ как один квад с соответствующими координатами текстуры.
Моя проблема начинается, когда я пытаюсь использовать mipmaps для текстуры, содержащей все мои символы. Без мипмапов все работает как задумано. После изменения только CreateTexture()
вызов для создания всех уровней MIP и добавление D3DUSAGE_AUTOGENMIPMAP
к параметру использования я получаю искаженный вывод только так:
Текстура создается так:
CreateTexture(width, height, 0, D3DUSAGE_DYNAMIC | D3DUSAGE_AUTOGENMIPMAP, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_texture, nullptr);
Я использую следующую текстуру фильтрации при рендеринге:
SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
Все, что рендерится, все еще является частью текстуры, но координаты текстуры кажутся как-то неправильными. Я попытался отладить эту проблему с PIX, но там моя цель рендеринга выглядит точно так, как задумано. (Я полагаю, PIX использует программный рендеринг, а мой графический процессор — это Nvidia Quadro с последними драйверами.)
Я действительно не знаю, где я должен продолжать искать. Мои координаты текстуры должны быть правильными, так как все работает без mipmaps. Я что-то упустил при включении mipmapping для этой текстуры? Есть идеи, что может быть причиной этого?
РЕДАКТИРОВАТЬ: я пробовал это с помощью драйвера ссылки (D3DDEVTYPE_REF
вместо D3DDEVTYPE_HAL
) и имеют ту же проблему, которая предполагает, что проблема не в драйвере, а в коде приложения. Тем не менее, я понятия не имею, где искать, как это работает, если я не использую mipmaps.
Задача ещё не решена.