Порт представляет собой одну нативную DLL и несколько модулей на бейсике, подключаемых к проекту.
Таким образом нет необходимости ничего регистрировать в системе, программы работают СРАЗУ, в том числе и не из-под админа в Windows Vista и Windows 7-8-10.
Я не ставлю целью полностью реализовать все ф-ции DX9, дописываю их по мере необходимости.
Переводить DXInput особого смысла не вижу, мышь и клавиатура неплохо опрашиваются и средствами VB6 или API.
На данный момент есть части Direct3D и DirectSound с наиболее употребляемыми ф-циями.
Порт НЕ НУЖДАЕТСЯ в d3dx_XX.dll.
Функции d3dx, реализованные в порту:
1. Шейдеры. Предложен альтернативный вариант, в комплекте к порту поставляется компилятор шейдеров, в самом порту есть ф-ции для загрузки этих шейдеров.
2. Загрузка текстур. d3dx загрузчик текстур реализован в полном объёме.
Скачать порт с несколькими туториалами:
https://yadi.sk/d/2L5Yh8Yo39dfnY
Набор модулей и классов на VB6 и dx_vb.dll являются единым целым, крайне не рекомендуется использовать одновременно части из разных версий.
Примеры работ, использующих dx_vb:
1. Статья "Рендер неограниченной водной поверхности":
http://www.uraldev.ru/articles/id/37
2. Игра "Access of Speed 2":
https://yadi.sk/d/2ao-CaukqvDKc
Приветствуется написание пользователями своих дополнений и расширений к порту, наподобие уже имеющегося компилятора шейдеров.
Обновил текущую рабочую версию, добавил, наконец-то, капсы, а так же Reset и TestCooperativeLevel. Исправил ошибку с локом объёма.
Кулл!!! Переделаю наконец ядро...
Mikle
Кстати как восстанавливать текстуры с флагами D3DUSAGE_DYNAMIC Or D3DUSAGE_AUTOGENMIPMAP в D3DPOOL_DEFAULT?
Делаю так:
Private Sub Form_Resize() If Me.BorderStyle <> 0 And core.Ready = True Then Set Tex = Nothing core.ResizeWindow Set Tex = CreateTextureFromFile(g_dev, App.Path + "\media\wall_col.jpg") End If End Sub
После ресета дает ошибку, мол обьекта Tex нет, если изменить флаги, то все нори...
Где можнт быть проблема?
>Исправил...
Из SDK:
>Resources in the default pool do not persist through transitions between the lost and operational states of the device. These resources must be released before
>calling reset and must then be re-created.
То есть уничтожай до ресета, хоть и пишет, что объекта нет, потом создавай заново. Либо пользуйся другими флагами.
Mikle
Уничтожаю так:
Set Tex = Nothing
После ресета:
Set Tex = CreateTexture....
В результате, если флаги D3DUSAGE_DYNAMIC в D3DPOOL_DEFAULT то текстура после ресета не создается, возвращает Nothing...
Если юзать MANAGED, то все норм, НО, как я слышал, MANAGED держит текстуры и в озу и в видюхе, а это не тру...
Решил проблему с уничтожением!
Как там дела с сурфейсом?
Сделал, перезалил.
Mikle
Ковырялся в капсах и... обнаружил что нет констант...
Можно их добавить?
Ну или хотя-бы скажи где взять их значения...
>обнаружил что нет констант
Каких, caps2-caps3? Добавлю.
Mikle
И текстурных констант...
Трабла...
g_dev.DrawIndexedPrimitiveUp D3DPT_TRIANGLELIST, 0, b_text_len * 4&, b_text_len * 2&, VarPtr(index(0)), D3DFMT_UNKNOWN, VarPtr(m_vertex(0)), lenv
Ошибка на DrawIndexedPrimitiveUp, говорит мол деление на ноль... Обычно возникает когда lenv=0, но тут все верно...
А если всё-таки указать правильный формат индекса?
D3DFMT_INDEX32, а не D3DFMT_UNKNOWN
Но лучше сделать:
Dim index(5) As Integer
И формат D3DFMT_INDEX16.
Mikle
Понял... Значит нужно выбирать из D3DFMT_INDEXxx...
Спасиб, все заработало...
Тема в архиве.