Общество изобретателей велосипедов
GameDev.ru / Сообщества / Вело-изобретатели / Форум / Direct3D9 в VB6

Direct3D9 в VB6

Страницы: 1 2 Следующая »
the trickПостоялецwww10 ноя. 201511:38#0
Всем привет.
Уже довольно давно занимаюсь созданием библиотеки типов Direct3D9 и вспомогательных функций D3DX для VB6.
Итак в архиве содержится библиотека типов "DirectX 9 for Visual Basic 6.0 type library by The trick" (dx9vb.tlb) содержащая описание следующих интерфейсов:
IDirect3D9;
IDirect3DDevice9;
IDirect3DSurface9;
IDirect3DResource9;
IDirect3DSwapChain9;
IDirect3DTexture9;
IDirect3DBaseTexture9;
IDirect3DVolumeTexture9;
IDirect3DVolume9;
IDirect3DCubeTexture9;
IDirect3DVertexBuffer9;
IDirect3DIndexBuffer9;
IDirect3DStateBlock9;
IDirect3DVertexDeclaration9;
IDirect3DVertexShader9;
IDirect3DPixelShader9;
IDirect3DQuery9;
Также в этой библиотеке задеклалриованы множество типов, констант и энумов. Работа этой библиотеки слабо тестировалась, поэтому что-то может не работать.
Также в архиве содержится несколько модулей написанных на VB6:
D3DX_COLOR.bas - для работы с цветами
D3DX_MATRICES.bas - для работы с матрицами
D3DX_QUATERNION.bas - для работы с кватернионами
D3DX_VECTOR2.bas, D3DX_VECTOR3.bas, D3DX_VECTOR4.bas - для работы с векторами
D3DX_MISC.bas - различные функции которые не вошли не в одну из категорий
Эти модули содержат аналоги соответствующих функций D3DX. После компиляции EXE файл не содержит никаких зависимостей (естественно DirectX9), т.е. tlb не нужна.
Также в архиве содержится несколько тестовых примеров работы, которые, возможно я буду пополнять:
Генерация ландшафта:
Изображение
Простой огонь:
Изображение
Вывод текста:
Изображение
Применение 3D эффектов к окнам.
Изображение

Скачать

Правка: 7 мая 2018 9:46

AWPStarУчастникwww12 янв. 201623:30#1
Крутатень! Спасибо!
AWPStarУчастникwww13 фев. 20168:19#2
Подскажи.
У меня при такой конструкции Ошибка вылезает "expected function or variable"
rev = dev.TestCooperativeLevel
Она не функция?)
Sub TestCooperativeLevel()
    Member of DxVBLib.IDirect3DDevice9
    Reports the current cooperative-level status of the Direct3D device for a windowed or full-screen application.

Куда она репортит? Как мне значение получить?

Мне надо ловить выход из полноэкранного режима,т.е. потерю девайса

the trickПостоялецwww13 фев. 201614:23#3
AWPStar
> Она не функция?)
Вообще функция возвращающая HRESULT, для VB6 это означает что если она возвратит значение отличное от 0, то будет сгенерирована ошибка. Узнать можно через Err.Number.
AWPStarУчастникwww13 фев. 201614:28#4
the trick
Да, но она объявлена как Sub. И она не возвращает значений т.к. это sub)
the trickПостоялецwww13 фев. 201615:15#5
AWPStar
> Да, но она объявлена как Sub. И она не возвращает значений т.к. это sub)
Это VB6 так делает, потому что большинство методов COM объектов возвращают HRESULT являющееся статусом вызова. Если HRESULT < 0, значит произошла ошибка при вызове метода и VB6 генерирует ошибку присваивая номеру ошибки возвращаемое значение. Ты можешь сделать вроде этого:
On Error Resume Next
dev.TestCooperativeLevel
MsgBox "TestCooperativeLevel has returned: " & Err.Number
AWPStarУчастникwww13 фев. 201615:44#6
the trick
Тут еще дело в том, что если TestCooperativeLevel <> 0 вызывается automation error и это ошибку можно только пропустить через On Error.
Какие-то танцы с бубном.) Не понимаю как обратно девайс восстановить, т.к. при D3DERR_DEVICENOTRESET ошибка уже не будет рейзиться и не узнать когда надо сделать reset.

Как ты эту проблему решаешь?

the trickПостоялецwww13 фев. 201615:52#7
AWPStar
> Тут еще дело в том, что если TestCooperativeLevel <> 0 вызывается automation
> error и это ошибку можно только пропустить через On Error.
Ты читаешь что я тебе пишу вообще? И должна ошибка генерироваться номер ошибки и есть возвращаемое значение которое ты получаешь через Err.Number.
AWPStarУчастникwww13 фев. 201616:00#8
the trick
Да, действительно. Это у меня ресурсы все удалялись, черный экран. поэтому я думал, что девайс не восстанавливался т.к. считал, что Err.Number = 0
MikleМодераторwww27 фев. 201610:50#9
the trick
Два дня я бился над криво работающими отражениями, в конце концов предположил, что криво работает моя математика, подключил твою... опять лаги, но другие.
В конце концов выяснил, что и у меня, и у тебя криво работает простая функция - транспозиция матрицы, только моя портила данные при транспонировании одной матрицы в другую, а твоя портит, если транспонировать матрицу в себя.

Ещё хотелось бы кое-что поменять, если это не очень сложно.
В таких методах, как SetPixelShaderConstant, SetVertexShaderConstant, CreateVertexShader, CreatePixelShader хотелось бы иметь нетипизированный указатель (As Any) на загружаемые данные.
У меня набор загружаемых в вертексный шейдер констант собран в структуру VSConst, создана переменная VSC As VSConst. Вместо того, чтобы писать так:

  Dev.SetVertexShaderConstantF 0, VSC, Len(VSC) \ 16
приходится писать так:
  Dev.SetVertexShaderConstantF 0, VSC.MtrxWVP.m11, Len(VSC) \ 16
потому, что требуется именно Single.
Шейдеры хранятся в ресурсах, LoadResData возвращает байтовый массив, а CreateVertexShader и CreatePixelShader просят именно Long.

the trickПостоялецwww27 фев. 201611:57#10
Mikle
Привет.
Исправил матрицы и изменил тип указателей. Качать по той же ссылке.
MikleМодераторwww27 фев. 201612:08#11
Вот это оперативность! Благодарю.
AWPStarУчастникwww31 мая 201621:19#12
Привет.
Подскажи как создать шейдер.
Пытаюсь сделать так:
Set CreateVertexShaderFromFile = d3dev.CreateVertexShader( VarPtr(ar(0)))
где "ar() as byte" - это файл шейдера(откомпилированный).
Выдает ошибку 0x8876086c.
Может что-то где-то не так делаю.

Делаю по аналогии с функцией Майлка, только там параметры другие(т.е. те же, но присвоение другое).

the trickПостоялецwww31 мая 201621:39#13
AWPStar
> Подскажи как создать шейдер.
Не работал с шейдерами, но аналогия - https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb174366(v=vs.85).aspx
Похоже что нужно делать не ar() as byte, а ar() as Long, и передавать Set CreateVertexShaderFromFile = d3dev.CreateVertexShader(ar(0))
AWPStarУчастникwww31 мая 201621:48#14
the trick
Спасибо! Похоже, что да. Видимо размер файлов шейдеров всегда кратен 4ем.
Страницы: 1 2 Следующая »

/ Форум / Общество изобретателей велосипедов / Графика

2001—2018 © GameDev.ru — Разработка игр