Сравнение инициализации Scribe-DirectDraw и DirectDraw7:
Объявления переменных:
Практически аналогично в обоих случаях. Однако в DX7 кроме объекта DirectDraw, объектов поверхностей (буферов) и структуры описания поверхности надо объявить главный объект DirectX.
Раньше мы делали это так: Dim dd As DirectDraw Dim Primary As DirectDrawSurface 'Primary surface Dim BackBuffer As DirectDrawSurface 'BackBuffer surface Dim ddsd As DDSURFACEDESC Dim caps As DDSCAPS
В DirectX7 это делается так: Dim dx As DirectX7 Dim dd As DirectDraw7 Dim Primary As DirectDrawSurface7 'Primary surface Dim BackBuffer As DirectDrawSurface 'BackBuffer surface Dim ddsd As DDSURFACEDESC2 Dim caps As DDSCAPS2
Далее, надо создать объект DirectDraw, установить режим отношения программы с другими приложениями (Coopeartive Level) и режим экрана. В DirectDraw7 объект DirectDraw создается из объекта DirectX.
Сначала предыдущая версия: Call DirectDrawCreate(ByVal 0&, dd, Nothing) 'Создаем DirectDraw Call lpDD.SetCooperativeLevel(trgtForm.hwnd, DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN Or DDSCL_ALLOWREBOOT) 'Режим работы Call lpDD.SetDisplayMode(X, Y, Color) 'Режим дисплея
Теперь, DirectX7 Set dd = dx.DirectDrawCreate("") 'Создаем DirectDraw Call dd.SetCooperativeLevel(trgtForm.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE Or DDSCL_ALLOWREBOOT) 'Режим работы Call dd.SetDisplayMode(X, Y, Color, 0, DDSDM_DEFAULT) 'Режим дисплея
Теперь надо задать описание главной поверхности, создать ее и получить задний буфер.
Scribe-DirectDraw: 'Create a front surfaces With ddsd .dwSize = Len(ddsd) .dwFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT .DDSCAPS.dwCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX .dwBackBufferCount = 1 End With Call dd.CreateSurface(ddsd, Primary, Nothing) 'Retrieve BackBuffer caps.dwCaps = DDSCAPS_BACKBUFFER Call Primary.GetAttachedSurface(caps, BackBuffer)
DirectDraw7: 'Create a front surfaces ddsd.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT ddsd.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX ddsd.lBackBufferCount = 1 Set Primary = dd.CreateSurface(ddsd) 'Retrieve BackBuffer caps.lCaps = DDSCAPS_BACKBUFFER Set BackBuffer = Primary.GetAttachedSurface(caps)
После этого можно установить ColorKey и другие дополнительные параметры. Как видите, смысл один и тот же, а разница скорее в синтаксисе, что однако довольно неприятно.
Так что, для какого DirectX программировать решать конечно же вам. По крайней мере уже целая толпа, пожав плечами отправилась юзать новое детище Microsoft... Удачи, и
Приятного программирования,