Seite 1 von 13

DirectX9-Lib (V. 0.58)

Verfasst: 24.08.2005 16:49
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 ;) )

Verfasst: 24.08.2005 16:51
von AndyX
Cool. Nur... was hat DX9 für Vorteile? O.o

Verfasst: 24.08.2005 16:54
von Deeem2031
AndyX hat geschrieben:Cool. Nur... was hat DX9 für Vorteile? O.o
Es ist neuer als DX7 :mrgreen:

Verfasst: 24.08.2005 16:54
von AndyX
LOL :D

Ne im Ernst, is es schneller oder so oder unterstützt es mehr Schnickschnack?

Verfasst: 24.08.2005 16:56
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...

Verfasst: 24.08.2005 17:06
von Deeem2031
Ich hab grad festgestellt, dass der Code nur ohne Debugger läuft... Also erstmal nur ohne Debugger ausprobieren!

Verfasst: 24.08.2005 17:08
von AndyX
Wenn du jetzt noch Massen an 3D-Befehlen einbaust, zieh ichs mir und probiers aus :mrgreen:

Verfasst: 24.08.2005 17:12
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.

Verfasst: 24.08.2005 17:22
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:

Verfasst: 24.08.2005 17:26
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 <)