DirectX9-Lib (V. 0.58)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

DirectX9-Lib (V. 0.58)

Beitrag von Deeem2031 »

Ich hab (wie versprochen) ein wenig mit Direct3D9 rumgespielt und dabei ist diese Lib rausgekommen (die ich natürlich noch erweitere):

Link: http://www.deeem2031.de/PB/SpriteDX9.zip

Bisher sind diese Befehle enthalten:

InitSpriteDX9()
OpenScreenDX9(w,h,d,t.s)
ScreenDX9Output()
ClearScreenDX9(RGBAColor)
FlipBuffersDX9()
CloseScreenDX9()
LoadTextureDX9(filename.s)
DisplayTextureDX9(texture,x.f,y.f[,*DisplaySettings.DisplayTexture_Struc])
FreeTextureDX9(hTexture)
StartDX9([flags])
StopDX9()
SetAlphaBlendingDX9(enable,src,dest)
CheckResolutionDX9(depth, flags)
DrawingBufferStartDX9([hSprite,]*D3D9_DrawingBuffer)
DrawingBufferPlotDX9(*D3D9_DrawingBuffer,x,y, RGBA[,flags])
DrawingBufferStopDX9([hSprite])
ConvertColorDX9(*D3D9_DrawingBuffer,RGBA)
seit 0.52
BoxDX9(x,y,Breite,Höhe,RGB)
CreateTextureDX9(Breite,Höhe)
seit 0.53
RGBA(R,G,B,A)
DrawingBufferStartTextureDX9(*D3D9_DrawingBuffer,hTexture)
DrawingBufferStopTextureDX9(hTexture)
seit 0.54
LoadSprite/CreateSprite/DisplaySprite/FreeSprite-DX9()
seit 0.55
CatchSpriteDX9(Buffer,Size)
CatchTextureDX9(Buffer,Size)
seit 0.56
SaveSpriteDX9(hSprite, filename, format)
SaveTextureDX9(hTexture, filename, format)
seit 0.57
ColorFilterDX9()
LineDX9()
SetLineWidthDX9()
GetLineWidthDX9()
LoadFontDX9()
DrawTextDX9()
FreeFontDX9()
seit 0.579
TriangleDX9()
TextureWidthDX9()
TextureHeightDX9()
seit 0.58
SetTextureRotationCenterDX9()
ZoomTextureDX9()
RotateTextureDX9()

Die Programme, die die Lib benutzen brauchen mind. eine der "D3DX9_*.dll"s, welche es frei im Inet gibt - z.B. dort: http://www.dll-files.com/dllindex/dll-f ... l?d3dx9_27

Bsp: (Damits läuft müsst ihr natürlich eine BildDatei bei LoadTextureDX9() angeben die bei euch existiert)

Code: Alles auswählen

InitSpriteDX9()
InitKeyboard()

