AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Self DXD - Vertices - Problem mit DrawPrimitive (DirectX9)
Thema durchsuchen
Ansicht
Themen-Optionen

Self DXD - Vertices - Problem mit DrawPrimitive (DirectX9)

Ein Thema von TonyMontana · begonnen am 14. Dez 2007 · letzter Beitrag vom 20. Dez 2007
Antwort Antwort
TonyMontana
(Gast)

n/a Beiträge
 
#1

Self DXD - Vertices - Problem mit DrawPrimitive (DirectX9)

  Alt 14. Dez 2007, 05:34
Hallo,

es geht um Self DXD von Martin Pyka, genauer um die Übung zum Thema Vertices. Ich habe mir gedacht, ich mach mal aus den ganzen 8ern
9er und habe dadurch dann das gleiche als DirectX9 Version

Tja, leider haben sich seit DirectX8 anscheinend auch einige Funktionen und Prozeduren geändert, das ganze läuft also nicht, da der
Compiler meckert

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Direct3D9, d3dx9, Direct3D;

type
  CUSTOMVERTEX = record
    x, y, z : Single; // Positionskoordinaten
    color : TD3DColor; // Farbe
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    function GetCustomVertex(_x, _y, _z: single; _color: TD3DColor): CUSTOMVERTEX;
    function InitGeometry:HRESULT;
  private
    procedure OnIdle (Sender: TObject; var done: Boolean);
  public
    { Public declarations }
  end;

const // Format von CUSTOMVERTEX
  D3DFVF_CUSTOMVERTEX = ( D3DFVF_XYZ or D3DFVF_DIFFUSE );

var
  Form1: TForm1;
  d3d9: IDirect3D9;
  d3ddev9: IDirect3DDevice9;
  vbuffer: IDirect3DVertexBuffer9;

implementation

{$R *.DFM}

function TForm1.InitGeometry: HRESULT;
var
  Vertices: Array[0..2] of CUSTOMVERTEX;
  pVertices : PByte;
begin
  // Wenn die Funktion vorzeitig abgebrochen wird, wird E_FAIL zurückgegeben
  Result := E_FAIL;


  // In das Vertex-Array werden die Koordinaten und Farben geschrieben
  Vertices[0] := GetCustomVertex(1, -1, 0, $FFFF0000);
  Vertices[1] := GetCustomVertex(-1, -1, 0, $FF0000FF);
  Vertices[2] := GetCustomVertex(0, 1, 0, $FFFFFF00);


  // Erstellen des Vertexbuffers
  if ( d3ddev9.CreateVertexBuffer( sizeof( CUSTOMVERTEX ) * 3, 0, D3DFVF_CUSTOMVERTEX,
    D3DPOOL_DEFAULT, vbuffer, nil ) <> D3D_OK ) then Exit;


  if ( vbuffer.Lock( 0, sizeof( Vertices ), Pointer(pVertices), 0 ) <> D3D_OK ) then Exit;
  Move( Vertices, pVertices^, sizeof( Vertices ) );
  vbuffer.Unlock;

  result:= D3D_OK;
end;

function TForm1.GetCustomVertex(_x, _y, _z: single; _color: TD3DColor) : CUSTOMVERTEX;
begin
  with result do
   begin
     x := _x;
     y := _y;
     z := _z;
     color := _color;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  d3ddm : TD3DDISPLAYMODE;
  d3dpp : TD3DPRESENT_PARAMETERS;
  //DeviceTypeFlag : Cardinal;
begin
// Erstellen von Direct3D9
  d3d9 := Direct3DCreate9( D3D_SDK_VERSION );
  if ( d3d9 = nil ) then
    Application.Terminate;

// Auslesen der aktuellen Bildschirmeinstellungen (Auflösung, Format, Refreshrate)
  if ( d3d9.GetAdapterDisplayMode( D3DADAPTER_DEFAULT, d3ddm ) <> D3D_OK ) then
    Application.Terminate;

// Alle Werte des Records d3dpp werden auf 0 bzw Nil gestellt
  ZeroMemory( @d3dpp, sizeof( d3dpp ) );

