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

Вниз

Помогите насчет DirectX   Найти похожие ветки 

 
BlackSun   (2002-11-22 21:45) [0]

Суть в том, что есть 2 поверхности, заполненные черным цветом, и они по очереди выводятся на экран (метод Flip), но результат такой, одна поверхность белая, другая черная, а должны бть обе черными, делаю так... В чем дело, помогите, плиз...
procedure TfrmDD.FormCreate(Sender: TObject);
var
hRet : HRESULT;
ddsd : TDDSurfaceDesc2;
ddscaps : TDDSCaps2;
begin
FDDSBack := nil;
FDDSPrimary := nil;
FDD := nil;

hRet := DirectDrawCreateEx (nil, FDD, IDirectDraw7, nil);
if Failed (hRet) then ErrorOut(hRet, "DirectDrawCreateEx");

hRet := FDD.SetCooperativeLevel(Handle, DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE);
if Failed (hRet) then ErrorOut(hRet, "SetCooperativeLevel");

hRet := FDD.SetDisplayMode (ScreenWidth, ScreenHeight, ScreenBitDepth, 0, 0);
if Failed (hRet) then ErrorOut(hRet, "SetDisplayMode");

ZeroMemory (@ddsd, SizeOf(ddsd));
with ddsd do begin
dwSize := SizeOf(ddsd);
dwFlags := DDSD_CAPS or DDSD_BACKBUFFERCOUNT;
ddsCaps.dwCaps := DDSCAPS_PRIMARYSURFACE or DDSCAPS_FLIP or DDSCAPS_COMPLEX;
dwBackBufferCount := 1;
end;
hRet := FDD.CreateSurface(ddsd, FDDSPrimary, nil);
if Failed (hRet) then ErrorOut(hRet, "Create Primary Surface");

ZeroMemory (@ddscaps, SizeOf(ddscaps));
ddscaps.dwCaps := DDSCAPS_BACKBUFFER;
hRet := FDDSPrimary.GetAttachedSurface(ddscaps, FDDSBack);
if Failed (hRet) then ErrorOut(hRet, "GetAttachedSurface");

if Failed (Clear) then Close;
if Failed (FlipPages) then Close;
if Failed (Clear) then Close;
end;

function TfrmDD.Clear : HRESULT;
var
desc : TDDSURFACEDESC2;
hRet : HRESULT;
begin
ZeroMemory (@desc, SizeOf(desc));
desc.dwSize := SizeOf(desc);

hRet := FDDSBack.Lock (nil, desc, DDLOCK_WAIT, 0);
if Failed (hRet) then begin
Result := hRet;
Exit;
end;

FillChar (desc.lpSurface^, 307200, 0);

Result := FDDSBack.Unlock (nil);
end;


function TfrmDD.FlipPages : HRESULT;
begin
Result := FDDSPrimary.Flip(nil, DDFLIP_WAIT);
end;


procedure TfrmDD.ApplicationEvents1Idle(Sender: TObject;
var Done: Boolean);
begin
if FActive then
FlipPages
else RestoreAll;
Done := False;
end;


 
Sapersky_   (2002-11-24 00:35) [1]

> FillChar (desc.lpSurface^, 307200, 0);

- это очистка фиксированного буфера 640*480, а если другой?
И вообще, ИМХО, лучше так:

Var BltFX : TDDBltFx;

BltFX.dwSize:=SizeOf(BltFX);
BltFX.dwFillColor:=0;
FDDSBack.Blt(nil,nil,nil,DDBLT_COLORFILL or DDBLT_WAIT,@BltFX);

И поставить очистку лучше в основном цикле, чтобы первые два раза перед выводом всё очищалось.



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

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

Наверх




Память: 0.47 MB
Время: 0.021 c
1-17154
aade
2003-02-21 16:54
2003.03.06
Выход из цикла


1-17081
Arhangel
2003-02-25 19:03
2003.03.06
filesetdate мудрит!


1-17170
Некий программер
2003-02-24 08:54
2003.03.06
Ресурс BITMAP


3-16905
Rom@n
2003-02-15 07:30
2003.03.06
переносимая база данных


14-17283
Труп Васи Доброго
2003-02-19 18:22
2003.03.06
Virtual Drive