home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / DELPHIX.ZIP / Samples / d3drm / SelectDriver / Main.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-10-06  |  5.8 KB  |  215 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, DXClass, DXDraws, DirectX;
  8.  
  9. type
  10.   TMainForm = class(TDXForm)
  11.     DXDraw: TDXDraw;
  12.     DXTimer: TDXTimer;
  13.     OpenDialog: TOpenDialog;
  14.     procedure DXDrawInitialize(Sender: TObject);
  15.     procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
  16.     procedure FormKeyDown(Sender: TObject; var Key: Word;
  17.       Shift: TShiftState);
  18.     procedure DXDrawClick(Sender: TObject);
  19.     procedure DXDrawInitializeSurface(Sender: TObject);
  20.     procedure DXDrawInitializing(Sender: TObject);
  21.   private
  22.     FileName: string;
  23.     FConfig: Boolean;
  24.   end;
  25.  
  26. var
  27.   MainForm: TMainForm;
  28.  
  29. implementation
  30.  
  31. uses Config;
  32.  
  33. {$R *.DFM}
  34.  
  35. procedure TMainForm.DXDrawInitialize(Sender: TObject);
  36. var
  37.   LightFrame, MeshFrame: IDirect3DRMFrame;
  38.   Light, AmbientLight: IDirect3DRMLight;
  39.   MeshBuilder: IDirect3DRMMeshBuilder;
  40. begin
  41.   {  Frame making  }
  42.   DXDraw.D3DRM.CreateFrame(DXDraw.Scene, LightFrame);
  43.   DXDraw.D3DRM.CreateFrame(DXDraw.Scene, MeshFrame);
  44.  
  45.   {  Light setting  }
  46.   DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_DIRECTIONAL, 0.9, 0.9, 0.9, Light);
  47.   LightFrame.AddLight(Light);
  48.  
  49.   DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_AMBIENT, 0.1, 0.1, 0.1, AmbientLight);
  50.   DXDraw.Scene.AddLight(AmbientLight);
  51.  
  52.   {  Frame position and posture setting  }
  53.   LightFrame.SetPosition(DXDraw.Scene, 2, 0.0, 22);
  54.   DXDraw.Camera.SetPosition(DXDraw.Scene, -5.0, 10.0, 0.0);
  55.   DXDraw.Camera.SetOrientation(DXDraw.Scene, 0.35, -0.65, 1.0, -0.15, 1.0, 0.5);
  56.  
  57.   MeshFrame.SetPosition(DXDraw.Scene, 0.0, 0.0, 15);
  58.   MeshFrame.SetOrientation(DXDraw.Scene, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0);
  59.   MeshFrame.SetRotation(DXDraw.Scene, 0.0, 1.0, 0.0, 0.05);
  60.  
  61.   {  Mesh making  }
  62.   DXDraw.D3DRM.CreateMeshBuilder(MeshBuilder);
  63.  
  64.   if FileName='' then
  65.     FileName := ExtractFilePath(Application.ExeName)+'cube.x';
  66.   ChDir(ExtractFilePath(FileName));
  67.   MeshBuilder.Load(PChar(FileName), nil, D3DRMLOAD_FROMFILE, nil, nil);
  68.   MeshBuilder.Scale(3, 3, 3);
  69.   MeshFrame.AddVisual(MeshBuilder);
  70.  
  71.   DXTimer.Enabled := True;
  72. end;
  73.  
  74. procedure TMainForm.DXDrawInitializing(Sender: TObject);
  75. var
  76.   ConfigForm: TConfigForm;
  77. begin
  78.   if FConfig then Exit;
  79.   FConfig := True;
  80.   try
  81.     ConfigForm := TConfigForm.Create(Self);
  82.     try
  83.       ConfigForm.ShowModal;
  84.       if ConfigForm.Tag=0 then Abort;
  85.  
  86.       if ConfigForm.ManualButton.Checked then
  87.       begin
  88.         DXDraw.Options := DXDraw.Options - [doSelectDriver];
  89.         DXDraw.Driver := TDirectXDriver(ConfigForm.DriverBox.Items.Objects[ConfigForm.DriverBox.ItemIndex]).GUID;
  90.  
  91.         DXDraw.Display.Width := DisModes[ConfigForm.DisplayModeBox.ItemIndex][0];
  92.         DXDraw.Display.Height := DisModes[ConfigForm.DisplayModeBox.ItemIndex][1];
  93.         DXDraw.Display.BitCount := DisModes[ConfigForm.DisplayModeBox.ItemIndex][2];
  94.  
  95.         if ConfigForm.FullScreenButton.Checked then
  96.           DXDraw.Options := DXDraw.Options + [doFullScreen]
  97.         else
  98.           DXDraw.Options := DXDraw.Options - [doFullScreen];
  99.  
  100.         if ConfigForm.HardwareCheckBox.Checked then
  101.           DXDraw.Options := DXDraw.Options + [doHardware]
  102.         else
  103.           DXDraw.Options := DXDraw.Options - [doHardware];
  104.  
  105.         if ConfigForm.RGBCheckBox.Checked then
  106.           DXDraw.Options := DXDraw.Options + [doRGB]
  107.         else
  108.           DXDraw.Options := DXDraw.Options - [doRGB];
  109.  
  110.         if ConfigForm.MonoCheckBox.Checked then
  111.           DXDraw.Options := DXDraw.Options + [doMono]
  112.         else
  113.           DXDraw.Options := DXDraw.Options - [doMono];
  114.       end;
  115.     finally
  116.       ConfigForm.Free;
  117.     end;
  118.   except
  119.     on E: Exception do
  120.     begin
  121.       Application.ShowMainForm := False;
  122.       Application.HandleException(E);
  123.       Application.Terminate;
  124.     end;
  125.   end;
  126. end;
  127.  
  128. procedure TMainForm.DXDrawInitializeSurface(Sender: TObject);
  129. begin
  130.   if doHardware in DXDraw.NowOptions then
  131.   begin
  132.     {  Bi-linear filtering  }
  133.     DXDraw.D3DRMDevice.SetTextureQuality(D3DRMTEXTURE_LINEAR);
  134.   end;
  135.  
  136.   {  Alpha-blending  }
  137.   DXDraw.D3DRMDevice2.SetRenderMode(D3DRMRENDERMODE_BLENDEDTRANSPARENCY or
  138.     D3DRMRENDERMODE_SORTEDTRANSPARENCY);
  139. end;
  140.  
  141. procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
  142. begin
  143.   if not DXDraw.CanDraw then exit;
  144.  
  145.   DXDraw.Viewport.ForceUpdate(0, 0, DXDraw.SurfaceWidth, DXDraw.SurfaceHeight);
  146.  
  147.   DXDraw.Scene.Move(1.0);
  148.   DXDraw.Render;
  149.  
  150.   with DXDraw.Surface.Canvas do
  151.   begin
  152.     Brush.Style := bsClear;
  153.     Font.Color := clWhite;
  154.     Font.Size := 12;
  155.     Textout(0, 0, 'FPS: '+inttostr(DXTimer.FrameRate));
  156.     if doHardware in DXDraw.NowOptions then
  157.       Textout(0, 14, 'Device: Hardware')
  158.     else
  159.       Textout(0, 14, 'Device: Software');
  160.  
  161.     Release; {  Indispensability  }
  162.   end;
  163.  
  164.   DXDraw.Flip;
  165. end;
  166.  
  167. procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
  168.   Shift: TShiftState);
  169. begin
  170.   {  Application end  }
  171.   if Key=VK_ESCAPE then
  172.     Close;
  173.  
  174.   {  Screen mode change  }
  175.   if (ssAlt in Shift) and (Key=VK_RETURN) then
  176.   begin
  177.     DXDraw.Finalize;
  178.  
  179.     if doFullScreen in DXDraw.Options then
  180.     begin
  181.       RestoreWindow;
  182.  
  183.       DXDraw.Cursor := crDefault;
  184.       BorderStyle := bsSizeable;
  185.       DXDraw.Options := DXDraw.Options - [doFullScreen];
  186.     end else
  187.     begin
  188.       StoreWindow;
  189.  
  190.       DXDraw.Cursor := crNone;
  191.       BorderStyle := bsNone;
  192.       DXDraw.Options := DXDraw.Options + [doFullScreen];
  193.     end;
  194.  
  195.     DXDraw.Initialize;
  196.   end;
  197. end;
  198.  
  199. procedure TMainForm.DXDrawClick(Sender: TObject);
  200. var
  201.   w: Word;
  202. begin
  203.   w := VK_RETURN;
  204.   if doFullScreen in DXDraw.Options then
  205.     FormKeyDown(nil, w, [ssAlt]);
  206.  
  207.   if OpenDialog.Execute then
  208.   begin
  209.     FileName := OpenDialog.FileName;
  210.     DXDraw.Initialize;
  211.   end;
  212. end;
  213.  
  214. end.
  215.