2DDrawing und Screen

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

2DDrawing und Screen

Beitrag von Benubi »

Ich vermisse folgende PB-Variblen, die ich in meinen Libs benutze:

_PB_2DDrawing_CurrentDC

_PB_DirectX_ScreenWidth
_PB_DirectX_ScreenHeight
(... etc. ...)

In der Datei ".\Library SDK\purebasic library descriptor.txt" stehen sie noch immer drin...

Kann mir jemand helfen ? Es muss ja auch kein DirectX Screen sein, wenn es anders geht/sein sollte ;-)


Hier ein Code der ab 4.0 nicht mehr funzt:

Code: Alles auswählen

Procedure.l PB_GetCurrentDC()
      !extrn _PB_2DDrawing_CurrentDC
      !MOV Eax, [_PB_2DDrawing_CurrentDC]
      ProcedureReturn 
EndProcedure
... ya, ich habe es ja schon oben angedeutet... dieser Punkt ist mir eben besonders wichtig...


Ich habe jetzt nen paar Stunden sehr viele "Libs" von mir, Sourcecode für Sourcecode zurückermitteln und umschreiben müssen; nun bräuchte ich nur noch diese Hürden zu meistern, damit ich auch wieder "sehen" kann ...
:praise:

btw bin ich total héppi... ouiii! denn so wollte ich die file und image (...) Befehle schon immer haben . =)

Danke im Vorraus!
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Beitrag von Benubi »

es hat sich leider nichts neues ergeben..

In der Hilfe steht dazu NIX.

Hat denn niemand eine Information dazu, oder gibt es jemandem bei dem es noch funktioniert (der Code im letzten Post)....

Ich bin ja nicht der einzige der sowas in seinen Sourcecodes benutzt; ich habe X Beispiele im CodeArchiv und in diversen Threads gesehn.


Kann mir bitte jemand sagen "es funktioniert bei mir auch nicht", dann komme ich mir nicht so ausgeschlossen vor ... :cry:
schaut doch mal, jeder bekommt eine antwort ausser ich :freak:
:(


- IST das nun ein temporäres problemchen d.h. "_PB_2DDrawing_CurrentDC" ist "momentan" nicht verfügbar ?
- IST die Lib-Architektur nun komplett revoluzioniert worden ?
- IST das nun das !extrn dass nicht mehr funzt.... (siehe alte !Macro ´s)
- Gibt es ein Tool um diese Lib3-Sachen anzusehen (besonders die gepackten bereiche, die mein krasses Hackertool "Notepad.exe" nicht entschlüsseln kann???) Denn Deketektiv "Nubiwan Anonymus Ben" hat krasse Entzugserscheinungen, dass ihm dieses "geistig-technische" Objekt aus seinem Einflussbereich gleitet!

äscht, ish qom mir so langzm ald voor.

:lamer:


ps: ich fang noch an PB-4.0 / Fantaisie - Software Karrikaturen zu veröffentlichen, wenn ich nicht bald wieder was zu tun habe !
<)

ps2: gibt es vielleicht eine "noch aktuellere" changelog datei, bzw. eine "ständig aktuelle" ?
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

>> Kann mir bitte jemand sagen "es funktioniert bei mir auch nicht"

"es funktioniert bei mir auch nicht" :D

Code: Alles auswählen

  Procedure GadgetListHandle()
    !EXTRN _PB_Gadget_CurrentObject
    !MOV Eax, [_PB_Gadget_CurrentObject]
    ProcedureReturn
  EndProcedure 
