AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectX9 initialisierungsproblem
Thema durchsuchen
Ansicht
Themen-Optionen

DirectX9 initialisierungsproblem

Ein Thema von snoopy1602 · begonnen am 28. Jul 2008 · letzter Beitrag vom 29. Jul 2008
 
snoopy1602

Registriert seit: 17. Mär 2005
Ort: Lübeck
67 Beiträge
 
Turbo Delphi für Win32
 
#1

DirectX9 initialisierungsproblem

  Alt 28. Jul 2008, 18:00
Hi Leute! Ich versuche mit Turbo Delphi Explorer das Buch DirectX9 mit Delphi durchzuarbeiten. Ich habe aber jetzt folgendes Problem:

Ich habe den Quelltext so eingegeben so wie er im Buch steht und natürlich auch die entsprechenden DirectX units mit eingebungen.
Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, direct3d9, d3dx9;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure OnIdle(Sender: Tobject; var done: boolean);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  direct3d9: IDirect3d9;
  d3ddev9: idirect3ddevice9;

implementation

{$R *.dfm}

function dhinitdgfx(_handle: hwnd; _fullscreen: boolean;
                    _width, _height, _bits: longint;
                    _hal: boolean; out _idirect3d9: idirect3d9;
                    out _idirect3ddevice9: idirect3ddevice9): boolean;
var
  d3dpp : td3dpresent_parameters;
  d3ddm : td3ddisplaymode;
  dtype : td3ddevtype;
  d3dcaps9 : td3dcaps9;
  hardwarevertexprocessing : boolean;
  vertexprocessing : integer;

begin
  result:= false;

  _idirect3d9:= direct3dcreate9(d3d_sdk_version);
  if (_idirect3d9 = nil) then exit;

  fillchar(d3dpp, sizeof(d3dpp), 0);
  with d3dpp do begin
                  windowed:= not _fullscreen;
                  swapeffect:= d3dswapeffect_discard;

                  if (_fullscreen) then
                    begin
                      backbufferwidth:= _width;
                      backbufferheight:= _height;
                      case _bits of
                        16: backbufferformat:= d3dfmt_r5g6b5;
                        32: backbufferformat:= d3dfmt_a8r8g8b8;
                        else exit;
                      end;
                    end else begin
                                if failed(_idirect3d9.GetAdapterDisplayMode(d3dadapter_default, d3ddm)) then
                                  exit;

                      backbufferformat:= d3ddm.Format;
                    end;

  end;
  _idirect3d9.GetDeviceCaps(d3dadapter_default, d3ddevtype_hal, d3dcaps9);

  hardwarevertexprocessing:= d3dcaps9.DevCaps and d3ddevcaps_hwtransformandlight <> 0;

  if hardwarevertexprocessing then
    vertexprocessing:= d3dcreate_hardware_vertexprocessing

    else
      vertexprocessing:= d3dcreate_software_vertexprocessing;

      if _hal then
        dtype:= d3ddevtype_hal
        else
          dtype:= d3ddevtype_ref;


              
      result:= true;
      
end;

procedure dxgfx_init;
var
  d3dpp: td3dpresent_parameters;
  d3ddm: td3ddisplaymode;
begin
  direct3d9:= direct3dcreate9(d3d_sdk_version);
  if direct3d9 = nil then
    begin
      exit;
    end;

    if (not direct3d9.GetAdapterDisplayMode(d3dadapter_default, d3ddm)= d3d_ok) then
    begin
      application.terminate;
      exit;
    end;

    fillchar(d3dpp, sizeof(d3dpp), 0);

    d3dpp.windowed:= false;
    d3dpp.BackBufferWidth:= d3ddm.Width;
    d3dpp.BackBufferHeight:= d3ddm.Height;
    d3dpp.BackBufferFormat:= d3ddm.Format;
    d3dpp.SwapEffect:= d3dswapeffect_discard;

    [b]direct3d9.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, form1.Handle, D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp, d3ddev9);[/b] // Diese Zeile wird bei mir als Fehler markiert//
                                   




end;

procedure dhclosedgfx(_idirect3d9: idirect3d9; _idirect3ddevice9: idirect3ddevice9);
begin
  _idirect3ddevice9:= nil;
  _idirect3d9:= nil;
end;

procedure render;
begin
  d3ddev9.BeginScene;
  d3ddev9.Clear(0, nil, d3dclear_target, d3dcolor_argb(0,0,0,0),1.0, 0);
  d3ddev9.EndScene;
  d3ddev9.Present(nil, nil, 0, nil);
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  dhclosedgfx(direct3d9, d3ddev9);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
dhinitdgfx(handle, false, 0,0,0, true, direct3d9, d3ddev9);
application.OnIdle:= onidle;
end;

procedure tform1.OnIdle(Sender: TObject; var done: Boolean);
begin
  done:= false;
  render;
end;

end.
Ich bin echt ratlos! Ich finde den Fehler einfach nicht!

Als Fehlermeldung wird mir folgendes beim compilieren ausgegeben:

[Pascal Fehler] main.pas(115): E2010 Inkompatible Typen: 'PD3DPresentParameters' und '_D3DPRESENT_PARAMETERS_'

Wie kann das sein?

[edit=Sharky]Delphi-Tags gesetzt. Zukünftig bitte selber machen. Danke. Mfg, Sharky[/edit]
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz