Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

DirectDraw: создание поверхностей   Найти похожие ветки 

 
miek ©   (2004-03-04 20:21) [0]

Создаю две поверхности:
 
 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? Или это от видеокарты зависит и не лечится?


 
cyborg ©   (2004-03-04 21:40) [1]

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


 
miek ©   (2004-03-05 20:40) [2]

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


 
miek ©   (2004-03-05 21:33) [3]

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


 
cyborg ©   (2004-03-05 22:26) [4]

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


 
cyborg ©   (2004-03-05 22:28) [5]


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

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


 
cyborg ©   (2004-03-05 22:30) [6]

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

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


 
miek ©   (2004-03-06 09:46) [7]

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

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

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


 
cyborg ©   (2004-03-06 10:08) [8]


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

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


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

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


 
miek ©   (2004-03-06 10:16) [9]

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

www.miek.narod.ru/dxplatforms.zip

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


 
miek ©   (2004-03-25 16:40) [10]

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

www.miek.narod.ru/dxplatforms.zip



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
3-1083217697
lightix
2004-04-29 09:48
2004.05.30
Проблемы с ADO + Oracle


8-1080055315
Ёпрст
2004-03-23 18:21
2004.05.30
Каким компонентом сделать чтобы набор картинок на форме не мигал.


4-1080283710
Kalishenko Stas
2004-03-26 09:48
2004.05.30
FindFirstChangeNotification для Novell


3-1083609732
Mike(c)
2004-05-03 22:42
2004.05.30
Давно затертая тема про поиск в TTable... ПОМОГИТЕ ПЛИЗ!!!


3-1084283007
TransparentGhost
2004-05-11 17:43
2004.05.30
Нужно ли в FIB вызывать UnPrepare если меняется SQL-запрос?