:-(
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Beitrag von Benubi »

danke hallodri...

Das macht das ganze für mich jetzt etwas einfacher...
Stefan
Beiträge: 125
Registriert: 29.08.2004 10:51
Kontaktdaten:

Beitrag von Stefan »

Den DC bekommst du nun über

Code: Alles auswählen

Procedure DrawingDC()
!extrn _PB_2DDrawing_GlobalStructure
!MOV EAX,[_PB_2DDrawing_GlobalStructure]
ProcedureReturn
Endprocedure
Die weite und breite des ausgewählten Buffers über:

Code: Alles auswählen

 _PB_Screen_Width
 _PB_Screen_Height
Hier noch ein paar andere für PB 4.0 angepasste varibalen:

Code: Alles auswählen

  
  -----------------------------------------------------------------------
  2DDrawing (Language: C)
  ---------

  _PB_2DDrawing_GlobalStructure
  _PB_2DDrawing_Globals

  ; internal functions
  _PB_2DDrawing_SwitchToDC@0
  _PB_2DDrawing_SwitchToDC_THREAD@0

  Structure DrawingInfoStruct
    Type.l    ; Type of the DC
    Window.l  ; Window associated to the DC (if any)
    DC.l      ; DC (Display Device Context)
    ReleaseProcedure.l ; Address to a procedure to release the DC when StopDrawing() is called 
    PixelBuffer.l      ; Address of the memory pixel buffer (DirectX)
    Pitch.l            ; Bytes per line (DirectX)
    Width.l
    Height.l
    Depth.l
  EndStructure

  -----------------------------------------------------------------------
  SimpleList (Language: ASM)
  ----------

  _PB_FreeSimpleLists@0
  _PB_InitSimpleList@0
  _PB_SimpleList_Add
  _PB_SimpleList_AddAfter
  _PB_SimpleList_Count
  _PB_SimpleList_Heap
  _PB_SimpleList_IsID
  _PB_SimpleList_Remove

  -----------------------------------------------------------------------
  Image (Language: C)
  -----
  _PB_Image_Globals
  _PB_Image_Objects
    
  Structure PB_Image
    Bitmap.l     ; OS Bitmap pointer (HBITMAP)
    Width.w      ; Width in pixel of the image
    Height.w     ; Height in pixel of the image
    Depth.w      ; Depth in bpp of the image
    ColorArray.l ; Memory pointer on a color array for 256 colors pictures
    unknown.w
  EndStructure

  -----------------------------------------------------------------------
  Object (Language: ASM)
  ------

  ; functions:
  _PB_Object_Init@12
  _PB_Object_FreeID@8
  _PB_Object_EnumerateStart@4
  _PB_Object_EnumerateNext@8
  _PB_Object_IsObject@8
  _PB_Object_GetObject@8
  _PB_Object_GetOrAllocateID@8 ; returns a pointer to an entry (the ObjectsArea is extended, if needed)

  _PB_Object_InitThreadMemory@12
  _PB_Object_GetThreadMemory@4

  ; Each object has the following structure:
  Structure PB_Object
    Size.l         ; Size of one entry in the ObjectsArea (in Bytes)
    StepSize.l	   ; The number of enties which are allocated at once
    NumEntries.l   ; Current number of Entires
    Unknown.l[4] 
    ObjectsArea.l  ; pointer to the first entry
    Unknown2.l[2]
  EndStructure

  ; Example for allocating space for a Image:
  Procedure IMAGE_GetOrAllocImageSpace(Image) 
    !extrn _PB_Image_Objects
    !extrn _PB_Object_GetOrAllocateID@8
    !Push dword[Esp+4]
    !Push dword[_PB_Image_Objects]
    !CALL _PB_Object_GetOrAllocateID@8
    ProcedureReturn 
  EndProcedure 

  -----------------------------------------------------------------------
  Sprite (Language: C)
  ------
  
  _PB_Screen_Width            ; width of the current buffer selected with UseBuffer()
  _PB_Screen_Height           ; height of the current buffer selected with UseBuffer()
  _PB_Screen_Depth            ; depth (in bpp) of the current buffer selected with UseBuffer()
 
  _PB_Screen_RealWidth        ; width of the back buffer
  _PB_Screen_RealHeight       ; height of the back buffer
  _PB_Screen_Window           ; ScreenID() (HWND)
  _PB_Screen_Windowed

  _PB_Screen_IsActive
  _PB_Screen_WindowedYOffset
  _PB_Screen_WindowedXOffset
  _PB_Screen_AutoStretch
  _PB_Screen_WindowedRightBorder
  _PB_Screen_WindowedBottomBorder
  _PB_Screen_ModesArray        ; pointer to an array of PB_ScreenMode elements
  _PB_Screen_FlipBuffers

  _PB_DirectX_CurrentDC     
  _PB_DirectX_FullScreenWindow  ; ScreenID() when full screen is used (HWND)
  _PB_DirectX_PixelFormat	; Pixel format (see DrawingBufferPixelFormat() ) of the current buffer selected with UseBuffer()

  _PB_DirectX_PrimaryBuffer ; Directdraw visible buffer (IDirectDrawSurface7)
  _PB_DirectX_BackBuffer    ; Directdraw back buffer (IDirectDrawSurface7)
  
  _PB_DirectX_FrameRate     ; Frame rate set with SetFrameRate(FrameRate)
  _PB_DirectX_RefreshRate   ; Refresh rate set with SetRefreshRate(RefreshRate)

  _PB_DirectX_WindowedFrameRate
  _PB_DirectX_WindowClipper           ; IDirectDrawClipper for windowed screen
  _PB_DirectX_ActualRefreshRate
  _PB_DirectX_PreciseTimerDelta
  _PB_DirectX_PreciseTimerOldValue
  _PB_DirectX_SaveAllSpritesSurfaces

  _PB_Sprite_Objects
  _PB_Sprite_CheckFXBuffer
  _PB_Sprite_ColorKey
  _PB_Sprite_CurrentDC
  _PB_Sprite_BufferDC
  _PB_Sprite_SpecialEffectMode
  _PB_Sprite_AlphaBlueModifier
  _PB_Sprite_AlphaGreenModifier
  _PB_Sprite_AlphaRedModifier
  _PB_Sprite_TranslucentLUT

  _PB_Sprite_FillDrawingInfo
  _PB_Sprite_SpriteInfo
  _PB_Sprite_CurrentBitmapInfo
  _PB_Sprite_FXBufferInfo      ; the pointer to a DDSURFACEDESC2 structure
  _PB_Sprite_SpriteFX
  _PB_Sprite_CurrentBitmap     ; DirectDrawSurface7 pointer of the current buffer (set with UseBuffer())
  _PB_Sprite_FXBuffer          ; DirectDrawSurface7 pointer which is used with StartSpecialFX()...StopSpecialFX()
  _PB_Sprite_LimitFrameRate
  _PB_Sprite_DEBUG_GetSurfaceData

  _PB_Screen_V_Quit
  _PB_Screen_V_FlipWindowedBuffers
  _PB_Screen_V_FlipBuffers
  _PB_Screen_V_GetDirectDraw7
  _PB_Screen_V_GetBackBuffer
  _PB_Screen_V_OpenScreen3D

  ; Internal functions
  _PB_Sprite_GetTrueRGBColor@12
  _PB_Sprite_InitDirectXScreen@0
  _PB_Sprite_CreateEmptySprite@20
  _PB_Sprite_CleanUpAll@0
  _PB_Sprite_SaveAllSpritesSurfaces@0
  _PB_Sprite_RestoreAllSpritesSurfaces@0
  _PB_Sprite_ReleaseScreenOutput@0
  _PB_Sprite_SetPixelFormat@0

  Structure PB_Sprite
    Sprite.IDirectDrawSurface7       ; DirectDrawSurface7 pointer
    Width.w       ; Current width of the sprite (could change if ClipSprite() is used)
    Height.w      ; Current height of the sprite (could change if ClipSprite() is used)
    Depth.w       ; depth of the file. (in bits)  
    Mode.w        ; Sprite mode, as described in LoadSprite()
    FileName.l    ; Pointer on the filename, if any
    RealWidth.w   ; Original width of the sprite when it was loaded
    RealHeight.w  ; Original height of the sprite when it was loaded
    ClipX.w       ; X offset if ClipSprite()
    ClipY.w       ; Y offset if ClipSprite()
  EndStructure

  Structure PB_ScreenMode
    ScreenModeWidth.w	     ; Width of the Screen (in pixel)
    ScreenModeHeight.w	     ; Height of the Screen (in pixel)
    ScreenModeDepth.w	     ; Depth of the Screen (in bits per pixel)
    ScreenModeRefreshRate.w  ; Refresh rate of the Screen (in Hz)
  EndStructure


  ; DirectDraw7 Structures:
  Structure DDPIXELFORMAT
    dwSize.l
    dwFlags.l
    dwFourCC.l
    dwRGBBitCount.l
    dwRBitMask.l
    dwGBitMask.l
    dwBBitMask.l
    dwRGBAlphaBitMask.l
  EndStructure 

  Structure DDCOLORKEY
    dwColorSpaceLowValue.l
    dwColorSpaceHighValue.l
  EndStructure

  Structure DDSCAPS2
    dwCaps.l
    dwCaps2.l
    dwCaps3.l
    dwCaps4.l
  EndStructure

  Structure DDSURFACEDESC2
    dwSize.l
    dwFlags.l
    dwHeight.l
    dwWidth.l
    lPitch.l
    dwBackBufferCount.l
    dwRefreshRate.l
    dwAlphaBitDepth.l
    dwReserved.l
    lpSurface.l
    ddckCKDestOverlay.DDCOLORKEY
    ddckCKDestBlt.DDCOLORKEY
    ddckCKSrcOverlay.DDCOLORKEY
    ddckCKSrcBlt.DDCOLORKEY
    ddpfPixelFormat.DDPIXELFORMAT
    ddsCaps.DDSCAPS2
    dwTextureStage.l
  EndStructure

  -----------------------------------------------------------------------
  Sprite3D (Language: C)
  --------
  
  _PB_D3DBase               ; IDirect3D7
  _PB_Direct3D_Device       ; IDirect3DDevice7
  _PB_Direct3D_Start3DState ; contains 1 if Start3D() was successfully called (Start3D() creates the D3DDevice7)
  _PB_3DViewPort	    ; points to a D3DVIEWPORT7 structure 
  _PB_Sprite3D_Quality	    ; the value set by Sprite3DQuality(Quality)
  _PB_Sprite3D_Objects

  Structure PB_Sprite3D
    Texture.IDirectDrawSurface7 ; DirectDrawSurface7
    Vertice.D3DTLVERTEX[4]      ; The 4 vertices for the rectangle sprite
    Width.w			; width set with ZoomSprite3D()
    Height.w			; height set with ZoomSprite3D()
    unknown.l
  EndStructure

  ; Direct3D7 structures:
  Structure D3DTLVERTEX
      sx.f            ; X value of the vertex (in pixels)
      sy.f            ; Y value of the vertex (in pixels)
      sz.f
      rhw.f	      ; reciprocal of homogeneous w
      color.l         ; diffuse color 
      specular.l      ; specular color
      tu.f            ; horizontal texture coordinate of the vertex 
      tv.f            ; vertical texture coordinate of the vertex 
  EndStructure

  Structure D3DVIEWPORT7
    dwX.l
    dwY.l
    dwWidth.l
    dwHeight.l
    dvMinZ.f
    dvMaxZ.f
  EndStructure

  -----------------------------------------------------------------------
  Sprite OpenGL Subsystem (Language: C)
  -----------------------

  _PB_Sprite_ObjectsNumber	; number of entries in _PB_Sprite_ObjectsArea 
  _PB_Sprite_ObjectsArea        ; pointer to an array of PB_Sprite elements

  _PB_Screen_RealWidth        ; width of the back buffer
  _PB_Screen_RealHeight       ; height of the back buffer
  _PB_Screen_Window           ; ScreenID() (HWND)
  _PB_Screen_Windowed
  _PB_Screen_Target

  _PB_Screen_IsActive
  _PB_Screen_WindowedYOffset
  _PB_Screen_WindowedXOffset
  _PB_Screen_AutoStretch
  _PB_Screen_WindowedRightBorder
  _PB_Screen_WindowedBottomBorder

  _PB_DirectX_SaveAllSpritesSurfaces ; ?

  _PB_Sprite_ColorKey
  _PB_Sprite_SpecialEffectMode

  ; Internal functions
  _PB_Sprite_EnumerateAll
  _PB_Sprite_FreeID
  _PB_Sprite_GetObject
  _PB_Sprite_GetOrAllocateID
  _PB_Sprite_ListFirstElement

  _PB_Sprite_CreateEmptySprite@20
  _PB_Sprite_CleanUpAll@0
  _PB_Sprite_SetPixelFormat@0


  Structure PB_Sprite
    Texture.l     ; SpriteID
    Width.w       ; Current width of the sprite (could change if ClipSprite() is used)
    Height.w      ; Current height of the sprite (could change if ClipSprite() is used)
    Depth.w       ; depth of the file. (in bits)  
    Mode.w        ; Sprite mode, as described in LoadSprite()
    FileName.l    ; Pointer on the filename, if any
    RealWidth.w   ; Original width of the sprite when it was loaded
    RealHeight.w  ; Original height of the sprite when it was loaded
    ClipX.w       ; X offset if ClipSprite()
    ClipY.w       ; Y offset if ClipSprite()
  EndStructure

  -----------------------------------------------------------------------
  Sprite3D OpenGL Subsytem (Language: C)
  ------------------------

  _PB_Direct3D_Device        ; contains everytime zero
  _PB_Sprite3D_Quality	     ; the value set by Sprite3DQuality(Quality)
  _PB_Sprite3D_ObjectsNumber ; number of entries in _PB_Sprite3D_ObjectsArea 
  _PB_Sprite3D_ObjectsArea   ; pointer to an array of PB_Sprite3D elements
  _PB_Sprite3D_CurrentDC

  ; internal functions:
  _PB_Sprite3D_FreeID
  _PB_Sprite3D_GetObject
  _PB_Sprite3D_GetOrAllocateID
  _PB_Sprite3D_CurrentObject
  _PB_Sprite3D_ListFirstElement

 
  Structure GLVERTEX2D
    X.f 		; X value of the vertex (in pixels)
    Y.f			; Y value of the vertex (in pixels)
  EndStructure

  Structure PB_Sprite3D
    Texture.l              ; SpriteID ( the same as PeekL(IsSprite3D(#Sprite)) )
    Vertice.GLVERTEX2D[4]  ; The 4 vertices for the rectangle sprite
    Width.w                ; width set with ZoomSprite3D()
    Height.w	           ; height set with ZoomSprite3D()
    Unknown.l
  EndStructure

Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Beitrag von Benubi »

Worte können nur zu Ungenüge beschreiben, wie glücklich mich diese Antwort macht...

Ist nicht das erstmal dass Du mir einen großen gefallen tust... danke Stefan!!!

:allright:
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Vielen Dank , jetzt geht meins auch wieder :D
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Beitrag von Benubi »

Hallo nochmals,

also den DC bekomme ich, und ich habe schon eine Menge damit hinbekommen.

Bei versuchen habe ich allerdings festgestellt ( und das kann man auch aus der Funktion ableiten), dass der DrawingInfoStruct nicht stimmt. Der DC taucht dort erst ab offset[8] auf, wobei in deiner Procedure auf der Struktur offset[0] zugegriffen wird.

btw, wo finde ich die bug-liste ?
Ich habe vielleicht noch einige Sachen entdeckt...

Das eilt jetzt nicht, aber es gibt ja noch ein paar Codes wie " GetDesktopOutput() " oder " GadgetOutput() " die man dann ebenfalls ändern müsste.


mfg

benubi
Stefan
Beiträge: 125
Registriert: 29.08.2004 10:51
Kontaktdaten:

Beitrag von Stefan »

Bei versuchen habe ich allerdings festgestellt ( und das kann man auch aus der Funktion ableiten), dass der DrawingInfoStruct nicht stimmt. Der DC taucht dort erst ab offset[8] auf, wobei in deiner Procedure auf der Struktur offset[0] zugegriffen wird.
Dabei handelt es sich nicht um einen pointer auf die DrawingInfoStruct.
btw, wo finde ich die bug-liste ?
Ich habe vielleicht noch einige Sachen entdeckt...
Was für eine bug-liste meinst du ?
Das eilt jetzt nicht, aber es gibt ja noch ein paar Codes wie " GetDesktopOutput() " oder " GadgetOutput() " die man dann ebenfalls ändern müsste.
Soviel ich weiß, hat sich die DrawingInfoStructure nicht verändert.(Hat bisher bei meinen Tests immer funktioniert)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

PureLibrary Description.txt wurde doch in Beta 2 geupdatet. Demnach:

Code: Alles auswählen

  Structure DrawingInfoStruct
  	Type.l    ; Type of the DC
  	Window.l  ; Window associated to the DC (if any)
  	DC.l      ; DC
  	ReleaseProcedure.l ; Address to a procedure to release the DC when StopDrawing() is called 
  	PixelBuffer.l      ; Address of the memory pixel buffer (DirectX)
  	Pitch.l            ; Pitch
  	Width.l
  	Height.l
  	Depth.l
  EndStructure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Gesperrt