DirectX9-Lib (V. 0.58)
Verfasst: 24.08.2005 16:49
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)
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
)
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