Re[3]: Можно ли выводить 2 OpenGL сцены, одновременно, в раз
От: FunnyRabbit Россия  
Дата: 23.11.05 14:44
Оценка:
procedure TGLForm.InitForm;
begin
  stParams := TStrings.Create;
  Perspective := 40.0;

  AngleX := 0.0;
  AngleY := 0.0;

  DC := GetDC(Handle); <<-- вот тут ты его включаешь
  SetDCPixelFormat;
  hrc := wglCreateContext(DC);

  wglMakeCurrent(DC, hrc);
  InitializeRC;
  InitText;
end;

А вот как можно сделать:


procedure TGLForm.InitDC(Handle: HWND) //Прошлый твой InitForm;
begin
  stParams := TStrings.Create;
  Perspective := 40.0;

  AngleX := 0.0;
  AngleY := 0.0;

  DC := GetDC(Handle);
  SetDCPixelFormat;
  hrc := wglCreateContext(DC);

  wglMakeCurrent(DC, hrc);
  InitializeRC;
  InitText;
end;


и как там у тебя


// вызов в наследниках:
 ...
procedure TfmMap.FormCreate(Sender: TObject);
begin
  inherited;
  InitDC(Self.Handle) //  InitForm;
  tMain.Open;
  SetLength(arPoint, tMain.RecordCount);
  InitMap;
  Timer.Enabled := True;
end;
...


где InitDC(Self.Handle) Дескриптор твой формы.
Я бы на твоем месте реализовал (а точнее так и делал раньше) класс в который можно передать HWND любого окна и т.п.
Типа

type 
  TOpenGLRender = class
   .......
   hDC: HDC;
   hWnd: HWND;
   fGLRC: HGLRC;
   public 
   .....
    procedure InitDC(hwnd: HWND);
   ....
end;

А потом:

procedure ....();
var
  oglr: TOpenGLRender;
begin
  oglr := TOpenGLRender.Create;
  oglr.InitDC(Self.Handle);
end;


Не знаю. Может если вставить вместо hwnd 0, то получиться рендерить на рабочем столе?

Have fun!
То что меня не убивает, делает меня умнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.