I'd wager it's an issue., but I'm not so convinced the issue is with the Vulkan Renderer.
Now personally I've never seen any performance difference between the Renderers., this said in order for the Graphics to be more of a bottleneck to performance more than the CPU... you need a REALLY weak GPU.
In any case use this as a simple "Stress" Test
// Project: Test
// Created: 20-12-11
// show all errors
#Renderer "Advanced"
SetErrorMode(2)
// set window properties
SetWindowTitle( "Test" )
SetWindowSize( 1280, 720, 1 )
SetWindowAllowResize( 1 ) // allow the user to resize the window
// set display properties
SetVirtualResolution( 1280, 720 ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 0, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 )
SetPrintSize( 22.0 )
Type Time
Previous As Float
Current As Float
Duration As Float
Total As Float
Frequency As Float
EndType
Framerate As Integer
Clock As Time
Clock.Current = ( Timer() * 1000.0 )
Clock.Frequency = 250.0
Object = CreateObjectSphere( 10.0, 1024, 1024 )
X# = 0.0
Y# = 0.0
Z# = 0.0
ImageMemblock = CreateMemblock( 12 + (2048 * 2048 * 4) )
SetMemblockInt( ImageMemblock, 0, 2048 )
SetMemblockInt( ImageMemblock, 4, 2048 )
SetMemblockInt( ImageMemblock, 8, 32 )
Position = 12
BlockSize = 2048 / 8
LineSize = 2048 * BlockSize
Flip = 0
Repeat
If Mod( (Position - 12), BlockSize ) = 0
Flip = Not( Flip )
EndIf
If Mod( (Position - 12), LineSize ) = 0
Flip = Not( Flip )
EndIf
If Flip
Colour = MakeColor( 255, 0, 0 )
Else
Colour = MakeColor( 255, 255, 255 )
EndIf
SetMemblockInt( ImageMemblock, Position, Colour )
Inc Position, 4
Until Position = GetMemblockSize( ImageMemblock )
Image = CreateImageFromMemblock( ImageMemblock )
DeleteMemblock( ImageMemblock )
SetObjectImage( Object, Image, 0 )
Repeat
Clock.Previous = Clock.Current
Clock.Current = ( Timer() * 1000.0 )
Clock.Duration = Clock.Current - Clock.Previous
Clock.Total = Clock.Total + Clock.Duration
Inc Z#, 4.0 * (Clock.Duration / 1000.0)
Inc Y#, -4.0 * (Clock.Duration / 1000.0)
SetObjectRotation( Object, X#, Y#, Z# )
If Clock.Total => Clock.Frequency
Clock.Total = 0.0
Framerate = Trunc( ScreenFPS() )
EndIf
If GetWindowWidth() <> GetVirtualWidth() Or GetWindowHeight() <> GetVirtualHeight()
SetVirtualResolution( GetWindowWidth(), GetWindowHeight() )
EndIf
Print( "Resolution: " + Str( GetVirtualWidth() ) + "x" + Str( GetVirtualHeight() ) + " @ " + Str( Framerate ) + "FPS" )
Print( "Polygons: " + Str( GetPolygonsDrawn() ) )
Sync()
Until GetRawKeyPressed( 27 )
DeleteImage( Image )
DeleteObject( Object )
End
Now as a note., this is 2 Million Shaded Polygons (Basic Pixel Lighting and a Diffuse Texture Pattern) and the Texture itself is 4.2 Million Pixels.
This is where I barely begin to see a performance difference between Vulkan and OpenGL.
As OpenGL Renders this (at 3840x2160., i.e. UHD 4K) at 1100 FPS while Vulkan Renders it at 1160FPS
This is a negligible different to say the least, and might be improved with multiple objects; and I might write a stress test to handle that... but the problem is doing so would require them to be static rather than animated; as doing anything over multiple objects cripples AppGameKit Script performance and we're once again dealing with a CPU not GPU bottleneck to performance.
I will not something interesting though., as it only happens in Vulkan ("Advanced") Mode; and that's the AMD Overlay enables., which is good as it means I can Record with ReLive, use the Performance Metrics, etc.
The oddity of it though is it does come at a NOTICABLE FPS hit... dips down to 920 FPS, while it's onscreen then back to normal when it's not... same with recording, which in most games (or C++ Projects) is rarely causing more than 1-2 FPS as a performance hit.
So why it's affecting AppGameKit the way it does is, as I said interesting.