Wenn ich nachfolgenden Code mit "Directx7" kompiliere, dann stimmt die VRAM-Auslastung nahezu mit der errechneten Auslastung (~15 MB) überein.
Wenn ich den Code aber mit dem nativen DX9 kompiliere, dann erhalte ich eine VRAM-Auslastung von 0 Bytes.
Interessant ist dabei auch, dass die RAM-Auslastung unter DX9 bei 34 MB liegt, während sie unter "Directx7" bei nachvollziehbaren 4 MB rumdümpelt.
VRAM-Code:
Code: Alles auswählen
;WinXP Pro (x86), PB 4.41 (x86), PB 4.50 Demo (x86)
EnableExplicit
Define.i Loop
Define.i VRAM_1, VRAM_2, SPR_MEM
InitSprite()
OpenWindow(0,0,0,400,200,"Test",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
OpenWindowedScreen(WindowID(0),0,0,400,200,0,0,0)
VRAM_1 = AvailableScreenMemory()
For Loop = 0 To 99
CreateSprite(Loop,200,200,0)
Next
VRAM_2 = AvailableScreenMemory()
SPR_MEM = 100 * (200*200*4); für 32Bit Sprites
Repeat
ClearScreen(0)
StartDrawing(ScreenOutput())
DrawText(0, 0,"VRAM 1: "+Str(VRAM_1)+" Bytes")
DrawText(0,20,"VRAM 2: "+Str(VRAM_2)+" Bytes")
DrawText(0,40,"VRAM : "+Str(VRAM_1 - AvailableScreenMemory())+" / ~ "+Str(SPR_MEM)+" Bytes")
StopDrawing()
FlipBuffers()
Until WaitWindowEvent(1000) = #PB_Event_CloseWindow
End
Code: Alles auswählen
;WinXP Pro (x86), PB 4.41 (x86)
EnableExplicit
;
Structure PROCESS_MEMORY_COUNTERS
cb.l
PageFaultCount.l
PeakWorkingSetSize.l
WorkingSetSize.l
QuotaPeakPagedPoolUsage.l
QuotaPagedPoolUsage.l
QuotaPeakNonPagedPoolUsage.l
QuotaNonPagedPoolUsage.l
PagefileUsage.l
PeakPagefileUsage.l
EndStructure
;
Define.i Loop, hProcess, RAM_1
Define Pmc.PROCESS_MEMORY_COUNTERS
Prototype.i Proto_GPMI(hProcess, *ppsmemCounters, cb.l)
;
If (Not OpenLibrary(0,"Psapi.dll")) : End : EndIf ; MSDN sagt: "Kernel32.dll" für Win7 & Windows Server 2008 R2
Global GetProcessMemoryInfo_.Proto_GPMI=GetFunction(0,"GetProcessMemoryInfo")
If (Not GetProcessMemoryInfo_) : CloseLibrary(0) : End : EndIf
hProcess = GetCurrentProcess_()
If (Not hProcess) : CloseLibrary(0) : End : EndIf
;
InitSprite()
OpenWindow(0,0,0,400,100,"Test",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
OpenWindowedScreen(WindowID(0),0,0,400,100,0,0,0)
;
For Loop = 0 To 99
CreateSprite(Loop,200,200,0)
Next
;
Repeat
GetProcessMemoryInfo_(hProcess, @Pmc, SizeOf(Pmc))
RAM_1 = Pmc\WorkingSetSize
ClearScreen(0)
StartDrawing(ScreenOutput())
DrawText(0,20,"RAM-Last : "+Str(RAM_1)+" Bytes ("+Str((RAM_1 / Pow(1024,2)))+" MB)")
StopDrawing()
FlipBuffers()
Until WaitWindowEvent(1000) = #PB_Event_CloseWindow
CloseLibrary(0)
End
;
Und nun zu meiner Frage:
Kann das jemand bestätigen und/oder mir erklären woran das liegt ?
MfG,
Burstnibbler
Edit: RAM-Code umgestellt auf ProcessMemoryInfo (genauere Ergebnisse)
