DirectX9-Lib (V. 0.58)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

Deeem2031 hat geschrieben:Irgendwie beachtet niemand mein Beispiel auf der 1. Seite...
Doch schon nur lösche mal

Code: Alles auswählen

    ;StartDrawing(ScreenDX9Output()) 
    ;For y = 0 To 100-1 
    ;  For x = 0 To 100-1 
    ;    Plot(x,y,$FF) 
    ;  Next 
    ;Next 
    ;StopDrawing()
hab nur nicht gelesen was darunter kommt,das irritiert nur :D

/edit

da fällt mir gerade noch ein,muss ich bei den x-, y-koordinaten darauf achten das ich im Bildschirmbereich bleibe z.b. 800x600 ?
merlin
Beiträge: 157
Registriert: 30.07.2005 22:15

Beitrag von merlin »

@Deeem2031:
Example zur Lib 0.5 läuft hier ohne probs! Weiter so!

Das einzige was mir aufgefallen ist...:

Code: Alles auswählen

    For y = 0 To 3*256-1
      For x = 0 To 3*256-1
        DrawingBufferPlotDX9(x,y,RGB($FF,x,y))
      Next
    Next
bei 3*256-1 wird das ganze hier um einiges langsamer als z.b. nur bei 1*256-1 (ok, 1* könnten war hier auch weg lassen, ist aber nur zur verständigung ;-)

Klar, wenn man jeden pixel einzeln zeichnet, das etwas zeit kostet... aber ich denke, es könnte schneller sein oder zumindest einen andern weg (um z.b. Realtime FullscreenFX wie in Intros/Demos zu zaubern!?) ... Aber für den Anfang reicht es allemale... Fehlt nur noch etwas wie CreateTextureDX9(hTexture,width,height), und das man direkt den DXPlot auf die texture anwenden kann... (geht schneller, die texture jeden loop anzuzeigen, anstatt das ganze bild neu zu plotten :-)

Werd mir nachher oder gegen abend nochmal alles genau anschauen und testen... aber wie gesagt, erste tests hier liefen alle absolut sauber!!

Achja.. da wäre nochwas... habe eine 256x256 texture eingeladen...
Mit den von DIr vorgegebenen mode "SetAlphaBlendingDX9(#True,#D3DBLEND_SRCALPHA,#D3DBLEND_ONE) ;Default" = ist die grafik immer blended... (also nicht wir original dargestellt)...

wenn ich aber z.b. "SetAlphaBlendingDX9(#True,#D3DBLEND_SRCALPHA,#D3DBLEND_BOTHINVSRCALPHA" verwende, dann wird die grafik richtig dargestellt (farblich) ...

Daher die frage, ob die von dir vorgegebenen default sache so richtig ist.!?

Achjo... wegen der 24 Bit sache... Habe gerad nochmal geschaut.. kann andere Spiele usw in 16/24/32 bit spielen... Das ATI-PrefsTool, zeigt mir aber nur 16 und 32 bit an... (obwohl ich im system usw auf 24 bit stellen kann...)

Evtl. kann die karte nur echte 16 und 32 bit... und 24 wird vom system irgendwie emuliert oder so.. ka..

Bei der Plot() routine wäre evtl. nicht schlecht wenn die intern ne art clipping hätte.. also wenn ausserhalb des screens (bzw irgendwo im speicher schreiben will), das dieses abgefangen wird.. (oder zumindest wenn debugger enabled...)

weil...

Code: Alles auswählen

    For y = 0 To 1024-1
      For x = 0 To 768-1
        DrawingBufferPlotDX9(x,y,RGB($FF,x,y))
      Next
    Next
Zerstört die geladene Texture (wird als durch den Plot befehl, da außerhalb speicherbereich reinschreibt)
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

merlin hat geschrieben: Bei der Plot() routine wäre evtl. nicht schlecht wenn die intern ne art clipping hätte.. also wenn ausserhalb des screens (bzw irgendwo im speicher schreiben will), das dieses abgefangen wird.. (oder zumindest wenn debugger enabled...)
Das kann man auch selbst erledigen wenn man weiss das man die Pixel nicht ausserhalb setzen darf .
merlin
Beiträge: 157
Registriert: 30.07.2005 22:15

Beitrag von merlin »

SoS hat geschrieben:
merlin hat geschrieben: Bei der Plot() routine wäre evtl. nicht schlecht wenn die intern ne art clipping hätte.. also wenn ausserhalb des screens (bzw irgendwo im speicher schreiben will), das dieses abgefangen wird.. (oder zumindest wenn debugger enabled...)
Das kann man auch selbst erledigen wenn man weiss das man die Pixel nicht ausserhalb setzen darf .
klar, da geb ich dir absolut recht... nur gibt es sicherlich immer wieder ein paar leute (besonders newbies mal vermute), die nicht darauf achten und dann meckern wenn nichts geht (crash)... daher hab ich ja auch den vorschlag gemacht, das nur der debugger das merkt und sich meldet wenn eingeschaltet.. ansonsten die routine (ohne debugger) nicht anspringen, die das prüft.. (weil kostet ja auch wieder zeit)
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

bei mir erledigt das folgende simple procedure

Code: Alles auswählen

Procedure dxplot(x,y,f)

