Странная проблема с методом рисования ID3DXSprite

Я использую интерфейс ID3DXSprite для рисования элементов управления графическим интерфейсом в своем приложении. У меня есть текстура 512x512 со всеми элементами управления, и я использую sprite-›Draw(), сообщая точный RECT элемента управления. Все работает нормально, за исключением странного бага только на одной(!) машине.

Обычно элемент управления выглядит так: alt text

И на этой странной машине: alt text

Более того, некоторые элементы управления выглядят нормально, но многие из них выглядят как этот - с испорченными краями и ... ну, вы можете увидеть разницу :(

На второй машине установлен видеоадаптер Intel(R) G41 Express Chipset. Пожалуйста, если у кого-то есть ЛЮБЫЕ идеи, почему это может произойти - помогите!

С уважением, Энтони.


person Dalamber    schedule 27.10.2010    source источник


Ответы (1)


Мне кажется, что у вас есть мип-карты в текстуре спрайта, и карта выбирает неправильный уровень мип-карты. Установите уровень мип-карты явно на 1 и посмотрите, поможет ли это.

person Goz    schedule 27.10.2010
comment
Что ж, большое спасибо за ответ! Я использую функцию D3DXCreateTextureFromFileInMemoryEx, и если я правильно понял, мне нужно правильно настроить MipFilter. Но флагов много - msdn.microsoft .com/en-us/library/bb205565(v=VS.85).aspx Можете что-нибудь посоветовать? - person Dalamber; 27.10.2010
comment
Вам не нужен MipFilter, если вы не делаете миппинг. - person Goz; 27.10.2010
comment
У меня есть переменная MipLevels, установленная на 1 в функции D3DXCreateTextureFromFileInMemoryEx, но все равно безрезультатно. Кстати, я заметил, что действительно похоже, что у меня проблемы с рисованием только прозрачных изображений (с различным значением альфа). Что должно быть прозрачным - черное или шумное... - person Dalamber; 27.10.2010
comment
Вы используете текстуру DXTC? - person Goz; 27.10.2010
comment
IDirect3Dтекстура9. И изображение *.png в ресурсах. - person Dalamber; 27.10.2010
comment
Хм... тогда не в этом дело. Как вы устанавливаете UV для рендеринга? Добавляете ли вы смещение в половину текселя к координатам UV? - person Goz; 27.10.2010
comment
Я использую целые числа для хранения точного RECT на текстуре (для каждой кнопки). затем я вызываю: pSprite->Begin(D3DXSPRITE_OBJECTSPACE); pD3DDevice-›SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); pD3DDevice-›SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT); pD3DDevice-›SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT); после этого я вызываю метод pSprite-›Draw и передаю ему всю текстуру и прямоугольник для точного контроля. ДЕЛО В ТО, что все работает абсолютно отлично, за исключением одной машины (с этим уродливым интеловским видео). И это вводит меня в заблуждение.. - person Dalamber; 27.10.2010
comment
Проблема в том, что драйверы Intel полны ошибок. Я пытаюсь понять, что. Я не совсем знаком с ID3DXSprite (поскольку я всегда предпочитал реализовывать свою собственную систему). Могу ли я предложить использовать D3DTEXF_LINEAR вместо POINT и посмотреть, будет ли это иметь значение? - person Goz; 27.10.2010
comment
Вот это да! Да, это имеет значение! Все прозрачные пиксели отображаются корректно и красиво. НО с флагом _LINEAR у меня возникают проблемы со смещениями. Некоторые элементы управления смещены на пиксель или могут быть наполовину. - person Dalamber; 28.10.2010
comment
Можете ли вы опубликовать скриншот после того, как вы сделали это изменение? Вы пробовали обновить драйверы Intel, кстати? - person Goz; 28.10.2010
comment
Драйверы от 16.01.2009, и Microsoft Update говорит, что они самые последние. Тем не менее, я доволен результатом - спасибо за помощь! А насчет небольшого смещения - не думаю, что это большая проблема. Давайте просто оставим все как есть :) Спасибо. - person Dalamber; 29.10.2010
comment
@Даламбер: Нет проблем. Рад, что был чем-то полезен ... даже если это заняло некоторое время;) - person Goz; 29.10.2010