Форум: "Media";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Media";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c