If x>=0 And x<=799 And y>=0 And y<=599
DrawingBufferPlotDX9(x,y,f)
EndIf
EndProcedure
Zuletzt geändert von SoS am 28.08.2005 00:48, insgesamt 1-mal geändert.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

merlin hat geschrieben:Achja.. da wäre nochwas... habe eine 256x256 texture eingeladen...
Mit den von DIr vorgegebenen mode "SetAlphaBlendingDX9(#True,#D3DBLEND_SRCALPHA,#D3DBLEND_ONE) ;Default" = ist die grafik immer blended... (also nicht wir original dargestellt)...

wenn ich aber z.b. "SetAlphaBlendingDX9(#True,#D3DBLEND_SRCALPHA,#D3DBLEND_BOTHINVSRCALPHA" verwende, dann wird die grafik richtig dargestellt (farblich) ...

Daher die frage, ob die von dir vorgegebenen default sache so richtig ist.!?
Das ist einfach nur der Wert der automatisch von OpenScreenDX9 eingestellt wird, wenn man #PB_D3D_AlphaBlending angibt. Weiß aber auch nichtmehr wo ich den Wert eigentlich her habe. Aber es ist sowieso schlauer vorm malen SetAlphaBlendingDX9() aufzurufen, einfach um sicherzustellen was fürn Modus aktiv ist.

Version 0.51:
-Debug-Routine für DrawingBufferPlotDX9()
-DrawingBufferPlotDX9() funktioniert auch im 24bit und 16-bit Modus (Thx to PureFan)
-ConvertColorDX9(RGB) hinzugefügt (wandelt die angegebene farbe in das Format des aktuellen Screens um)
-optionalen Flags-Parameter für DrawingBufferPlotDX9()
->#PB_Plot_NoConvert - Schreibt die Farbe direkt in den Speicher, ohne sie vorher umzuwandeln
->#PB_Plot_CheckRange - Überprüft ob x und y im gültigen Bereich sind
-ResidentDatei hinzugefügt (-> neuer Link www.deeem2031.de/SpriteDX9.zip )
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
merlin
Beiträge: 157
Registriert: 30.07.2005 22:15

Beitrag von merlin »

Da ab version 0.51 ein .res datei mit instaliiert werden muß, wird auch der source etwas kürzer und auf den ersten blick etwas übersichtlicher... der source für das alte example kann jetzt wie folgt aussehen...

Code: Alles auswählen

Just a small modified example by va!n for v0.51 (Original example by Deeem2031):
--------------------------------------------------------------------------------------


InitSpriteDX9()
InitKeyboard()

Debug CheckResolutionDX9(24,#PB_D3D_Windowed)

If OpenScreenDX9(800,600,32,":)",#PB_D3D_Windowed)
  SetWindowPos_(WindowID(),#HWND_TOPMOST,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)

  hTexture = LoadTextureDX9("c:\YourTextureFile.bmp") ;You should free the sprite before you exit the program the library don't do it by itself (supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, .tga)
  If hTexture = 0
    CloseScreenDX9() :  MessageRequester("Error","Cant load Texture") : End
  EndIf
 
  hTexture_DisplaySettings.DisplayTexture_Struc
  ;ClipTexture...
  hTexture_DisplaySettings\pSrcRect\top = 0
  hTexture_DisplaySettings\pSrcRect\left = 0
  hTexture_DisplaySettings\pSrcRect\bottom = 100
  hTexture_DisplaySettings\pSrcRect\right = 100
  ;SetCenter...
  hTexture_DisplaySettings\pCenter\x = 50
  hTexture_DisplaySettings\pCenter\y = 50
  ;I don't like red:
  hTexture_DisplaySettings\ColorFilter = $FF00FFFF ;Don't display the red channel (AARRGGBB)
 
  SetAlphaBlendingDX9(#True,#D3DBLEND_SRCALPHA,#D3DBLEND_ONE) ;Default
 
  alpha.f = 0.0
  Repeat
    alpha + 0.01
    ClearScreenDX9(RGB(0,0,255))

    *p.LONG = DrawingBufferStartDX9() ;return the DrawingBuffer, same to DrawingBuffer()
    Pitch = DrawingBufferPitchDX9()
    For y = 0 To 2*256-1
      For x = 0 To 2*256-1
        DrawingBufferPlotDX9(x,y,RGB($FF,x,y))
      Next
    Next
    DrawingBufferStopDX9()
   
    StartDX9() ;>
      DisplayTextureDX9(hTexture,100.0,600-Abs(500.0*Sin(alpha)),hTexture_DisplaySettings)
    StopDX9() ;<

    FlipBuffersDX9()
    DisableDebugger
    ExamineKeyboard()
  Until KeyboardPushed(#PB_Key_Escape)
  EnableDebugger
  FreeTextureDX9(hTexture)
  CloseScreenDX9()
Else
  MessageRequester("Error","OpenScreenDX9-Error",0)
EndIf 
Viel Spaß :-)
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Version 0.52:

-BoxDX9(x,y,Breite,Höhe,RGB) hinzugefügt
-CreateTextureDX9(Breite,Höhe) hinzugefügt
-deutsche Hilfe-Datei hinzugefügt
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Wow die Lib ist ja richtig gewachsen :shock: Tolles Projekt, mach weiter so! :D
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

ist das normal das die 256x256 Textur so aussieht ?
Zuletzt geändert von SoS am 28.08.2005 23:48, insgesamt 1-mal geändert.
Antworten