SimpleDX11 Projekt

Anwendungen, Tools, Userlibs und anderes nützliches.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

SimpleDX11 Projekt

Beitrag von Nero »

Hiho allerseits,

EDIT4:
Habe es auf Interfaces (keine COM) umgestellt und die Verzeichnisstruktur geändert.
Ich denke so ist der Aufbau ganz ok und es lässt sich damit Arbeiten

Aktuelle Demos:
InitDirectX11, FirstTriangle, TriangleTexture & DiffuseLighting

ToDo:
- Generell fehlende Funktionalität hinzufügen (ist ja noch im absoluten alpha Stadium)
vor allem die 2D Funktionalität

- Mehr code Kommentare :oops: und anlegen einer Hilfe





EDIT3:
Nach einigen Überlegungen hin und her zwischen C++ oder rein PB ist das ganze nun ein reines PB
Projeckt und auch keine lib mehr sondern eine sammlung an PB proceduren zu einfacheren nutzung
von DirectX11 in PB.

Es kann immernoch nicht wirklich viel auser einen DX11 Screen erstellen und ein einfaches Dreieck rendern.

Die aktuelle version gibt es hier SimpleDX11

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Orginal Topic:
ich habe voriges Jahr mal angefangen mich in ein paar DirectX11 tutorials einzulesen und mir eine kleine dll zu
schreiben leider hatte ich nie die Zeit das mal weiter zu verfolgen, bis vor ein paar tagen. :lol:
Ich habe mich nun wieder drann gemacht und das ganze nicht als dll sondern als *.lib umzusetzen.

Können tut das ganze noch nicht viel auser Informationen der Adapter zu sammeln und einen DX11 Screen
zu Initialisieren aber mit der Zeit werden es hoffentlich ein paar mehr funktionen. :coderselixir:

Ich poste es hier eigentlich nur schonmal damit fall ihr lust hab es testen könnt und mir Bugs meldet.
Es sind noch nicht alzuviele befehle aber lieber zu früh nach fehlern gesucht als zu spät. :bluescreen:

Das ganze ist erst in Version 0.1 ^^ also nicht zuviel erwarten da wird mann nur entäuscht. ^_^
Da ich durch meine Arbeit nicht allzuviel Zeit habe werden Updates wohl eher sehr sporadisch erscheinen.

Vorab um die lib zu nutzen brauch ihr das "Microsoft DirectX SDK (June 2010)" & "Microsoft Visual Studio 10.0"
Hier mal der link zur Lib die liegt im release ordner der zip Datei.
Ich habe mal den C++ Code beigelegt falls es jemanden interessiert.




EDIT2: alten Source gelöscht
Zuletzt geändert von Nero am 30.08.2013 14:56, insgesamt 6-mal geändert.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 lib Projekt

Beitrag von Nero »

Habe mich heute dazu entschieden Directx11 direct aus PB heraus zu Initialisieren und somit
wird die seperate lib überflüssig. :lol:

Die lib war schon über 1MB groß nach dem Kompilieren was nicht wirklich toll ist
Das ganze aus PB heraus hat mit selben funktions umfang (sowenig es auch ist >_>)
nur noch 27kb, ich denke mal das ist ne verbesserung *g*

Habe die zip Datei geändert und neu hochgeladen
SimpleDX11

Das ganze sieht im Code so aus

Code: Alles auswählen

; 
;   SimpleDX11 ver. 0.01
; 
;   Autor: Nero
;   
; 

; Danke an Danilo 
Procedure _ExamineKeyboard()
    DisableDebugger
    Protected retVal = ExamineKeyboard()
    EnableDebugger
    ProcedureReturn retVal
EndProcedure

Procedure _KeyboardPushed(Const.l)
    DisableDebugger
    Protected retVal = KeyboardPushed(Const)
    EnableDebugger
    ProcedureReturn retVal
EndProcedure

Macro ExamineKeyboard()
    _ExamineKeyboard()
EndMacro
  
Macro KeyboardPushed(A)
    _KeyboardPushed(A)
EndMacro
;//////////////////////////////////////////


Procedure.f AlphaCF(Color)
    tmpC.l = ((Color >> 24) & $ff)  
    ProcedureReturn tmpC / 255
EndProcedure 
Procedure.f BlueCF(Color)
    tmpC.l = ((Color >> 16) & $ff)  
    ProcedureReturn tmpC / 255
EndProcedure 
Procedure.f GreenCF(Color)
    tmpC.l = ((Color >> 8) & $ff)  
    ProcedureReturn tmpC / 255
EndProcedure 
Procedure.f RedCF(Color)
    tmpC.l = (Color & $ff)  
    ProcedureReturn tmpC / 255
EndProcedure   
  
  
If Not InitKeyboard()
  MessageRequester("Fehler", "Die Tastatur konnte nicht initialisiert werden!")
  End  
EndIf