// Das zukünftige Device wird über das Record eingestellt
  d3dpp.Windowed := TRUE;
  d3dpp.SwapEffect := D3DSWAPEFFECT_DISCARD;
  d3dpp.BackBufferFormat := d3ddm.Format;
  d3dpp.EnableAutoDepthStencil := TRUE;
  d3dpp.AutoDepthStencilFormat := D3DFMT_D16;

// Das Device wird erstellt
  if ( d3d9.CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, handle,
       D3DCREATE_SOFTWARE_VERTEXPROCESSING,
       @d3dpp, d3ddev9 ) <> D3D_OK ) then
    Application.Terminate;

 InitGeometry;

 d3ddev9.SetRenderState( D3DRS_LIGHTING, Cardinal( FALSE ) );
 d3ddev8.SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );

 Application.OnIdle := OnIdle;
end;

procedure TForm1.OnIdle (Sender: TObject; var done: Boolean);
begin
  done := false;

  d3ddev9.Clear( 0, nil, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0, 0);
  d3ddev9.BeginScene;

  // Rendern des Vertexbuffers
  d3dDev9.SetStreamSource( 0, vBuffer, sizeof( CUSTOMVERTEX ) , 0);
  d3dDev9.SetVertexShader( nil );
  d3dDev9.SetFVF( D3DFVF_CUSTOMVERTEX );
  d3dDev9.DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

  d3ddev9.EndScene;
  d3ddev9.Present(nil, nil, 0, nil);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 if vbuffer <> nil then vbuffer := nil;
 if d3ddev9 <> nil then d3ddev9 := nil;
 if d3d9 <> nil then d3d9:= nil;
end;

end.
Die Fehlermeldung, die ich erhalte ist
"[Error] Unit1.pas(126): Incompatible types: 'Direct3D9._D3DPRIMITIVETYPE' and 'Unit1._D3DPRIMITIVETYPE'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'".

Wer kann mir einen Tipp geben?

Danke!
  Mit Zitat antworten Zitat
TonyMontana
(Gast)

n/a Beiträge
 
#2

Re: Self DXD - Vertices - Problem mit DrawPrimitive (DirectX

  Alt 19. Dez 2007, 15:49
Scheint wohl eine extrem schwierige Frage zu sein! Gibt es denn noch ein anderes Forum wo es mehr DirectX spezialisten gibt?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: Self DXD - Vertices - Problem mit DrawPrimitive (DirectX

  Alt 19. Dez 2007, 15:54
Zitat:
Unit1._D3DPRIMITIVETYPE
Wo soll der Typ bitte deklariert sein ? In deinem Codeausschnitt kann ich ihn jedenfalls nicht finden.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
TonyMontana
(Gast)

n/a Beiträge
 
#4

Re: Self DXD - Vertices - Problem mit DrawPrimitive (DirectX

  Alt 19. Dez 2007, 17:40
Ja, ich bin auch etwas verwirrt muss ich zugeben. Wenn da jetzt stehen würde Incompatible types: Int und Str wär mir klar was los ist und wie ich das Problem beheben kann. Aber so ...
Ich verstehe nur Bahnhof bei dieser Fehlermeldung.
Noch zur Frage, ich habe keine Ahnung. Das ist der gesamte Quelltext. Ich kann ja mal den Quelltext komplett an den Beitrag hängen...
Angehängte Dateien
Dateityp: rar directx_208.rar (2,1 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
TonyMontana
(Gast)

n/a Beiträge
 
#5

Re: Self DXD - Vertices - Problem mit DrawPrimitive (DirectX

  Alt 20. Dez 2007, 19:20
Es war eigentlich ganz simpel...
direct3d9, d3dx9 sind alle Units, die eingebunden werden müssen. Die Unit Direct3D einfach rausnehmen und es funktioniert wunderbar!
Allerdings sehe ich jetzt gar kein Dreieck
Scheint wohl irgendetwas falsch zu sein an dem Quelltext...
Vielleicht weiß ja jemand woran das liegt?
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:22 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