Примеры на DX8 и DX9:
http://tuapse-mikle.narod.ru/Test.zip
Работают одинаково, только D3DX_DEFAULT я не сделал - оно имеет контекстно разное значение. Мипфильтр ни на что не влияет пока один мипуровень.
Подготовил демку... [file=68742]
Смотри в классе MXSprite функцию CreateFromFile, там строки кода закомментированы...
Посмотри как они работают...
С API загрузчиком все норм работало...
Mikle
А насчет фулскрина... Ты сделал сброс устройства в ресайзере окна, а я проверял его состояние в каждом цикле и если надо сбрасывал...
Проверил отладчиком при подвисании TestCooperativeLevel возвращает какое-то значение...
Вогнал его в DXErr пишет: HRESULT: Lost Device...
Т.Е. в случае alt+tab происходит ресайз окна, теряется устпройство, и ты тут же его восстанавливаешь...
А у меня потерянное устройство заводится благодаря проверке его состояния в каждом цикле...
>добавлено через 5 минут:
Поменял константы на эти и все заработало
D3DERR_DEVICELOST = &H88760868 '2152 D3DERR_DEVICENOTRESET = &H88760869 '2153
С первым вопросом разобрался - размер файла 880*1280, но D3DX создаёт текстуру 1024*2048. Далее при фильтре D3DX_FILTER_NONE данные загружаются без искажений, а оставшееся место заливается чёрным.
Но если принудительно задать размер, то всё становится нормально:
Set s_texture = CreateTextureFromFileEx(g_dev, file, 880, 1280, 1, D3DUSAGE_DYNAMIC, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0, VarPtr(SrcInfo))
Так работает D3DX9, если нужен размер, отличный от степеней двойки - задавай его принудительно.
По константам D3DERR_DEVICELOST и D3DERR_DEVICENOTRESET ты прав, странно, я значения брал из .h файла, может ошибся.
У тебя модуль Math старой версии, в результате тебе пришлось заремить две ф-ции, где есть ViewPort, дело в том, что в DX8 и DX9 формат ViewPort разный, в последней версии dx_vb я полностью переписал математику на DX9. Старайся не использовать модули от разных версий dx_vb.
В математический модуль ты добавил несколько своих ф-ций. Переделай те, которые ничего не возвращают, на Sub, а то получаются ф-ции типа Variant, соответственно тормозят.
Из последней версии я убрал ResizeARGB так как в загрузчике текстур она больше не нужна, но у тебя, смотрю, задействована. Если надо - в следующей версии верну эту ф-цию.
Не очень понял смысл модуля MXApi - куча Public ф-ций, которые перегружают пространство имён, кроме того некоторые небезопасны. Я придерживаюсь правила делать Private всё, что только можно сделать Private.
Mikle
> Но если принудительно задать размер, то всё становится нормально...
Где то слышал что вместо размера на девятке можно использовать специальные константы, в духе NO_POW2... Это правда?
Mikle
> У тебя модуль Math старой версии...
Да... Я думал ты его не менял, а потом ошибки посыпались все заменил а за них забыл...
Подобавлял к тебе в классы своих типов... Вот и мучаюсь каждый раз... переписываю заново... (Например D3DVECTOR2L - Long версия итд...)
Mikle
> Из последней версии я убрал ResizeARGB...
Нет, не нужно... Забыл удалить...
Mikle
> Не очень понял смысл модуля MXApi...
Подумаю что можно сделать...
Сделал так потому, что одну и ту же api функцию используют несколько классов...
max255
> Подобавлял к тебе в классы своих типов.
Сделай свои отдельные модули для этого, будет проще потом. Я не против изменения моих модулей, просто это тебе же путаницу создаёт.
max255
> Сделал так потому, что одну и ту же api функцию используют несколько классов...
От того, что ты api функцию объявишь не один раз в общем модуле, а 10 раз в каждом классе, где она нужна, размер программы не увеличится. Объявление api функций - это не программный код, а директива компилятору, где искать ф-цию.
Mikle
> если нужен размер, отличный от степеней двойки - задавай его принудительно
Можешь для этого специально сделать функцию D3DXGetImageInfoFromFile()?
max255
> Можешь для этого специально сделать функцию D3DXGetImageInfoFromFile()?
Сделаю.
Обновил dx_vb:
http://tuapse-mikle.narod.ru/dx_vb/new_dx_vb.zip
Значительно ускорилось GetData и SetData для сурфейсов и объёмов, для сурфейсов добавил GetPixel. Исправлены константы HResult.
Добавил D3DXGetImageInfoFromFile.
Классно!!! Теперь наконец закончу загрузчик...
Mikle
Все таки нужны текстурные константы из капсов(pow2)...
Можно сделать иначе, но тогда упадет скорость загрузки текстур(загрузка-проверка)...
Обновил dx_vb:
http://tuapse-mikle.narod.ru/dx_vb/new_dx_vb.zip
Добавил TextureCaps.
Отлично... Приступаю к работе...
Нужна функция переводящая D3DColorValue в Long число, и обратно как в DX8...
max255
> Нужна функция переводящая D3DColorValue в Long число
Сделал преобразования в обе стороны, перезалил:
http://tuapse-mikle.narod.ru/dx_vb/new_dx_vb.zip
Замечен баг...
Функция SetData в Surface работает не верно, при задании любого ректа она копирует все равно в начало текстуры...
Тема в архиве.