Seite 7 von 13

Verfasst: 27.08.2005 13:05
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 ?

Verfasst: 27.08.2005 13:40
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)

Verfasst: 27.08.2005 13:48
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 .

Verfasst: 27.08.2005 14:09
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)

Verfasst: 27.08.2005 14:40
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

Verfasst: 27.08.2005 18:17
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 )

Verfasst: 27.08.2005 20:00
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ß :-)

Verfasst: 27.08.2005 23:18
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

Verfasst: 27.08.2005 23:34
von AndyX
Wow die Lib ist ja richtig gewachsen :shock: Tolles Projekt, mach weiter so! :D

Verfasst: 28.08.2005 02:06
von SoS
ist das normal das die 256x256 Textur so aussieht ?