XIncludeFile "SimpleDX11_DataSection.pb"
XIncludeFile "SimpleDX11_Imports.pb" 
XIncludeFile "SimpleDX11_Structures.pb" 
XIncludeFile "SimpleDX11_Interfaces.pb" 

   
#Window = 0
WID.l
If OpenWindow(#Window, 50, 200, 800, 600,"Test Simple DirectX 11 Screen (Device 1)",#PB_Window_SystemMenu | #PB_Window_SizeGadget)
  WID = WindowID(#Window)
Else

  MessageRequester("Fehler", "Fenster konnte nicht geöffnet werden!")
  End
EndIf


*SwapChainDesc.DXGI_SWAP_CHAIN_DESC = AllocateMemory(SizeOf(DXGI_SWAP_CHAIN_DESC))
InitializeStructure(SwapChainDesc, DXGI_SWAP_CHAIN_DESC)




*SwapChainDesc\BufferCount                               = 1;
*SwapChainDesc\BufferDesc\Width                          = WindowWidth(#Window);
*SwapChainDesc\BufferDesc\Height                         = WindowHeight(#Window);
*SwapChainDesc\BufferDesc\Format                         = #DXGI_FORMAT_R8G8B8A8_UNORM;
*SwapChainDesc\BufferDesc\RefreshRate\Numerator          = 60;
*SwapChainDesc\BufferDesc\RefreshRate\Denominator        = 1;
*SwapChainDesc\BufferUsage                               = #DXGI_USAGE_RENDER_TARGET_OUTPUT;
*SwapChainDesc\OutputWindow                              = WID;
*SwapChainDesc\SampleDesc\Count                          = 1;
*SwapChainDesc\SampleDesc\Quality                        = 0;
*SwapChainDesc\Windowed                                  = #True;
    
FeatureLvls.l = #D3D_FEATURE_LEVEL_11_0;

*NewDevice.ID3D11Device                 = NULL
*NewSwapChain.IDXGISwapChain            = NULL
*NewDeviceContext.ID3D11DeviceContext   = NULL
*NewFeatureLevel                        = NULL
*NewRenderTargetView.ID3D11RenderTargetView = NULL                    

If D3D11CreateDeviceAndSwapChain(NULL, #D3D_DRIVER_TYPE_HARDWARE, NULL, 0, @FeatureLvls, 1, #D3D11_SDK_VERSION, *SwapChainDesc, @*NewSwapChain, @*NewDevice, @*NewFeatureLevel ,@*NewDeviceContext)
  MessageRequester("Fehler", "SwapChain oder Device konnte nicht erstellt werden")
  End
EndIf    
                          
*pBackBuffer.ID3D11Texture2D  = NULL

If *NewSwapChain\GetBuffer( 0, ?IID_ID3D11Texture2D, @*pBackBuffer)
  MessageRequester("Fehler", "Es konnte kein Backbuffer erstellt werden!")
  End 
EndIf

If *NewDevice\CreateRenderTargetView(*pBackBuffer, 0, @*NewRenderTargetView);
  *pBackBuffer\Release();
  End
EndIf
 *pBackBuffer\Release()


; ViewPort erstellen
ViewPort.D3D11_VIEWPORT
ViewPort\Width    = width;
ViewPort\Height   = height;
ViewPort\MinDepth = 0.0
ViewPort\MaxDepth = 1.0
ViewPort\TopLeftX = 0;
ViewPort\TopLeftY = 0;
    
*NewDeviceContext\RSSetViewports(1, @ViewPort)   
     
NewColor.D3DXCOLOR 
NewColor\r = RedCF($FFB16C47)
NewColor\g = GreenCF($FFB16C47)
NewColor\b = BlueCF($FFB16C47)
NewColor\a = AlphaCF($FFB16C47)
   
Repeat
  ExamineKeyboard()
  Event.l = WindowEvent()  
        
    *NewDeviceContext\ClearRenderTargetView(*NewRenderTargetView, NewColor)
    
    *NewSwapChain\Present(0, 0)
  
   Delay(1)
 
Until Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)

*NewDevice\Release()
*NewSwapChain\Release()
*NewDeviceContext\Release()
*NewRenderTargetView\Release()

Zuletzt geändert von Nero am 21.10.2012 21:38, insgesamt 2-mal geändert.
Benutzeravatar
mpz
Beiträge: 497
Registriert: 14.06.2005 15:53
Computerausstattung: Win 10 Pro, 16 GB Ram, Intel I5 CPU und TI1070 Grafikkarte, PB 5.73 / 6.00 beta4
Wohnort: Berlin, Tempelhof

Re: SimpleDX11 lib Projekt

Beitrag von mpz »

Hallo Nero,

hi, der erste Link zu "SimpleDX11" funktioniert, der zweite Link zu "SimpleDX11" aber nicht. Ich vermute aber das der erste Link reicht...

Ich wollte Dir sagen das ich Dein DX11 Projekt super finde. Auch noch ein Tutorial mit einem Shader Beispiel! Meine Versuche sind immer gescheitert, also mache ruhig weiter, ich lerne gerne dazu...

P.S. Ich wollte immer mein Projekt mp3d auf dx11 erweitern bzw umstellen. Dein Tutorial zeigt mir wie ich das umsetzen könnte. Es fehlt mir damit nur noch viel viel Zeit..

Gruß Michael
Working on - MP3D Engine -
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 lib Projekt

Beitrag von Nero »

Das Shader Turorial ist zwar mit drin funktioniert leider noch nicht.
Da ist nen fieser bug drin und ich find den fehler nicht :bluescreen:
Benutzeravatar
mpz
Beiträge: 497
Registriert: 14.06.2005 15:53
Computerausstattung: Win 10 Pro, 16 GB Ram, Intel I5 CPU und TI1070 Grafikkarte, PB 5.73 / 6.00 beta4
Wohnort: Berlin, Tempelhof

Re: SimpleDX11 lib Projekt

Beitrag von mpz »

Hi,

da unter Windows 7 mit Purebasic x64 das Programm auch noch crashed muss vermutlich was mit den Structuren nicht in Ordnung sein. Hier crashed es bei "D3D11CreateDeviceAndSwapChain".

Ich habe heute leider keine Zeit mehr. Werde es mir in den nächsten Tagen ansehen. Gerade bei *pointern und bei .l und .i Adressen muss man aufpassen. Also nicht verzagen das Problem wir gelöst werden...

GRuß Michael
Working on - MP3D Engine -
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: SimpleDX11 lib Projekt

Beitrag von DrShrek »

Vorschlag:
Wäre es nicht sinnvoll das ganze als 'OpenSource' irgendwo (z.B.: Google Code) abzulegen?
Dann können viele daran mitarbeiten, ohne das es gleich in Chaos bei der Sourceverwaltung endet.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 lib Projekt

Beitrag von Nero »

DrShrek hat geschrieben:Vorschlag:
Wäre es nicht sinnvoll das ganze als 'OpenSource' irgendwo (z.B.: Google Code) abzulegen?
Dann können viele daran mitarbeiten, ohne das es gleich in Chaos bei der Sourceverwaltung endet.
Eigentlich schon nur bin ich mir noch nicht so sicher obs rein PB wird oder ne C++ lib
Das problem ist einfach es scheint manches mit PB einfach nicht zu funktionieren
z.B. ich Enumeriere einen VideoAdapter und will mit diesem nun ein device erstellen.
ES funktioniert mit dem Standart Adapter aber sobald ich als Adapter den eigenen angebe
spuckt D3D11CreateDevice ne error aus. obwohl das Adapter interface zuvor mit ner DX
funktion erstellt wurde und nur der Pointer übergeben wird.

Ich versuche noch ein wenig das problem zu finden ansonsten geh ich zurück zu C++ wo
ich weis das es funktioniert :coderselixir:
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: SimpleDX11 lib Projekt

Beitrag von DrShrek »

Nero hat geschrieben:
DrShrek hat geschrieben:Vorschlag:
Wäre es nicht sinnvoll das ganze als 'OpenSource' irgendwo (z.B.: Google Code) abzulegen?
Dann können viele daran mitarbeiten, ohne das es gleich in Chaos bei der Sourceverwaltung endet.
Eigentlich schon nur bin ich mir noch nicht so sicher obs rein PB wird oder ne C++ lib
Das problem ist einfach es scheint manches mit PB einfach nicht zu funktionieren
z.B. ich Enumeriere einen VideoAdapter und will mit diesem nun ein device erstellen.
ES funktioniert mit dem Standart Adapter aber sobald ich als Adapter den eigenen angebe
spuckt D3D11CreateDevice ne error aus. obwohl das Adapter interface zuvor mit ner DX
funktion erstellt wurde und nur der Pointer übergeben wird.

Ich versuche noch ein wenig das problem zu finden ansonsten geh ich zurück zu C++ wo
ich weis das es funktioniert :coderselixir:
Welcher Error-Code kommt denn?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 lib Projekt

Beitrag von Nero »

DrShrek hat geschrieben:Welcher Error-Code kommt denn?
Das ist die entscheidende frage ich suche schon die ganze zeit nach der passenden error konstante
da die DX Konstanten in PB nicht existieren muß ich alle abgleichen.
Der fehler ist -2147024809 oder besser -7ff8ffa9
Finde nicht wirklich die Passende konstante in der MSDN
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: SimpleDX11 lib Projekt

Beitrag von DrShrek »

Nero hat geschrieben:
DrShrek hat geschrieben:Welcher Error-Code kommt denn?
Das ist die entscheidende frage ich suche schon die ganze zeit nach der passenden error konstante
da die DX Konstanten in PB nicht existieren muß ich alle abgleichen.
Der fehler ist -2147024809 oder besser -7ff8ffa9
Finde nicht wirklich die Passende konstante in der MSDN
Hast Du mal die Source damit das nachvollzogen werden kann?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Antworten