Debug CheckResolutionDX9(32,#PB_D3D_Windowed)

If OpenScreenDX9(800,600,32,OpenWindow(0,0,0,800,600,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,":)"),#PB_D3D_Windowed|#PB_D3D_AlphaBlending)
  ;SetWindowPos_(WindowID(),#HWND_TOPMOST,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE) 
  hTexture = LoadTextureDX9("c:\link2.png") ;You should free the texture 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()
    Debug "Couldn't load the texture!"
    End
  EndIf
  hTexture2 = CreateTextureDX9(256,256) ;You should free the texture before you exit the program the library don't do it by itself
  If hTexture2 = 0
    CloseScreenDX9()
    Debug "Couldn't create the texture!"
    End
  EndIf
  
  hSprite= LoadSpriteDX9("c:\link2.png")
  If hSprite = 0
    CloseScreenDX9()
    Debug "Couldn't load the sprite!"
    End
  EndIf
  
  If DrawingBufferStartDX9(hSprite, DrawingBuffer.D3D9_DrawingBuffer)
    For y = 0 To 56-1
      For x = 0 To 56-1
        DrawingBufferPlotDX9(DrawingBuffer,x,y,RGB(x*4,0,y*4))
      Next
    Next
    DrawingBufferStopDX9(hSprite)
  EndIf
  
  hTexture_DisplaySettings.DisplayTexture_Struc
  hTexture_Center.POINT
  hTexture_SrcRect.RECT
  ;ClipTexture...
  hTexture_SrcRect\top = 0
  hTexture_SrcRect\left = 0
  hTexture_SrcRect\bottom = 100
  hTexture_SrcRect\right = 100
  hTexture_DisplaySettings\pSrcRect = hTexture_SrcRect
  ;SetCenter...
  hTexture_Center\x = 50
  hTexture_Center\y = 50
  hTexture_DisplaySettings\pCenter = hTexture_Center
  ;I don't like red:
  hTexture_DisplaySettings\ColorFilter = $FF00FFFF ;Don't display the red channel (AARRGGBB)
  
  
  If DrawingBufferStartTextureDX9(hTexture2,@DrawingBuffer.D3D9_DrawingBuffer)
    Debug DrawingBuffer\PixelBuffer
    Debug DrawingBuffer\Pitch
    Debug DrawingBuffer\BytesperPixel
    For y = 0 To 256-1
      For x = y To 256-1
        DrawingBufferPlotDX9(DrawingBuffer,x,y,RGBA($FF,x,y,Random(255)))
      Next
      For x = 0 To y-1
        DrawingBufferPlotDX9(DrawingBuffer,x,y,$FFFFFFFF!RGBA($FF,x,y,$80)) ;Invert color
      Next
    Next
    DrawingBufferStopTextureDX9(hTexture2)
  EndIf
  
  alpha.f = 0.0
  Repeat
    alpha + 0.01
    ClearScreenDX9(RGBA(0,0,0,0))
    BoxDX9(5,5,600,400,RGBA(150,150,150,255))
    If DrawingBufferStartDX9(DrawingBuffer.D3D9_DrawingBuffer)
      Color = ConvertColorDX9(DrawingBuffer,RGBA(255,0,0,$FF))
      For y = 10 To 1*256-1
        For x = 10 To 2*256-1
          DrawingBufferPlotDX9(DrawingBuffer,x,y,Color,#PB_Plot_NoConvert)
        Next
      Next
      DrawingBufferStopDX9()
    EndIf
    
    SetAlphaBlendingDX9(#True,#D3DBLEND_SRCALPHA,#D3DBLEND_ONE) ;Default
    StartDX9() ;>
      DisplayTextureDX9(hTexture,100.0,600-Abs(500.0*Sin(alpha)),hTexture_DisplaySettings)
      DisplayTextureDX9(hTexture2,200.0,600-Abs(500.0*Sin(alpha)))
    StopDX9() ;<
    DisplaySpriteDX9(hSprite,Abs(500.0*Sin(alpha)),100)
    FlipBuffersDX9()
    DisableDebugger
    WE = WindowEvent()
    While WE
      If WE = #PB_Event_CloseWindow
        quit = 1
      EndIf
      WE = WindowEvent()
    Wend
    ExamineKeyboard()
  Until KeyboardPushed(#PB_Key_Escape) Or quit
  EnableDebugger
  FreeSpriteDX9(hSprite)
  FreeTextureDX9(hTexture)
  FreeTextureDX9(hTexture2)
  CloseScreenDX9()
Else
  Debug "OpenScreenDX9-Error"
EndIf
Beim erstellen der Lib ist mir allerdings eines aufgefallen: Mit StartDrawing()/StopDrawing() im Code wird man nie AlphaBlending unterstützen können, weil das DirectX einfach nicht hergibt. Wer also bisl vorrausschaut, sollte möglichst wenig 2DDrawing-Befehle im Zusammenhang mit Screens benutzen. (Das war der eigentliche Grund für das Posting ;) )
Zuletzt geändert von Deeem2031 am 19.11.2005 14:14, insgesamt 21-mal geändert.
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 »

Cool. Nur... was hat DX9 für Vorteile? O.o
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

AndyX hat geschrieben:Cool. Nur... was hat DX9 für Vorteile? O.o
Es ist neuer als DX7 :mrgreen:
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 »

LOL :D

Ne im Ernst, is es schneller oder so oder unterstützt es mehr Schnickschnack?
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

AndyX hat geschrieben:LOL :D

Ne im Ernst, is es schneller oder so oder unterstützt es mehr Schnickschnack?
Wozu bringt man wohl eine neue Version raus, natürlich weil da mehr Schnickschnack drin ist :) , obs schneller ist weiß ich nicht...
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Ich hab grad festgestellt, dass der Code nur ohne Debugger läuft... Also erstmal nur ohne Debugger ausprobieren!
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 »

Wenn du jetzt noch Massen an 3D-Befehlen einbaust, zieh ichs mir und probiers aus :mrgreen:
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Kommt ja alles noch, Gedult ;)
Zum Fehler mit dem Debugger: Der Debugger nerft nur rum das man vor ExamineKeyboard(), OpenScreen() ausführen soll, also nichts weiter tragisches, aber funktionieren tuts trotzdem mit Debugger erstmal nicht.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

ich würd ja auch gerne sagen, das das toll ist, leider gehts nicht.
es öffnet sich ein screen, dann wird ein blauer h-grund angezeigt, mit einem pixeligen bzw unerkennbar pixeligem bild links oben......man, ich und mien grafik probleme :cry:
-.-"
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Vielleicht solltest du dir den Code vorher angucken bevor du ihn ausführst, dann wüsstest du nämlich, dass das genau so gewollt ist <)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten