二级Delphi版OpenGL样例代码导游
来源:优易学  2011-11-2 15:49:25   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  至此,一个OpenGL程序的框架就大致成型。但还有问题要解决。
  第一,要防止Windows擦除背景而影响速度。在Form中加入成员函数
  private
  procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
  procedure TGLWindow.WMEraseBkgnd(var Message: TWmEraseBkgnd);
  begin
  Message.Result := 1;
  end;
  第二,为了更保险些。再增加以下成员函数。
  protected
  procedure CreateParams(var Params: TCreateParams); override;
  procedure TGLWindow.CreateParams(var Params: TCreateParams);
  begin
  inherited;
  with Params do
  begin
  Style := Style or WS_CLIPCHILDREN or WS_CLIPSIBLINGS;
  WindowClass.Style := CS_VREDRAW or CS_HREDRAW or CS_OWNDC;
  end;
  end;
  好,现在就可以忘掉这些麻烦的东西了,写你的精彩3D显示吧:)
  还得唠叨几句,在一个线程里不要创建多个RC,这样会严重影响性能。有些个人的OpenGL窗口控件演示有在一个Form上放多个控件,其实并非好主义。应该用一个OpenGL窗口显示多个视图。另外,不要跨线程访问OpenGL函数。
  还有Windows自动安装显卡驱动时不会安装OpenGL的硬件加速,一定要自己安装显卡厂商的驱动!
  另外,副赠全屏显示的函数:)
  function FullScreen(win: TWinControl; width, height, bitdepth: integer): boolean;
  var displaymode: DEVMODE;
  begin
  FillChar(displaymode, sizeof(displaymode), 0);
  with displaymode do
  begin
  dmSize := sizeof(displaymode);
  dmPelsWidth := width;
  dmPelsHeight := height;
  dmBitsPerPel := bitdepth;
  dmFields := DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT;
  end;
  if ChangeDisplaySettings(displaymode, CDS_FULLSCREEN) = DISP_CHANGE_SUCCESSFUL
  then begin
  ShowWindow(win.Handle, WS_MAXIMIZE);
  result := true;
  end
  else result := false;
  end;
  procedure RestoreDisplay(win: TWinControl);
  begin
  ChangeDisplaySettings(PDEVMODE(0)^, 0);
  ShowWindow(win.Handle, SW_RESTORE);
  end;

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训