Было-бы удобно, в ситуации если порт не нашел файл шейдера, возвращал Nothing, а не крашился...
Friend Function CreateVertexShaderFromFile(fName As String) As Direct3DVertexShader9
Dim pShader As Long
Dim nf As Integer
Dim ar() As Byte
nf = FreeFile
Open fName For Binary As #nf
ReDim ar(LOF(nf) - 1)
Get #nf, , ar()
Close #nf
dev_CreateVertexShader Ptr, VarPtr(ar(0)), pShader
If pShader <> 0 Then
Set CreateVertexShaderFromFile = New Direct3DVertexShader9
CreateVertexShaderFromFile.Ptr = pShader
End If
End FunctionКонечно удобно :) Недоделка.
Не грузятся 16 битные wav - ки...
Крашится на создании буфера...
Private Sub Form_Load()
Dim Ar() As Byte
Dim nf As Integer
Dim w_size As Long
Dim w_format_tag As Integer
Dim w_channels As Integer
Dim w_freq As Long
Dim w_bits As Integer
Me.Show
DoEvents
Set ds = DirectX8.CreateDirectSound
If Not (ds Is Nothing) Then
ds.SetCooperativeLevel Me.hWnd, DSSCL_NORMAL
nf = FreeFile
Open "Media\River1.wav" For Binary As #nf
Get #nf, &H29, w_size
Get #nf, &H15, w_format_tag
Get #nf, &H17, w_channels
Get #nf, &H19, w_freq
Get #nf, &H23, w_bits
ReDim Ar(w_size - 1)
Get #nf, &H2D, Ar()
Close #nf
Set DSB = ds.CreateSoundBuffer(w_channels, w_bits, w_freq, w_size, DSBCAPS_CTRLVOLUME Or DSBCAPS_CTRLFREQUENCY)
If DSB.SetData(0, w_size, VarPtr(Ar(0))) = False Then ClearAll: Unload Me
End If
End SubУ тебя точно последний dx_vb? Я только что проверил на том, что лежит в нулевом посту по ссылке new_dx_vb, поменял WAV-файл на 16-битный, стерео, заменил код:
Private Sub Form_Load()
Dim Ar() As Integer
Dim nf As Integer
Dim Sz As Long
Me.Show
DoEvents
Set DS = DirectX8.CreateDirectSound
If Not (DS Is Nothing) Then
DS.SetCooperativeLevel Me.hWnd, DSSCL_NORMAL
nf = FreeFile
Open "Media\River16.wav" For Binary As #nf
Get #nf, &H29, Sz
ReDim Ar(Sz \ 2 - 1)
Get #nf, &H2D, Ar()
Close #nf
Set DSB = DS.CreateSoundBuffer(2, 16, 22050, Sz, DSBCAPS_CTRLVOLUME Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLFREQUENCY)
If DSB.SetData(0, Sz, VarPtr(Ar(0))) = False Then ClearAll: Unload Me
End If
End SubРаботает. Такая проблема была, но я её устранил с полгода назад.
Mikle
> последний dx_vb
Пробовал на самом древнем... В котором SDK...
Mikle
Как думаешь высок ли прирост скорости, если юзать DX математику? Не уйдет ли время на вызов и.т.д.
Не расчитывал разницу?
А возможно ли прикрутить обработку математики на ассемблер ? Таким
образом можно будет увеличить скорость фиксированного конвеера ?!!!
Andconst
Все можно, но не потеряется ли вся "скорость" на вызовах API?
max255
Я когда-то сравнивал на dx8vb.dll, простые лёгкие ф-ции, типа vec3Add, быстрее выполнялись на vb, если скомпилить с оптимизациями, более тяжёлые, типа MatrixMultiply, немного быстрее через D3DX, потом, когда сделал dx_vb, я его сравнил с dx8vb на MatrixMultiply и увидел неплохой выигрыш. Сомневаюсь, что матеметика с тех пор изменилась, видимо это из-за того, что dx8vb скомпилирована на шестой студии, а dx_vb на девятой, C++ неплохо оптимизировали с тех пор.
Но самые лёгкие ф-ции, возможно, на VB будут выполняться всё же быстрее, не проверял.
Andconst
При чём тут фиксированный конвейер?
Имел ввиду для того чтобы потребность в шейдерах отсрочить подальше!
Andconst
> отсрочить
Можно и не юзать шейдеры... Просто с ними намного проще добится красивой картинки...
Тем более вряд-ли код на асме обойдет видеоускоритель по скорости...
Согласен!
Какой толк от самой лучшей оптимизации игры, если она подобна арканоид!
Andconst
Перенос D3DX математики на ассемблер (SSE) не имеет никакого отношения к скорости шейдеров или FFP. От этого даже не поменяется скорость обработки вертексов при SoftwareVertexProcessing. Быстрее могут заработать только те ф-ции, которые ты сам из кода вызываешь.
Andconst
> чтобы потребность в шейдерах отсрочить подальше!
Не нужно их бояться. С моей точки зрения асм шейдеры 2.0..3.0 - это верх лаконичности и наглядности, даже понятнее, чем FFP, и при этом одновременно гибче.
Mikle
>понятнее... гибче...
+100500
Поняв как работают шейдеры сразу начинаешь понимать как все устроено... Как работает ffp, и зачем там нужны те или иные функции... А если смотреть сначала ffp, то с трудом понимаешь зачем все это нужно и как это юзать...
ЗЫ: насчет оптимизации арканоида... Сейчас стараюсь уделять этому внимание... Например у себя в двиге оптимизирую функции отрисовки, разделяя их на отдельные процедуры...
Поскольку я нуб в физикие тот говнокод что у меня получается жутко не оптимален... Вот и лаги...
Mikle
Не пробовал юзать HLSL шейдеры в порту?
Вроде как константы там нужно как-то получать при компиляции...
Тема в архиве.