So, this is actually baffling the heck out of me.
Now if I use a Larger RenderImage; it will Render SOMETHING (it's still broken) but keep in mind I'm grabbing an 8x8 Pixel Image; I shouldn't need a RenderImage that's 512x512 or larger for that.
32x32 is the smallest that Hardware Supports... or Vulkan at any rate; and I'm "Fine" with that, but it's just some odd behaviour here.
Notice that if I just use the Screen (BackBuffer) it works perfectly; but ideally I don't want to be using On-Screen Rendering.
// Global Constants
#Constant Enable 1
#Constant Disable 0
#Constant True -1
#Constant False 0
#Constant Null 0
// -- Application Properties
// Window Settings
SetWindowTitle( "Space Invaders" )
SetWindowSize( 1280, 720, Disable ) // Max Supported Resolution, Fullscreen
SetWindowAllowResize( Disable ) // Disable Windows Reside
// Display Settings
SetVirtualResolution( 1280, 720 ) // Rendering Resolution
SetOrientationAllowed( Disable, Disable, Disable, Disable ) // Disable Mobile Auto-Orientation
SetSyncRate( 0, Enable ) // Unlimited Framerate, Enable Performance Mode
SetScissor( 0,0,0,0 ) // Full Screen
UseNewDefaultFonts( Enable )
// -- Application
GoSub Works
//GoSub Broken
Global ApplicationRun As Integer : ApplicationRun = True
Test = CreateSprite( SpriteImage )
SetSpriteScale( Test, 10, 10 )
SetSpritePosition( Test, 10.0, 10.0 )
SetSpriteVisible( Test, Enable )
// -- Main Loop
While ( ApplicationRun )
DrawSprite( Test )
// Sync Display
Sync()
If GetRawKeyPressed( 27 ) Then ApplicationRun = False
EndWhile
// -- End Main Loop
End
// -- Functions
Function CheckBit( Value, Bit )
Bit = Abs( Bit - 8 ) // AppGameKit Stores Binary Backwards :-/
Output = (Value >> Bit) && 1
EndFunction Output
Works:
Global SpriteW As Integer[8] = [ %00111100, %01000010, %10000001, %10100101, %10000001, %10011001, %01000010, %00111100 ]
// Sprite Buffer
//SpriteBuffer As Integer
//SpriteBuffer = CreateRenderImage( 32, 32, 0, 0 ) // Smallest RenderImage that can be used
SpriteImage As Integer = 0 // Where we plan to Store the SpriteImage
White = MakeColor( 255, 255, 255, 255 ) // White, No Alpha
Black = MakeColor( 0, 0, 0, 255 ) // Black, No Alpha
// Render Sprite
//SetRenderToImage( SpriteBuffer, 0 )
ClearScreen()
For PixelY = 0 To 7
For PixelX = 0 To 7
If CheckBit( SpriteW[ PixelY ], PixelX + 1 )
DrawBox( PixelX, PixelY, PixelX + 1, PixelY + 1, White, White, White, White, 1 )
Else
DrawBox( PixelX, PixelY, PixelX + 1, PixelY + 1, Black, Black, Black, Black, 1 )
EndIf
Next
Next
//SetRenderToScreen()
// Copy RenderImage to ColorImage
//SpriteImage = CopyImage( SpriteBuffer, 0, 0, 8, 8 )
SpriteImage = GetImage( 0, 0, 8, 8 )
SetImageMagFilter( SpriteImage, 0 )
//DeleteImage( SpriteBuffer ) // Clean Up
Return
Broken:
Global SpriteB As Integer[8] = [ %00111100, %01000010, %10000001, %10100101, %10000001, %10011001, %01000010, %00111100 ]
// Sprite Buffer
SpriteBuffer As Integer
SpriteBuffer = CreateRenderImage( 32, 32, 0, 0 ) // Smallest RenderImage that can be used
SpriteImageB As Integer = 0 // Where we plan to Store the SpriteImage
White = MakeColor( 255, 255, 255, 255 ) // White, No Alpha
Black = MakeColor( 0, 0, 0, 255 ) // Black, No Alpha
// Render Sprite
SetRenderToImage( SpriteBuffer, 0 )
ClearScreen()
For PixelY = 0 To 7
For PixelX = 0 To 7
If CheckBit( SpriteB[ PixelY ], PixelX + 1 )
DrawBox( PixelX, PixelY, PixelX + 1, PixelY + 1, White, White, White, White, 1 )
Else
DrawBox( PixelX, PixelY, PixelX + 1, PixelY + 1, Black, Black, Black, Black, 1 )
EndIf
Next
Next
SetRenderToScreen()
// Copy RenderImage to ColorImage
SpriteImage = CopyImage( SpriteBuffer, 0, 0, 8, 8 )
SetImageMagFilter( SpriteImage, 0 )
DeleteImage( SpriteBuffer ) // Clean Up
Return
Now if anyone can figure out what I'm doing wrong, that'd be awesome.
As a note... the issue MIGHT be with CopyImage., I'm not sure; as I can use GetImage for anything On-Screen; it doesn't work for Off-Screen (i.e. Rendering to Images, rather than Screen Buffer).