Вообщем констатирую "маразм крепчал" (в даном случае мой собственный).
Сделал я просто замечательное ускорение захвата кадров ... (запахал его в отдельный поток)
Ура! Но упс SBS не работает ... Шо ? Где ! А понял! В "левый поток" не приходят флаги от рендера (для отдельного пересчета для левого и правового глаза ) ничтоже суетясь затолкал в захват еще два вызова процедуры захвата ... Не работает?
Ну где "наша не пропадала" запихал в рендер разделение картинки на две половинки . ( Думал нагляднее будет... Ага ! "Нагляднее по самое не хочу" ) Три раза переписал ...
Не фурчит. Наконец вспомнил, что можно влезть в карту верши текстуры. Так заработало. Ушёл спать .
Но "непокорное" разделение достало настолько, что утром написал специальный "Баг тест"...
- Код: Выделить всё
procedure CreateSnapshotPlusWH (var B:TBitmap;W,H:Integer;WindowHD:HWND;Sbs:Integer);
var
wnd:HWND;
dc:HDC;
r:TRect;
X,WS,HS:Longint;
begin
If B=Nil then exit;
wnd :=WindowHD;
if wnd = 0 then
begin
dc := GetDC(0);
Ws:=Screen.Width;
Hs:=Screen.Height;
end
else
begin
dc := GetWindowDC(wnd);
GetWindowRect(wnd,r);
Ws:=r.Right-r.Left;
Hs:=r.Bottom-r.Top;
end;
if SBS in [1,2] then ws:=ws div 2;
if SBS in [0,1] then X:=0;
if SBS = 2 then x:=ws;
b.SetSize(W,H);
StretchBlt(B.Canvas.Handle,0,0,B.Width,B.Height,DC,x,0,WS,HS,SRCCOPY);
ReleaseDC(wnd,dc);
end;
procedure TMForm.Button1Click(Sender: TObject);
procedure GLuKoTest1;
Var
L,R :TBitmap;
begin
L:=TBitmap.Create; R:=TBitmap.Create;;
CreateSnapshotPlusWH(R,800,600,0,1);
CreateSnapshotPlusWH(L,800,600,0,2);
IMage1.Picture.Assign(R);
IMage2.Picture.Assign(L);
L.Free;
R.Free;
end;
procedure GLuKoTest2;
Var
C,L,R :TBitmap;
begin
L:=TBitmap.Create;R:=TBitmap.Create;C:=TBitmap.Create;
CreateSnapshotPlusWH(C,800,600,0,0);
L.SetSize(R_W div 2,R_H); R.SetSize(R_W div 2,R_H);
R.Canvas.CopyRect(rect(0,0,R.Width,R.Height),
C.Canvas,rect(0,0,R.Width,C.Height));
L.Canvas.CopyRect(rect(0,0,L.Width,L.Height),
C.Canvas,rect(L.Width,0,C.Width,C.Height));
IMage1.Picture.Assign(R);
IMage2.Picture.Assign(L);
c.Free;
L.Free;
R.Free;
end;
begin
GLuKoTest2;
end;
Это уже исправленная версия ...
Но в начале там было что-то вроде этого.
L.Canvas.CopyRect(rect(0,0,L.Width,L.Height), C.Canvas,rect(
0,L.Width,C.Width,C.Height));
Очередная "Жертва копипасты" !
В свое оправдание могу сказать только, что при такой ошибке картинка получается "в Пикассо Стайл " .
Вообщем не пишите программы глубокой ночь, выпив бочку кофе .
Бо на утро, будет как у старины Роберта Вуда который накурившись опиума сделал чудное открытие и даже чудовищным усилием воли заставил себя его записать, но на утро он прочел просто сокрушительную истину
"Банан длинен, а его кожура еще длинней!" 