Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DirectDraw: создание поверхностей [Win95/98, Win2k]


miek ©   (2004-03-04 20:21:00) 

Создаю две поверхности:
 
 DDrawObject.SetCooperativeLevel( form.handle,
   DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN or DDSCL_FPUSETUP);
 DDrawObject.SetDisplayMode( ScreenX, ScreenY, bpp);

 with SurfaceDescription do
   begin
     dwSize:= sizeof( SurfaceDescription);
     dwFlags:= DDSD_CAPS;
     ddsCaps.dwCaps:= DDSCAPS_PRIMARYSURFACE;
   end;
 DDrawObject.CreateSurface( SurfaceDescription, PrimarySurface, nil);

 with surfacedescription do
   begin
     dwSize:= sizeof( SurfaceDescription);
     dwFlags:= DDSD_CAPS or DDSD_WIDTH or DDSD_HEIGHT or DDSD_PIXELFORMAT;
     dwwidth:= screenx;
     dwheight:= screeny;
     ddpfPixelFormat.dwSize:= sizeof( surfacedescription.ddpfPixelFormat);
     ddpfPixelFormat.dwFlags:= DDPF_RGB;
     ddpfPixelFormat.dwRGBBitCount:= bpp;
     ddpfPixelFormat.dwRBitMask:= $007C00;
     ddpfPixelFormat.dwGBitMask:= $0003E0;
     ddpfPixelFormat.dwBBitMask:= $00001F;
     ddscaps.dwCaps:= DDSCAPS_OFFSCREENPLAIN;
   end;
 DDrawObject.CreateSurface( SurfaceDescription, SecondarySurface, nil);

Все работает прекрасно (перенос делаю через BltFast), только содержимое второй поверхности интерпретируется как RGB 5-6-5 вместо 5-5-5, несмотря на флаги. Естественно, все цвета "ползут". Как переубедить DirectDraw? Или это от видеокарты зависит и не лечится?


miek   (2004-03-25 16:40:00) [1]

Продолжение. Теперь в режиме 8-бит (Uniform), для удобства.

www.miek.narod.ru/dxplatforms.zip


miek   (2004-03-06 10:16:00) [2]

>Ошибки значит наделал, ищи.
Все! Я разобрался с этой фигней. Предлагаю посмотреть на рабочую демку;

www.miek.narod.ru/dxplatforms.zip

Сверхвысоких FPS не наблюдается, конечно. Но надо учесть, что все рисуется софтварно и каждый кадр пересылается из системной памяти по таймеру(!). Да и скорости вполне хватит на клон, допустим, "Космических рейнджеров". Скоро SpriteUtils-2 будет конкурировать с PowerDraw!


cyborg   (2004-03-06 10:08:00) [3]


> Почему 32-бита не работает, не въеду никак.

Ошибки значит наделал, ищи.


> Всего делов - этак 5000-10000 строк кода добавить!

Чего это у тебя там понаписано? По идее, всего нужно исправить конвертер цвета, строчки 3-4.


miek   (2004-03-06 09:46:00) [4]

>Ну сделай, чтобы 565 поддерживало, на бит сдвиги влево увелич и всего делов.

Всего делов - этак 5000-10000 строк кода добавить!

Но хрен с ним, с 16-битным, мне бы хоть в каком-нибудь рисовать нормально. Почему 32-бита не работает, не въеду никак.


cyborg   (2004-03-05 22:30:00) [5]

> А мне весьма надо 555, так как SpriteUtils только с ним
> работает.

Ну сделай, чтобы 565 поддерживало, на бит сдвиги влево увелич и всего делов.


cyborg   (2004-03-05 22:28:00) [6]


> которая не используется потом

Пардон, не обратил внимания на with surfacedescription do


cyborg   (2004-03-05 22:26:00) [7]

Поверхности будут создаваться битового формата главной поверхности.
К томуже что это за структура ddpfPixelFormat заполняется, которая не используется потом?


miek   (2004-03-05 21:33:00) [8]

Екарный бабай! Кроме 16-битного режима, вообще ничто не пашет! Просто меняю на 24 или 32, и вообще не работает.


miek   (2004-03-05 20:40:00) [9]

Странно получается - S3 Virge держит 555, а GeForce2 - нет. А мне весьма надо 555, так как SpriteUtils только с ним работает.


cyborg   (2004-03-04 21:40:00) [10]

Создаётся только такое, какое имеется у главной/первичной поверхности.
Видимо всё создаётся как 565, а зачем вобще делать 555, если можно 565? ;) оно всё равно 16 бит занимает, и похоже, что не все видеокарты поддерживают режим 555.


Наверх

Титульная страница Поиск, карта сайта Написать письмо