Странен проблем с метода ID3DXSprite Draw

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

Обикновено контролата изглежда: алтернативен текст

И на онази странна машина: alt text

Освен това някои контроли изглеждат добре, но също така много от тях изглеждат като този - с повредени ръбове и ... добре, можете да видите разликата :(

Втората машина има Intel(R) G41 Express Chipset видео адаптер. Моля, ако някой има НЯКАКВИ идеи защо може да се случи - помогнете!

Поздрави, Антъни.


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


Отговори (1)


Изглежда ми, че имате mipmaps в текстурата на спрайта и картата избира грешното ниво на mipmap. Задайте ниво на mip карта, изрично на 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, ако не правите mipping. - person Goz; 27.10.2010
comment
Имам променливата MipLevels, зададена на 1 във функцията D3DXCreateTextureFromFileInMemoryEx, но все още няма ефект. Между другото забелязах, че наистина изглежда, че имам проблеми с рисуването само на прозрачни изображения (с различна алфа стойност). Какво трябва да е прозрачно - черно ли е или шумно... - person Dalamber; 27.10.2010
comment
Използвате ли DXTC текстура? - person Goz; 27.10.2010
comment
IDirect3DTexture9. И *.png изображение в ресурси. - person Dalamber; 27.10.2010
comment
Хммм ... това не е проблемът тогава. Как настройвате UVs за изобразяване? Добавяте ли отместване на половин тексел към 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 и му подавам цялата текстура и rect за точен контрол. Въпросът е, че всичко работи абсолютно страхотно, с изключение на една машина (с това грозно видео на Intel). И това ме подвежда.. - 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
Драйверите са 1/16/2009 и Microsoft Update казва, че са най-новите. Въпреки това съм доволен от резултата - благодаря за помощта! А относно малкия офсет - не го смятам за голям проблем. Нека просто го оставим така :) Thx. - person Dalamber; 29.10.2010
comment
@Dalamber: Няма проблеми. Радвам се, че помогнах малко ... дори и да отне известно време ;) - person Goz; 29.10.2010