Difference between revisions of "Unit Framebuffer"

From Ultibo.org
Jump to: navigation, search
 
(11 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
----
 
----
  
'''Ultibo Framebuffer interface unit'''
+
'''Ultibo Framebuffer Interface unit'''
 
+
''To be documented''
+
  
 
=== Constants ===
 
=== Constants ===
Line 36: Line 34:
 
|-
 
|-
 
| <code>FRAMEBUFFER_TYPE_VIRTUAL = 2;</code>
 
| <code>FRAMEBUFFER_TYPE_VIRTUAL = 2;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FRAMEBUFFER_TYPE_MAX = 2;</code>
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
Line 50: Line 53:
 
|-
 
|-
 
| <code>FRAMEBUFFER_STATE_ENABLED = 1;</code>
 
| <code>FRAMEBUFFER_STATE_ENABLED = 1;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FRAMEBUFFER_STATE_MAX = 1;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Framebuffer cursor state''' <code> FRAMEBUFFER_CURSOR_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>FRAMEBUFFER_CURSOR_DISABLED = 0;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>FRAMEBUFFER_CURSOR_ENABLED = 1;</code>
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
Line 95: Line 117:
 
| <code>FRAMEBUFFER_FLAG_SYNC = $00000400;</code>
 
| <code>FRAMEBUFFER_FLAG_SYNC = $00000400;</code>
 
| If set the framebuffer supports waiting for vertical sync
 
| If set the framebuffer supports waiting for vertical sync
 +
|-
 +
| <code>FRAMEBUFFER_FLAG_CURSOR = $00000800;</code>
 +
| If set the framebuffer supports a hardware mouse cursor
 
|-
 
|-
 
|}
 
|}
Line 149: Line 174:
 
|-
 
|-
 
| <code>Flags:LongWord;</code>
 
| <code>Flags:LongWord;</code>
| Framebuffer device flags (eg FRAMEBUFFER_FLAG_COMMIT) (Ignored for Allocate / SetProperties)
+
| Framebuffer device flags (eg FRAMEBUFFER_FLAG_COMMIT) (Ignored for Allocate/SetProperties)
 
|-
 
|-
| <code>Address:LongWord;</code>
+
| <code>Address:PtrUInt;</code>
| Framebuffer address (Ignored for Allocate / SetProperties)
+
| Framebuffer address (Ignored for Allocate/SetProperties)
 
|-
 
|-
 
| <code>Size:LongWord;</code>
 
| <code>Size:LongWord;</code>
| Framebuffer size (Bytes) (Ignored for Allocate / SetProperties)
+
| Framebuffer size (Bytes) (Ignored for Allocate/SetProperties)
 
|-
 
|-
 
| <code>Pitch:LongWord;</code>
 
| <code>Pitch:LongWord;</code>
| Framebuffer pitch (Bytes per Line) (Ignored for Allocate / SetProperties)
+
| Framebuffer pitch (Bytes per Line) (Ignored for Allocate/SetProperties)
 
|-
 
|-
 
| <code>Depth:LongWord;</code>
 
| <code>Depth:LongWord;</code>
Line 170: Line 195:
 
|-
 
|-
 
| <code>Format:LongWord;</code>
 
| <code>Format:LongWord;</code>
| Framebuffer color format (eg COLOR_FORMAT_ARGB32) (Ignored for Allocate / SetProperties)
+
| Framebuffer color format (eg COLOR_FORMAT_ARGB32) (Ignored for Allocate/SetProperties)
 
|-
 
|-
 
| <code>PhysicalWidth:LongWord;</code>
 
| <code>PhysicalWidth:LongWord;</code>
Line 204: Line 229:
 
| <code>Rotation:LongWord;</code>
 
| <code>Rotation:LongWord;</code>
 
| Framebuffer Rotation (eg FRAMEBUFFER_ROTATION_180)
 
| Framebuffer Rotation (eg FRAMEBUFFER_ROTATION_180)
 +
|-
 +
| <code>CursorX:LongWord;</code>
 +
| Framebuffer Cursor X (Pixels) (Ignored for Allocate / SetProperties)
 +
|-
 +
| <code>CursorY:LongWord;</code>
 +
| Framebuffer Cursor Y (Pixels) (Ignored for Allocate / SetProperties)
 +
|-
 +
| <code>CursorState:LongWord;</code>
 +
| Framebuffer Cursor State (eg FRAMEBUFFER_CURSOR_ENABLED) (Ignored for Allocate / SetProperties)
 
|-
 
|-
 
|}
 
|}
Line 284: Line 318:
 
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
|-
 
|-
| <code>TFramebufferDeviceCommit = function(Framebuffer:PFramebufferDevice; Address,Size,Flags:LongWord):LongWord;</code>
+
| <code>TFramebufferDeviceCommit = function(Framebuffer:PFramebufferDevice; Address:PtrUInt; Size,Flags:LongWord):LongWord;</code>
 
| style="width: 40%;"|
 
| style="width: 40%;"|
 
|-
 
|-
Line 366: Line 400:
 
|-
 
|-
 
| <code>TFramebufferDeviceSetOffset = function(Framebuffer:PFramebufferDevice; X,Y:LongWord;Pan:Boolean):LongWord;</code>
 
| <code>TFramebufferDeviceSetOffset = function(Framebuffer:PFramebufferDevice; X,Y:LongWord;Pan:Boolean):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 +
'''Framebuffer device set offset ex'''
 +
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TFramebufferDeviceSetOffsetEx = function(Framebuffer:PFramebufferDevice; X,Y:LongWord; Pan,Switch:Boolean):LongWord;</code>
 
| style="width: 40%;"|
 
| style="width: 40%;"|
 
|-
 
|-
Line 393: Line 436:
 
|-
 
|-
 
| <code>TFramebufferDeviceSetBacklight = function(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;</code>
 
| <code>TFramebufferDeviceSetBacklight = function(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 +
'''Framebuffer device set cursor'''
 +
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TFramebufferDeviceSetCursor = function(Framebuffer:PFramebufferDevice; Width,Height,HotspotX,HotspotY:LongWord; Image:Pointer; Len:LongWord):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 +
'''Framebuffer device update cursor'''
 +
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TFramebufferDeviceUpdateCursor = function(Framebuffer:PFramebufferDevice; Enabled:Boolean; X,Y:LongInt; Relative:Boolean):LongWord;</code>
 
| style="width: 40%;"|
 
| style="width: 40%;"|
 
|-
 
|-
Line 484: Line 545:
 
| <code>DeviceSetOffset:TFramebufferDeviceSetOffset;</code>
 
| <code>DeviceSetOffset:TFramebufferDeviceSetOffset;</code>
 
| A device specific DeviceSetOffset method implementing a standard framebuffer device interface (Optional)
 
| A device specific DeviceSetOffset method implementing a standard framebuffer device interface (Optional)
 +
|-
 +
| <code>DeviceSetOffsetEx:TFramebufferDeviceSetOffsetEx;</code>
 +
| A device specific DeviceSetOffsetEx method implementing a standard framebuffer device interface (Optional)
 
|-
 
|-
 
| <code>DeviceGetPalette:TFramebufferDeviceGetPalette;</code>
 
| <code>DeviceGetPalette:TFramebufferDeviceGetPalette;</code>
Line 493: Line 557:
 
| <code>DeviceSetBacklight:TFramebufferDeviceSetBacklight;</code>
 
| <code>DeviceSetBacklight:TFramebufferDeviceSetBacklight;</code>
 
| A device specific DeviceSetBacklight method implementing a standard framebuffer device interface (Optional)
 
| A device specific DeviceSetBacklight method implementing a standard framebuffer device interface (Optional)
 +
|-
 +
| <code>DeviceSetCursor:TFramebufferDeviceSetCursor;</code>
 +
| A device specific DeviceSetCursor method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
 +
|-
 +
| <code>DeviceUpdateCursor:TFramebufferDeviceUpdateCursor;</code>
 +
| A device specific DeviceUpdateCursor method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
 
|-
 
|-
 
| <code>DeviceGetProperties:TFramebufferDeviceGetProperties;</code>
 
| <code>DeviceGetProperties:TFramebufferDeviceGetProperties;</code>
Line 498: Line 568:
 
|-
 
|-
 
| <code>DeviceSetProperties:TFramebufferDeviceSetProperties;</code>
 
| <code>DeviceSetProperties:TFramebufferDeviceSetProperties;</code>
| A device specific DeviceSetProperties method implementing a standard framebuffer device interface (Mandatory)
+
| A device specific DeviceSetProperties method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
 
|-
 
|-
 
|colspan="2"|''Statistics Properties''
 
|colspan="2"|''Statistics Properties''
Line 531: Line 601:
 
| Device lock
 
| Device lock
 
|-
 
|-
| <code>Address:LongWord;</code>
+
| <code>Address:PtrUInt;</code>
 
| Framebuffer address
 
| Framebuffer address
 
|-
 
|-
Line 584: Line 654:
 
| <code>Rotation:LongWord;</code>
 
| <code>Rotation:LongWord;</code>
 
| Framebuffer Rotation (eg FRAMEBUFFER_ROTATION_180)
 
| Framebuffer Rotation (eg FRAMEBUFFER_ROTATION_180)
 +
|-
 +
| <code>CursorX:LongWord;</code>
 +
| Framebuffer Cursor X (Pixels)
 +
|-
 +
| <code>CursorY:LongWord;</code>
 +
| Framebuffer Cursor Y (Pixels)
 +
|-
 +
| <code>CursorState:LongWord;</code>
 +
| Framebuffer Cursor State (eg FRAMEBUFFER_CURSOR_ENABLED)
 
|-
 
|-
 
|colspan="2"|''Buffer Properties''
 
|colspan="2"|''Buffer Properties''
Line 592: Line 671:
 
| <code>CopyBuffer:Pointer;</code>
 
| <code>CopyBuffer:Pointer;</code>
 
| Buffer for overlapped copy
 
| Buffer for overlapped copy
 +
|-
 +
|colspan="2"|''Cursor Properties''
 +
|-
 +
| <code>CursorUpdate:LongBool;</code>
 +
| Flag to indicate if cursor update (Show/Hide) is in progress
 +
|-
 +
| <code>CursorImage:Pointer;</code>
 +
| Buffer for cursor image pixels (COLOR_FORMAT_DEFAULT)
 +
|-
 +
| <code>CursorInput:Pointer;</code>
 +
| Buffer for cursor image pixels (Native color format)
 +
|-
 +
| <code>CursorBuffer:Pointer;</code>
 +
| Buffer for pixels currently under cursor (Native color format)
 +
|-
 +
| <code>CursorOutput:Pointer;</code>
 +
| Buffer for cursor pixels currently displayed (Native color format)
 +
|-
 +
| <code>CursorWidth:LongWord;</code>
 +
| Framebuffer Cursor Width (Pixels)
 +
|-
 +
| <code>CursorHeight:LongWord;</code>
 +
| Framebuffer Cursor Height (Pixels)
 +
|-
 +
| <code>CursorHotspotX:LongWord;</code>
 +
| Framebuffer Cursor Hotspot X (Pixels)
 +
|-
 +
| <code>CursorHotspotY:LongWord;</code>
 +
| Framebuffer Cursor Hotspot Y (Pixels)
 
|-
 
|-
 
|colspan="2"|''Internal Properties''
 
|colspan="2"|''Internal Properties''
Line 627: Line 735:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">procedure FramebufferInit;</pre>
 
<pre style="border: 0; padding-bottom:0px;">procedure FramebufferInit;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Initialize the Framebuffer unit and Framebuffer device table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| None documented
+
| Called only during system startup
 
|-
 
|-
 
|}
 
|}
Line 646: Line 754:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to allocate
 
| The framebuffer device to allocate
 
|-
 
|-
! '''Properties'''
+
! Properties
 
| The framebuffer properties (Width/Height/Depth etc) to use for allocation (Optional)
 
| The framebuffer properties (Width/Height/Depth etc) to use for allocation (Optional)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 664: Line 772:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to release
 
| The framebuffer device to release
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 679: Line 787:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to blank
 
| The framebuffer device to blank
 
|-
 
|-
! '''Blank'''
+
! Blank
| Turn off the display if True / Turn on the display if False
+
| Turn off the display if True/Turn on the display if False
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
| Not all framebuffer devices support blank, returns ERROR_CALL_NOT_IMPLEMENTED if not supported. Devices that support blank should set the flag FRAMEBUFFER_FLAG_BLANK.
+
| Not all framebuffer devices support blank, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 +
Devices that support blank should set the flag FRAMEBUFFER_FLAG_BLANK
 
|-
 
|-
 
|}
 
|}
Line 700: Line 809:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to read from
 
| The framebuffer device to read from
 
|-
 
|-
! '''X'''
+
! X
 
| The column to start reading from
 
| The column to start reading from
 
|-
 
|-
! '''Y'''
+
! Y
 
| The row to start reading from
 
| The row to start reading from
 
|-
 
|-
! '''Buffer'''
+
! Buffer
 
| Pointer to a buffer to receive the read pixels
 
| Pointer to a buffer to receive the read pixels
 
|-
 
|-
! '''Len'''
+
! Len
 
| The number of pixels to read starting at X,Y
 
| The number of pixels to read starting at X,Y
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Pixel data will be returned in the color format of the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache cleaning before a DMA read.
 
| Pixel data will be returned in the color format of the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache cleaning before a DMA read.
 
|-
 
|-
Line 733: Line 842:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to write to
 
| The framebuffer device to write to
 
|-
 
|-
! '''X'''
+
! X
 
| The column to start writing from
 
| The column to start writing from
 
|-
 
|-
! '''Y'''
+
! Y
 
| The row to start writing from
 
| The row to start writing from
 
|-
 
|-
! '''Buffer'''
+
! Buffer
 
| Pointer to a buffer containing the pixels to write
 
| Pointer to a buffer containing the pixels to write
 
|-
 
|-
! '''Len'''
+
! Len
 
| The number of pixels to write starting at X,Y
 
| The number of pixels to write starting at X,Y
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must ensure pixel data is in the correct color format for the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache invalidation after a DMA write.
 
| Caller must ensure pixel data is in the correct color format for the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache invalidation after a DMA write.
 
|-
 
|-
Line 762: Line 871:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceMark(Framebuffer:PFramebufferDevice; X,Y,Width,Height,Flags:LongWord):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceMark(Framebuffer:PFramebufferDevice; X,Y,Width,Height,Flags:LongWord):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Mark a region written to the framebuffer and signal the device to take any neccessary actions</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Mark a region written to the framebuffer and signal the device to take any necessary actions</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to mark
 
| The framebuffer device to mark
 
|-
 
|-
! '''X'''
+
! X
 
| The starting column of the mark
 
| The starting column of the mark
 
|-
 
|-
! '''Y'''
+
! Y
 
| The starting row of the mark
 
| The starting row of the mark
 
|-
 
|-
! '''Width'''
+
! Width
 
| The number of columns to mark
 
| The number of columns to mark
 
|-
 
|-
! '''Height'''
+
! Height
 
| The number of rows to mark
 
| The number of rows to mark
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags used for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
| The flags used for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
| Not all framebuffer devices support mark, returns ERROR_CALL_NOT_IMPLEMENTED if not supported. Devices that support and require mark should set the flag FRAMEBUFFER_FLAG_MARK.
+
| Not all framebuffer devices support mark, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 +
Devices that support and require mark should set the flag FRAMEBUFFER_FLAG_MARK
 
|-
 
|-
 
|}
 
|}
Line 794: Line 904:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceCommit(Framebuffer:PFramebufferDevice; Address,Size,Flags:LongWord):LongWord;</pre>
+
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceCommit(Framebuffer:PFramebufferDevice; Address:PtrUInt; Size,Flags:LongWord):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Commit a region written to the framebuffer and signal the device to take any neccessary actions</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Commit a region written to the framebuffer and signal the device to take any necessary actions</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to commit
 
| The framebuffer device to commit
 
|-
 
|-
! '''Address'''
+
! Address
 
| The starting address of the commit
 
| The starting address of the commit
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size in bytes of the commit
 
| The size in bytes of the commit
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags used for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
| The flags used for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
| Not all framebuffer devices support commit, returns ERROR_CALL_NOT_IMPLEMENTED if not supported. Devices that support and require commit should set the flag FRAMEBUFFER_FLAG_COMMIT.
+
| Not all framebuffer devices support commit, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 +
Devices that support and require commit should set the flag FRAMEBUFFER_FLAG_COMMIT
 
|-
 
|-
 
|}
 
|}
Line 826: Line 937:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to get from
 
| The framebuffer device to get from
 
|-
 
|-
! '''X'''
+
! X
 
| The starting column of the get
 
| The starting column of the get
 
|-
 
|-
! '''Y'''
+
! Y
 
| The starting row of the get
 
| The starting row of the get
 
|-
 
|-
! '''Buffer'''
+
! Buffer
 
| Pointer to a block of memory large enough to hold the pixels in a contiguous block of rows
 
| Pointer to a block of memory large enough to hold the pixels in a contiguous block of rows
 
|-
 
|-
! '''Width'''
+
! Width
 
| The number of columns to get
 
| The number of columns to get
 
|-
 
|-
! '''Height'''
+
! Height
 
| The number of rows to get
 
| The number of rows to get
 
|-
 
|-
! '''Skip'''
+
! Skip
 
| The number of pixels to skip in the buffer after each row (Optional)
 
| The number of pixels to skip in the buffer after each row (Optional)
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Pixel data will be returned in the color format of the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache cleaning before a DMA read.
 
| Pixel data will be returned in the color format of the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache cleaning before a DMA read.
 
|-
 
|-
Line 865: Line 976:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to put to
 
| The framebuffer device to put to
 
|-
 
|-
! '''X'''
+
! X
 
| The starting column of the put
 
| The starting column of the put
 
|-
 
|-
! '''Y'''
+
! Y
 
| The starting row of the put
 
| The starting row of the put
 
|-
 
|-
! '''Buffer'''
+
! Buffer
 
| Pointer to a block of memory containing the pixels in a contiguous block of rows
 
| Pointer to a block of memory containing the pixels in a contiguous block of rows
 
|-
 
|-
! '''Width'''
+
! Width
 
| The number of columns to put
 
| The number of columns to put
 
|-
 
|-
! '''Height'''
+
! Height
 
| The number of rows to put
 
| The number of rows to put
 
|-
 
|-
! '''Skip'''
+
! Skip
 
| The number of pixels to skip in the buffer after each row (Optional)
 
| The number of pixels to skip in the buffer after each row (Optional)
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must ensure pixel data is in the correct color format for the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache invalidation after a DMA write.
 
| Caller must ensure pixel data is in the correct color format for the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache invalidation after a DMA write.
 
|-
 
|-
Line 904: Line 1,015:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to copy on
 
| The framebuffer device to copy on
 
|-
 
|-
! '''X1'''
+
! X1
 
| The starting column to copy from
 
| The starting column to copy from
 
|-
 
|-
! '''Y1'''
+
! Y1
 
| The starting row to copy from
 
| The starting row to copy from
 
|-
 
|-
! '''X2'''
+
! X2
 
| The starting column to copy to
 
| The starting column to copy to
 
|-
 
|-
! '''Y2'''
+
! Y2
 
| The starting row to copy to
 
| The starting row to copy to
 
|-
 
|-
! '''Width'''
+
! Width
 
| The number of columns to copy
 
| The number of columns to copy
 
|-
 
|-
! '''Height'''
+
! Height
 
| The number of rows to copy  
 
| The number of rows to copy  
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| The default method assumes that framebuffer memory is DMA coherent and does not require cache clean/invalidate before or after a DMA read/write.
 
| The default method assumes that framebuffer memory is DMA coherent and does not require cache clean/invalidate before or after a DMA read/write.
 
|-
 
|-
Line 943: Line 1,054:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to fill on
 
| The framebuffer device to fill on
 
|-
 
|-
! '''X'''
+
! X
 
| The starting column of the fill
 
| The starting column of the fill
 
|-
 
|-
! '''Y'''
+
! Y
 
| The starting row of the fill
 
| The starting row of the fill
 
|-
 
|-
! '''Width'''
+
! Width
 
| The number of columns to fill
 
| The number of columns to fill
 
|-
 
|-
! '''Height'''
+
! Height
 
| The number of rows to fill
 
| The number of rows to fill
 
|-
 
|-
! '''Color'''
+
! Color
 
| The color to use for the fill
 
| The color to use for the fill
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
| The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Color must be specified in the correct format for the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache invalidation after a DMA write.
 
| Color must be specified in the correct format for the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache invalidation after a DMA write.
 
|-
 
|-
Line 979: Line 1,090:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to get the start address from
 
| The framebuffer device to get the start address from
 
|-
 
|-
! '''Y'''
+
! Y
 
| The row to get the start address of
 
| The row to get the start address of
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to the start address of the row or nil on failure
 
| Pointer to the start address of the row or nil on failure
 
|-
 
|-
Line 997: Line 1,108:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to get the address from
 
| The framebuffer device to get the address from
 
|-
 
|-
! '''X'''
+
! X
 
| The column to get the start address of
 
| The column to get the start address of
 
|-
 
|-
! '''Y'''
+
! Y
 
| The row to get the start address of
 
| The row to get the start address of
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to the address of the row and column or nil on failure
 
| Pointer to the address of the row and column or nil on failure
 
|-
 
|-
Line 1,018: Line 1,129:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to wait for
 
| The framebuffer device to wait for
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Not all framebuffer devices support wait sync, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 
| Not all framebuffer devices support wait sync, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 
Devices that support wait sync should set the flag FRAMEBUFFER_FLAG_SYNC
 
Devices that support wait sync should set the flag FRAMEBUFFER_FLAG_SYNC
Line 1,037: Line 1,148:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to get the offset from
 
| The framebuffer device to get the offset from
 
|-
 
|-
! '''X'''
+
! X
 
| The X (Column) offset value in pixels returned from the device if successful
 
| The X (Column) offset value in pixels returned from the device if successful
 
|-
 
|-
! '''Y'''
+
! Y
 
| The Y (Row) offset value in pixels returned from the device if successful
 
| The Y (Row) offset value in pixels returned from the device if successful
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| X and Y are relative to the virtual buffer and NOT the physical screen (Where applicable)
 
| X and Y are relative to the virtual buffer and NOT the physical screen (Where applicable)
 
Not all framebuffer devices support X and/or Y offset
 
Not all framebuffer devices support X and/or Y offset
Line 1,059: Line 1,170:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceSetOffset(Framebuffer:PFramebufferDevice; X,Y:LongWord; Pan:Boolean):LongWord;</pre>
+
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceSetOffset(Framebuffer:PFramebufferDevice; X,Y:LongWord; Pan:Boolean):LongWord; inline;</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the virtual offset X and Y of a framebuffer device</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the virtual offset X and Y of a framebuffer device</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to set the offset for
 
| The framebuffer device to set the offset for
 
|-
 
|-
! '''X'''
+
! X
 
| The X (Column) offset value in pixels to set
 
| The X (Column) offset value in pixels to set
 
|-
 
|-
! '''Y'''
+
! Y
 
| The Y (Row) offset value in pixels to set
 
| The Y (Row) offset value in pixels to set
 
|-
 
|-
! '''Pan'''
+
! Pan
 
| If True then pan the display without updating the Offset X and/or Y
 
| If True then pan the display without updating the Offset X and/or Y
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 +
| X and Y are relative to the virtual buffer and NOT the physical screen (Where applicable)
 +
Not all framebuffer devices support X and/or Y offset, returns ERROR_CALL_NOT_IMPLEMENTED if not supported
 +
<br />Devices that support offset X should set the flag FRAMEBUFFER_FLAG_OFFSETX
 +
<br />Devices that support offset Y should set the flag FRAMEBUFFER_FLAG_OFFSETY
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceSetOffsetEx(Framebuffer:PFramebufferDevice; X,Y:LongWord; Pan,Switch:Boolean):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the virtual offset X and Y of a framebuffer device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Framebuffer
 +
| The framebuffer device to set the offset for
 +
|-
 +
! X
 +
| The X (Column) offset value in pixels to set
 +
|-
 +
! Y
 +
| The Y (Row) offset value in pixels to set
 +
|-
 +
! Pan
 +
| If True then pan the display without updating the Offset X and/or Y
 +
|-
 +
! Switch
 +
| If False then update the Offset X and/or Y without moving the display
 +
|-
 +
! Return
 +
| ERROR_SUCCESS if completed or another error code on failure
 +
|-
 +
! Note
 
| X and Y are relative to the virtual buffer and NOT the physical screen (Where applicable)  
 
| X and Y are relative to the virtual buffer and NOT the physical screen (Where applicable)  
 
Not all framebuffer devices support X and/or Y offset, returns ERROR_CALL_NOT_IMPLEMENTED if not supported
 
Not all framebuffer devices support X and/or Y offset, returns ERROR_CALL_NOT_IMPLEMENTED if not supported
Line 1,094: Line 1,238:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to get the palette from
 
| The framebuffer device to get the palette from
 
|-
 
|-
! '''Palette'''
+
! Palette
 
| Pointer to a TFramebufferPalette structure for the palette data
 
| Pointer to a TFramebufferPalette structure for the palette data
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Not all framebuffer devices support 8 bit palette, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 
| Not all framebuffer devices support 8 bit palette, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 
|-
 
|-
Line 1,115: Line 1,259:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to set the palette for
 
| The framebuffer device to set the palette for
 
|-
 
|-
! '''Palette'''
+
! Palette
 
| Pointer to a TFramebufferPalette structure for the palette data
 
| Pointer to a TFramebufferPalette structure for the palette data
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Not all framebuffer devices support 8 bit palette, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 
| Not all framebuffer devices support 8 bit palette, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 
|-
 
|-
Line 1,136: Line 1,280:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to set the backlight
 
| The framebuffer device to set the backlight
 
|-
 
|-
! '''Brightness'''
+
! Brightness
 
| The brightness value to set (Normally 0 to 100)
 
| The brightness value to set (Normally 0 to 100)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
| Not all framebuffer devices support set backlight, returns ERROR_CALL_NOT_IMPLEMENTED if not supported. Devices that support set backlight should set the flag FRAMEBUFFER_FLAG_BACKLIGHT.
+
| Not all framebuffer devices support set backlight, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 +
Devices that support set backlight should set the flag FRAMEBUFFER_FLAG_BACKLIGHT
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceSetCursor(Framebuffer:PFramebufferDevice; Width,Height,HotspotX,HotspotY:LongWord; Image:Pointer; Len:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the mouse cursor image and properties of a framebuffer device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Framebuffer
 +
| The framebuffer device to set the cursor
 +
|-
 +
! Width
 +
| The width of the cursor image in pixels
 +
|-
 +
! Height
 +
| The height of the cursor image in pixels
 +
|-
 +
! HotspotX
 +
| The X hotspot of the cursor image, where the cursor X location will be (Normally 0).
 +
|-
 +
! HotspotY
 +
| The Y hotspot of the cursor image, where the cursor Y location will be (Normally 0).
 +
|-
 +
! Image
 +
| A buffer containing the cursor image pixels in COLOR_FORMAT_DEFAULT format
 +
|-
 +
! Len
 +
| The length of the image buffer in bytes
 +
|-
 +
! Return
 +
| ERROR_SUCCESS if completed or another error code on failure
 +
|-
 +
! Note
 +
| For devices that don't support hardware mouse cursor a software cursor will be implemented
 +
If image is nil then the default cursor image will be used
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceUpdateCursor(Framebuffer:PFramebufferDevice; Enabled:Boolean; X,Y:LongInt; Relative:Boolean):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Update the position and state for the mouse cursor of a framebuffer device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Framebuffer
 +
| The framebuffer device to update the cursor
 +
|-
 +
! Enabled
 +
| If true then show the cursor else hide it
 +
|-
 +
! X
 +
| The cursor X location in pixels
 +
|-
 +
! Y
 +
| The cursor Y location in pixels
 +
|-
 +
! Relative
 +
| If true then X and Y are considered relative to the current position
 +
|-
 +
! Return
 +
| ERROR_SUCCESS if completed or another error code on failure
 +
|-
 +
! Note
 +
| For devices that don't support hardware mouse cursor a software cursor will be implemented
 
|-
 
|-
 
|}
 
|}
Line 1,157: Line 1,369:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to get properties from
 
| The framebuffer device to get properties from
 
|-
 
|-
! '''Properties'''
+
! Properties
 
| Pointer to a TFramebufferProperties structure to return
 
| Pointer to a TFramebufferProperties structure to return
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 1,175: Line 1,387:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Framebuffer'''
+
! Framebuffer
 
| The framebuffer device to set properties for
 
| The framebuffer device to set properties for
 
|-
 
|-
! '''Properties'''
+
! Properties
 
| Pointer to a TFramebufferProperties structure containing the properties
 
| Pointer to a TFramebufferProperties structure containing the properties
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Changing certain properties may cause the framebuffer to be reallocated
 
| Changing certain properties may cause the framebuffer to be reallocated
 
|-
 
|-
Line 1,192: Line 1,404:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceCheckFlag(Framebuffer:PFramebufferDevice; Flag:LongWord):Boolean;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceCheckFlag(Framebuffer:PFramebufferDevice; Flag:LongWord):Boolean;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if a framebuffer device supports a flag value</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Framebuffer
| None documented
+
| The framebuffer device to check
 +
|-
 +
! Flag
 +
| The framebuffer flag to check (eg FRAMEBUFFER_FLAG_BACKLIGHT)
 +
|-
 +
! Return
 +
| True if flag is supported, False if not or on error.
 
|-
 
|-
 
|}
 
|}
Line 1,204: Line 1,422:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceGetFormat(Framebuffer:PFramebufferDevice):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceGetFormat(Framebuffer:PFramebufferDevice):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the color format of a framebuffer device</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Framebuffer
| None documented
+
| The framebuffer device to get from
 +
|-
 +
! Return
 +
| The color format of the framebuffer (eg COLOR_FORMAT_RGB24)
 
|-
 
|-
 
|}
 
|}
Line 1,220: Line 1,441:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to new Framebuffer entry or nil if Framebuffer could not be created
 
| Pointer to new Framebuffer entry or nil if Framebuffer could not be created
 
|-
 
|-
Line 1,232: Line 1,453:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Size'''
+
! Size
 
| Size in bytes to allocate for new Framebuffer (Including the Framebuffer entry)
 
| Size in bytes to allocate for new Framebuffer (Including the Framebuffer entry)
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to new Framebuffer entry or nil if Framebuffer could not be created
 
| Pointer to new Framebuffer entry or nil if Framebuffer could not be created
 
|-
 
|-
Line 1,247: Line 1,468:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Framebuffer
| None documented
+
| The framebuffer device to destroy
 +
|-
 +
! Return
 +
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
 
|}
 
|}
Line 1,259: Line 1,483:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Framebuffer
| None documented
+
| The framebuffer device to register
 +
|-
 +
! Return
 +
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
 
|}
 
|}
Line 1,271: Line 1,498:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Framebuffer
| None documented
+
| The framebuffer device to deregister
 +
|-
 +
! Return
 +
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
 
|}
 
|}
Line 1,279: Line 1,509:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceFind(FramebufferId:LongWord):PFramebufferDevice;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceFind(FramebufferId:LongWord):PFramebufferDevice;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a framebuffer device by ID in the framebuffer table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! FramebufferId
| None documented
+
| The ID number of the framebuffer to find
 +
|-
 +
! Return
 +
| Pointer to framebuffer device entry or nil if not found
 
|-
 
|-
 
|}
 
|}
Line 1,291: Line 1,524:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceFindByName(const Name:String):PFramebufferDevice; inline;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceFindByName(const Name:String):PFramebufferDevice; inline;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a framebuffer device by name in the framebuffer table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Name
| None documented
+
| The name of the framebuffer to find (eg Framebuffer0)
 +
|-
 +
! Return
 +
| Pointer to framebuffer device entry or nil if not found
 
|-
 
|-
 
|}
 
|}
Line 1,303: Line 1,539:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceFindByDescription(const Description:String):PFramebufferDevice; inline;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceFindByDescription(const Description:String):PFramebufferDevice; inline;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a framebuffer device by description in the framebuffer table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Description
| None documented
+
| The description of the framebuffer to find (eg BCM2836 Framebuffer)
 +
|-
 +
! Return
 +
| Pointer to framebuffer device entry or nil if not found
 
|-
 
|-
 
|}
 
|}
Line 1,315: Line 1,554:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceEnumerate(Callback:TFramebufferEnumerate; Data:Pointer):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceEnumerate(Callback:TFramebufferEnumerate; Data:Pointer):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Enumerate all framebuffer devices in the framebuffer table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Callback
| None documented
+
| The callback function to call for each framebuffer in the table
 +
|-
 +
! Data
 +
| A private data pointer to pass to callback for each framebuffer in the table
 +
|-
 +
! Return
 +
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
 
|}
 
|}
Line 1,327: Line 1,572:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceNotification(Framebuffer:PFramebufferDevice; Callback:TFramebufferNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceNotification(Framebuffer:PFramebufferDevice; Callback:TFramebufferNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a notification for framebuffer device changes</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Framebuffer
| None documented
+
| The framebuffer device to notify changes for (Optional, pass nil for all framebuffer devices)
 +
|-
 +
! Callback
 +
| The function to call when a notification event occurs
 +
|-
 +
! Data
 +
| A private data pointer to pass to callback when a notification event occurs
 +
|-
 +
! Notification
 +
| The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER)
 +
|-
 +
! Flags
 +
| The flags to control the notification (eg NOTIFIER_FLAG_WORKER)
 
|-
 
|-
 
|}
 
|}
Line 1,346: Line 1,603:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,356: Line 1,613:
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceGetCount:LongWord; inline;</pre>
+
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceGetCount:LongWord;</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current framebuffer device count</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current framebuffer device count</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,368: Line 1,625:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceGetDefault:PFramebufferDevice; inline;</pre>
+
<pre style="border: 0; padding-bottom:0px;">function FramebufferDeviceGetDefault:PFramebufferDevice;</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current default framebuffer device</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current default framebuffer device</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,385: Line 1,642:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,397: Line 1,654:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,409: Line 1,666:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function FramebufferTypeToString(FramebufferType:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Framebuffer type value to a string</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function FramebufferStateToString(FramebufferState:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Framebuffer state value to a string</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure FramebufferDeviceHideCursor(Framebuffer:PFramebufferDevice);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Restore the framebuffer area under the cursor from the cursor buffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Caller must hold the framebuffer lock
 +
Driver support function only, not intended for direct use by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure FramebufferDeviceShowCursor(Framebuffer:PFramebufferDevice);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Save the framebuffer area under the cursor to the cursor buffer and merge the cursor input with it to create the cursor output. Put the output to the framebuffer.</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Caller must hold the framebuffer lock
 +
Driver support function only, not intended for direct use by applications.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function FramebufferCursorToString(State:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,421: Line 1,740:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,433: Line 1,752:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,445: Line 1,764:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,457: Line 1,776:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-

Latest revision as of 04:50, 10 October 2023

Return to Unit Reference


Description


Ultibo Framebuffer Interface unit

Constants



Framebuffer specific constants FRAMEBUFFER_*
FRAMEBUFFER_NAME_PREFIX = 'Framebuffer'; Name prefix for Framebuffer Devices


Framebuffer device type FRAMEBUFFER_TYPE_*
FRAMEBUFFER_TYPE_NONE = 0;  
FRAMEBUFFER_TYPE_HARDWARE = 1;  
FRAMEBUFFER_TYPE_VIRTUAL = 2;  
 
FRAMEBUFFER_TYPE_MAX = 2;  


Framebuffer device state FRAMEBUFFER_STATE_*
FRAMEBUFFER_STATE_DISABLED = 0;  
FRAMEBUFFER_STATE_ENABLED = 1;  
 
FRAMEBUFFER_STATE_MAX = 1;  


Framebuffer cursor state FRAMEBUFFER_CURSOR_*
FRAMEBUFFER_CURSOR_DISABLED = 0;  
FRAMEBUFFER_CURSOR_ENABLED = 1;  


Framebuffer device flag FRAMEBUFFER_FLAG_*
FRAMEBUFFER_FLAG_NONE = $00000000;  
FRAMEBUFFER_FLAG_DMA = $00000001; If set the framebuffer supports DMA for read/write operations
FRAMEBUFFER_FLAG_MARK = $00000002; If set the framebuffer requires mark after write operations
FRAMEBUFFER_FLAG_COMMIT = $00000004; If set the framebuffer requires commit after write operations
FRAMEBUFFER_FLAG_BLANK = $00000008; If set the framebuffer supports blanking the screen
FRAMEBUFFER_FLAG_CACHED = $00000010; If set framebuffer is in cached memory and cache cleaning should be used
FRAMEBUFFER_FLAG_SWAP = $00000020; If set framebuffer requires byte order of colors to be reversed (BGR <-> RGB)
FRAMEBUFFER_FLAG_BACKLIGHT = $00000040; If set the framebuffer supports setting the backlight brightness
FRAMEBUFFER_FLAG_VIRTUAL = $00000080; If set the framebuffer supports virtual width and height
FRAMEBUFFER_FLAG_OFFSETX = $00000100; If set the framebuffer supports virtual offset X (Horizontal Pan/Flip etc)
FRAMEBUFFER_FLAG_OFFSETY = $00000200; If set the framebuffer supports virtual offset Y (Vertical Pan/Flip etc)
FRAMEBUFFER_FLAG_SYNC = $00000400; If set the framebuffer supports waiting for vertical sync
FRAMEBUFFER_FLAG_CURSOR = $00000800; If set the framebuffer supports a hardware mouse cursor


Framebuffer transfer flag FRAMEBUFFER_TRANSFER_*
FRAMEBUFFER_TRANSFER_NONE = $00000000;  
FRAMEBUFFER_TRANSFER_DMA = $00000001; Use DMA for transfer operations (Note: Buffers must be DMA compatible)


Type definitions



Framebuffer palette

PFramebufferPalette = ^TFramebufferPalette;

TFramebufferPalette = record

Start:LongWord; The number of the first valid entry in the palette
Count:LongWord; The total number of entries in the palette
Entries:array[0..255] of LongWord; The palette entries in COLOR_FORMAT_DEFAULT format

Framebuffer properties

PFramebufferProperties = ^TFramebufferProperties;

TFramebufferProperties = record

Flags:LongWord; Framebuffer device flags (eg FRAMEBUFFER_FLAG_COMMIT) (Ignored for Allocate/SetProperties)
Address:PtrUInt; Framebuffer address (Ignored for Allocate/SetProperties)
Size:LongWord; Framebuffer size (Bytes) (Ignored for Allocate/SetProperties)
Pitch:LongWord; Framebuffer pitch (Bytes per Line) (Ignored for Allocate/SetProperties)
Depth:LongWord; Framebuffer depth (Bits per Pixel)(8/16/24/32)
Order:LongWord; Framebuffer pixel order (BGR/RGB)
Mode:LongWord; Framebuffer alpha mode (Enabled/Reversed/Ignored)
Format:LongWord; Framebuffer color format (eg COLOR_FORMAT_ARGB32) (Ignored for Allocate/SetProperties)
PhysicalWidth:LongWord; Framebuffer Physical Width (Pixels)
PhysicalHeight:LongWord; Framebuffer Physical Height (Pixels)
VirtualWidth:LongWord; Framebuffer Virtual Width (Pixels)
VirtualHeight:LongWord; Framebuffer Virtual Height (Pixels)
OffsetX:LongWord; Framebuffer Virtual Offset X (Pixels)
OffsetY:LongWord; Framebuffer Virtual Offset Y (Pixels)
OverscanTop:LongWord; Framebuffer Overscan Top (Pixels)
OverscanBottom:LongWord; Framebuffer Overscan Bottom (Pixels)
OverscanLeft:LongWord; Framebuffer Overscan Left (Pixels)
OverscanRight:LongWord; Framebuffer Overscan Right (Pixels)
Rotation:LongWord; Framebuffer Rotation (eg FRAMEBUFFER_ROTATION_180)
CursorX:LongWord; Framebuffer Cursor X (Pixels) (Ignored for Allocate / SetProperties)
CursorY:LongWord; Framebuffer Cursor Y (Pixels) (Ignored for Allocate / SetProperties)
CursorState:LongWord; Framebuffer Cursor State (eg FRAMEBUFFER_CURSOR_ENABLED) (Ignored for Allocate / SetProperties)

Framebuffer enumeration callback

TFramebufferEnumerate = function(Framebuffer:PFramebufferDevice; Data:Pointer):LongWord;

Framebuffer notification callback

TFramebufferNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;

Framebuffer device allocate

TFramebufferDeviceAllocate = function(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;

Framebuffer device release

TFramebufferDeviceRelease = function(Framebuffer:PFramebufferDevice):LongWord;

Framebuffer device blank

TFramebufferDeviceBlank = function(Framebuffer:PFramebufferDevice; Blank:Boolean):LongWord;

Framebuffer device read

TFramebufferDeviceRead = function(Framebuffer:PFramebufferDevice; X,Y:LongWord; Buffer:Pointer; Len,Flags:LongWord):LongWord;

Framebuffer device write

TFramebufferDeviceWrite = function(Framebuffer:PFramebufferDevice; X,Y:LongWord; Buffer:Pointer; Len,Flags:LongWord):LongWord;

Framebuffer device mark

TFramebufferDeviceMark = function(Framebuffer:PFramebufferDevice; X,Y,Width,Height,Flags:LongWord):LongWord;

Framebuffer device commit

TFramebufferDeviceCommit = function(Framebuffer:PFramebufferDevice; Address:PtrUInt; Size,Flags:LongWord):LongWord;

Framebuffer device get rect

TFramebufferDeviceGetRect = function(Framebuffer:PFramebufferDevice; X,Y:LongWord; Buffer:Pointer; Width,Height,Skip,Flags:LongWord):LongWord;

Framebuffer device put rect

TFramebufferDevicePutRect = function(Framebuffer:PFramebufferDevice; X,Y:LongWord; Buffer:Pointer; Width,Height,Skip,Flags:LongWord):LongWord;

Framebuffer device copy rect

TFramebufferDeviceCopyRect = function(Framebuffer:PFramebufferDevice; X1,Y1,X2,Y2,Width,Height,Flags:LongWord):LongWord;

Framebuffer device fill rect

TFramebufferDeviceFillRect = function(Framebuffer:PFramebufferDevice; X,Y,Width,Height,Color,Flags:LongWord):LongWord;

Framebuffer device get line

TFramebufferDeviceGetLine = function(Framebuffer:PFramebufferDevice; Y:LongWord):Pointer;

Framebuffer device get point

TFramebufferDeviceGetPoint = function(Framebuffer:PFramebufferDevice; X,Y:LongWord):Pointer;

Framebuffer device wait sync

TFramebufferDeviceWaitSync = function(Framebuffer:PFramebufferDevice):LongWord;

Framebuffer device get offset

TFramebufferDeviceGetOffset = function(Framebuffer:PFramebufferDevice; var X,Y:LongWord):LongWord;

Framebuffer device set offset

TFramebufferDeviceSetOffset = function(Framebuffer:PFramebufferDevice; X,Y:LongWord;Pan:Boolean):LongWord;

Framebuffer device set offset ex

TFramebufferDeviceSetOffsetEx = function(Framebuffer:PFramebufferDevice; X,Y:LongWord; Pan,Switch:Boolean):LongWord;

Framebuffer device get palette

TFramebufferDeviceGetPalette = function(Framebuffer:PFramebufferDevice; Palette:PFramebufferPalette):LongWord;

Framebuffer device set palette

TFramebufferDeviceSetPalette = function(Framebuffer:PFramebufferDevice; Palette:PFramebufferPalette):LongWord;

Framebuffer device set backlight

TFramebufferDeviceSetBacklight = function(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;

Framebuffer device set cursor

TFramebufferDeviceSetCursor = function(Framebuffer:PFramebufferDevice; Width,Height,HotspotX,HotspotY:LongWord; Image:Pointer; Len:LongWord):LongWord;

Framebuffer device update cursor

TFramebufferDeviceUpdateCursor = function(Framebuffer:PFramebufferDevice; Enabled:Boolean; X,Y:LongInt; Relative:Boolean):LongWord;

Framebuffer device get properties

TFramebufferDeviceGetProperties = function(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;

Framebuffer device set properties

TFramebufferDeviceSetProperties = function(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;

Framebuffer device

PFramebufferDevice = ^TFramebufferDevice;

TFramebufferDevice = record

Device Properties
Device:TDevice; The Device entry for this Framebuffer device
Framebuffer Properties
FramebufferId:LongWord; Unique Id of this Framebuffer device in the Framebuffer device table
FramebufferState:LongWord; Framebuffer device state (eg FRAMEBUFFER_STATE_ENABLED)
DeviceAllocate:TFramebufferDeviceAllocate; A device specific DeviceAllocate method implementing a standard framebuffer device interface (Mandatory)
DeviceRelease:TFramebufferDeviceRelease; A device specific DeviceRelease method implementing a standard framebuffer device interface (Mandatory)
DeviceBlank:TFramebufferDeviceBlank; A device specific DeviceBlank method implementing a standard framebuffer device interface (Optional)
DeviceRead:TFramebufferDeviceRead; A device specific DeviceRead method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceWrite:TFramebufferDeviceWrite; A device specific DeviceWrite method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceMark:TFramebufferDeviceMark; A device specific DeviceMark method implementing a standard framebuffer device interface (Optional)
DeviceCommit:TFramebufferDeviceCommit; A device specific DeviceCommit method implementing a standard framebuffer device interface (Optional)
DeviceGetRect:TFramebufferDeviceGetRect; A device specific DeviceGetRect method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DevicePutRect:TFramebufferDevicePutRect; A device specific DevicePutRect method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceCopyRect:TFramebufferDeviceCopyRect; A device specific DeviceCopyRect method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceFillRect:TFramebufferDeviceFillRect; A device specific DeviceFillRect method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceGetLine:TFramebufferDeviceGetLine; A device specific DeviceGetLine method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceGetPoint:TFramebufferDeviceGetPoint; A device specific DeviceGetPoint method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceWaitSync:TFramebufferDeviceWaitSync; A device specific DeviceWaitSync method implementing a standard framebuffer device interface (Optional)
DeviceGetOffset:TFramebufferDeviceGetOffset; A device specific DeviceGetOffset method implementing a standard framebuffer device interface (Optional)
DeviceSetOffset:TFramebufferDeviceSetOffset; A device specific DeviceSetOffset method implementing a standard framebuffer device interface (Optional)
DeviceSetOffsetEx:TFramebufferDeviceSetOffsetEx; A device specific DeviceSetOffsetEx method implementing a standard framebuffer device interface (Optional)
DeviceGetPalette:TFramebufferDeviceGetPalette; A device specific DeviceGetPalette method implementing a standard framebuffer device interface (Optional)
DeviceSetPalette:TFramebufferDeviceSetPalette; A device specific DeviceSetPalette method implementing a standard framebuffer device interface (Optional)
DeviceSetBacklight:TFramebufferDeviceSetBacklight; A device specific DeviceSetBacklight method implementing a standard framebuffer device interface (Optional)
DeviceSetCursor:TFramebufferDeviceSetCursor; A device specific DeviceSetCursor method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceUpdateCursor:TFramebufferDeviceUpdateCursor; A device specific DeviceUpdateCursor method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceGetProperties:TFramebufferDeviceGetProperties; A device specific DeviceGetProperties method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
DeviceSetProperties:TFramebufferDeviceSetProperties; A device specific DeviceSetProperties method implementing a standard framebuffer device interface (Or nil if the default method is suitable)
Statistics Properties
AllocateCount:LongWord;  
ReleaseCount:LongWord;  
ReadCount:LongWord;  
WriteCount:LongWord;  
GetCount:LongWord;  
PutCount:LongWord;  
CopyCount:LongWord;  
FillCount:LongWord;  
Driver Properties
Lock:TMutexHandle; Device lock
Address:PtrUInt; Framebuffer address
Size:LongWord; Framebuffer size (Bytes)
Pitch:LongWord; Framebuffer pitch (Bytes per Line)
Depth:LongWord; Framebuffer depth (Bits per Pixel)(8/16/24/32)
Order:LongWord; Framebuffer pixel order (BGR/RGB)
Mode:LongWord; Framebuffer alpha mode (Enabled/Reversed/Ignored)
Format:LongWord; Framebuffer color format (eg COLOR_FORMAT_ARGB32)
PhysicalWidth:LongWord; Framebuffer Physical Width (Pixels)
PhysicalHeight:LongWord; Framebuffer Physical Height (Pixels)
VirtualWidth:LongWord; Framebuffer Virtual Width (Pixels)
VirtualHeight:LongWord; Framebuffer Virtual Height (Pixels)
OffsetX:LongWord; Framebuffer Virtual Offset X (Pixels)
OffsetY:LongWord; Framebuffer Virtual Offset Y (Pixels)
OverscanTop:LongWord; Framebuffer Overscan Top (Pixels)
OverscanBottom:LongWord; Framebuffer Overscan Bottom (Pixels)
OverscanLeft:LongWord; Framebuffer Overscan Left (Pixels)
OverscanRight:LongWord; Framebuffer Overscan Right (Pixels)
Rotation:LongWord; Framebuffer Rotation (eg FRAMEBUFFER_ROTATION_180)
CursorX:LongWord; Framebuffer Cursor X (Pixels)
CursorY:LongWord; Framebuffer Cursor Y (Pixels)
CursorState:LongWord; Framebuffer Cursor State (eg FRAMEBUFFER_CURSOR_ENABLED)
Buffer Properties
LineBuffer:Pointer; Buffer for line fills
CopyBuffer:Pointer; Buffer for overlapped copy
Cursor Properties
CursorUpdate:LongBool; Flag to indicate if cursor update (Show/Hide) is in progress
CursorImage:Pointer; Buffer for cursor image pixels (COLOR_FORMAT_DEFAULT)
CursorInput:Pointer; Buffer for cursor image pixels (Native color format)
CursorBuffer:Pointer; Buffer for pixels currently under cursor (Native color format)
CursorOutput:Pointer; Buffer for cursor pixels currently displayed (Native color format)
CursorWidth:LongWord; Framebuffer Cursor Width (Pixels)
CursorHeight:LongWord; Framebuffer Cursor Height (Pixels)
CursorHotspotX:LongWord; Framebuffer Cursor Hotspot X (Pixels)
CursorHotspotY:LongWord; Framebuffer Cursor Hotspot Y (Pixels)
Internal Properties
Prev:PFramebufferDevice; Previous entry in Framebuffer device table
Next:PFramebufferDevice; Next entry in Framebuffer device table


Public variables



Initialization handlers

FramebufferInitHandler:TFramebufferInit;


Function declarations



Initialization functions

procedure FramebufferInit;
Description: Initialize the Framebuffer unit and Framebuffer device table
Note Called only during system startup


Framebuffer functions

function FramebufferDeviceAllocate(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Description: Allocate and enable a framebuffer device using supplied properties or defaults
Framebuffer The framebuffer device to allocate
Properties The framebuffer properties (Width/Height/Depth etc) to use for allocation (Optional)
Return ERROR_SUCCESS if completed or another error code on failure


function FramebufferDeviceRelease(Framebuffer:PFramebufferDevice):LongWord;
Description: Disable and release a framebuffer device
Framebuffer The framebuffer device to release
Return ERROR_SUCCESS if completed or another error code on failure


function FramebufferDeviceBlank(Framebuffer:PFramebufferDevice; Blank:Boolean):LongWord;
Description: Blank (Turn off) the display of a framebuffer device
Framebuffer The framebuffer device to blank
Blank Turn off the display if True/Turn on the display if False
Return ERROR_SUCCESS if completed or another error code on failure
Note Not all framebuffer devices support blank, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.

Devices that support blank should set the flag FRAMEBUFFER_FLAG_BLANK


function FramebufferDeviceRead(Framebuffer:PFramebufferDevice; X,Y:LongWord; Buffer:Pointer; Len,Flags:LongWord):LongWord;
Description: Read one or more pixels from framebuffer device memory to a supplied buffer
Framebuffer The framebuffer device to read from
X The column to start reading from
Y The row to start reading from
Buffer Pointer to a buffer to receive the read pixels
Len The number of pixels to read starting at X,Y
Flags The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
Return ERROR_SUCCESS if completed or another error code on failure
Note Pixel data will be returned in the color format of the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache cleaning before a DMA read.


function FramebufferDeviceWrite(Framebuffer:PFramebufferDevice; X,Y:LongWord; Buffer:Pointer; Len,Flags:LongWord):LongWord;
Description: Write one or more pixels to framebuffer device memory from a supplied buffer
Framebuffer The framebuffer device to write to
X The column to start writing from
Y The row to start writing from
Buffer Pointer to a buffer containing the pixels to write
Len The number of pixels to write starting at X,Y
Flags The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
Return ERROR_SUCCESS if completed or another error code on failure
Note Caller must ensure pixel data is in the correct color format for the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache invalidation after a DMA write.


function FramebufferDeviceMark(Framebuffer:PFramebufferDevice; X,Y,Width,Height,Flags:LongWord):LongWord;
Description: Mark a region written to the framebuffer and signal the device to take any necessary actions
Framebuffer The framebuffer device to mark
X The starting column of the mark
Y The starting row of the mark
Width The number of columns to mark
Height The number of rows to mark
Flags The flags used for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
Return ERROR_SUCCESS if completed or another error code on failure
Note Not all framebuffer devices support mark, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.

Devices that support and require mark should set the flag FRAMEBUFFER_FLAG_MARK


function FramebufferDeviceCommit(Framebuffer:PFramebufferDevice; Address:PtrUInt; Size,Flags:LongWord):LongWord;
Description: Commit a region written to the framebuffer and signal the device to take any necessary actions
Framebuffer The framebuffer device to commit
Address The starting address of the commit
Size The size in bytes of the commit
Flags The flags used for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
Return ERROR_SUCCESS if completed or another error code on failure
Note Not all framebuffer devices support commit, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.

Devices that support and require commit should set the flag FRAMEBUFFER_FLAG_COMMIT


function FramebufferDeviceGetRect(Framebuffer:PFramebufferDevice; X,Y:LongWord; Buffer:Pointer; Width,Height,Skip,Flags:LongWord):LongWord;
Description: Get a rectangular area of pixels from framebuffer memory to a supplied buffer
Framebuffer The framebuffer device to get from
X The starting column of the get
Y The starting row of the get
Buffer Pointer to a block of memory large enough to hold the pixels in a contiguous block of rows
Width The number of columns to get
Height The number of rows to get
Skip The number of pixels to skip in the buffer after each row (Optional)
Flags The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
Return ERROR_SUCCESS if completed or another error code on failure
Note Pixel data will be returned in the color format of the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache cleaning before a DMA read.


function FramebufferDevicePutRect(Framebuffer:PFramebufferDevice; X,Y:LongWord;Buffer:Pointer; Width,Height,Skip,Flags:LongWord):LongWord;
Description: Put a rectangular area of pixels from a supplied buffer to framebuffer memory
Framebuffer The framebuffer device to put to
X The starting column of the put
Y The starting row of the put
Buffer Pointer to a block of memory containing the pixels in a contiguous block of rows
Width The number of columns to put
Height The number of rows to put
Skip The number of pixels to skip in the buffer after each row (Optional)
Flags The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
Return ERROR_SUCCESS if completed or another error code on failure
Note Caller must ensure pixel data is in the correct color format for the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache invalidation after a DMA write.


function FramebufferDeviceCopyRect(Framebuffer:PFramebufferDevice; X1,Y1,X2,Y2,Width,Height,Flags:LongWord):LongWord;
Description: Copy a rectangular area of pixels within framebuffer memory
Framebuffer The framebuffer device to copy on
X1 The starting column to copy from
Y1 The starting row to copy from
X2 The starting column to copy to
Y2 The starting row to copy to
Width The number of columns to copy
Height The number of rows to copy
Flags The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
Return ERROR_SUCCESS if completed or another error code on failure
Note The default method assumes that framebuffer memory is DMA coherent and does not require cache clean/invalidate before or after a DMA read/write.


function FramebufferDeviceFillRect(Framebuffer:PFramebufferDevice; X,Y,Width,Height,Color,Flags:LongWord):LongWord;
Description: Fill a rectangular area of pixels within framebuffer memory
Framebuffer The framebuffer device to fill on
X The starting column of the fill
Y The starting row of the fill
Width The number of columns to fill
Height The number of rows to fill
Color The color to use for the fill
Flags The flags for the transfer (eg FRAMEBUFFER_TRANSFER_DMA)
Return ERROR_SUCCESS if completed or another error code on failure
Note Color must be specified in the correct format for the framebuffer. The default method assumes that framebuffer memory is DMA coherent and does not require cache invalidation after a DMA write.


function FramebufferDeviceGetLine(Framebuffer:PFramebufferDevice; Y:LongWord):Pointer;
Description: Get the address of the start of a row in framebuffer memory
Framebuffer The framebuffer device to get the start address from
Y The row to get the start address of
Return Pointer to the start address of the row or nil on failure


function FramebufferDeviceGetPoint(Framebuffer:PFramebufferDevice; X,Y:LongWord):Pointer;
Description: Get the address of the specified row and column in framebuffer memory
Framebuffer The framebuffer device to get the address from
X The column to get the start address of
Y The row to get the start address of
Return Pointer to the address of the row and column or nil on failure


function FramebufferDeviceWaitSync(Framebuffer:PFramebufferDevice):LongWord;
Description: Wait for the next vertical sync signal from the display hardware
Framebuffer The framebuffer device to wait for
Return ERROR_SUCCESS if completed or another error code on failure
Note Not all framebuffer devices support wait sync, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.

Devices that support wait sync should set the flag FRAMEBUFFER_FLAG_SYNC


function FramebufferDeviceGetOffset(Framebuffer:PFramebufferDevice; var X,Y:LongWord):LongWord;
Description: Get the virtual offset X and Y from a framebuffer device
Framebuffer The framebuffer device to get the offset from
X The X (Column) offset value in pixels returned from the device if successful
Y The Y (Row) offset value in pixels returned from the device if successful
Return ERROR_SUCCESS if completed or another error code on failure
Note X and Y are relative to the virtual buffer and NOT the physical screen (Where applicable)

Not all framebuffer devices support X and/or Y offset
Devices that support offset X should set the flag FRAMEBUFFER_FLAG_OFFSETX
Devices that support offset Y should set the flag FRAMEBUFFER_FLAG_OFFSETY


function FramebufferDeviceSetOffset(Framebuffer:PFramebufferDevice; X,Y:LongWord; Pan:Boolean):LongWord; inline;
Description: Set the virtual offset X and Y of a framebuffer device
Framebuffer The framebuffer device to set the offset for
X The X (Column) offset value in pixels to set
Y The Y (Row) offset value in pixels to set
Pan If True then pan the display without updating the Offset X and/or Y
Return ERROR_SUCCESS if completed or another error code on failure
Note X and Y are relative to the virtual buffer and NOT the physical screen (Where applicable)

Not all framebuffer devices support X and/or Y offset, returns ERROR_CALL_NOT_IMPLEMENTED if not supported
Devices that support offset X should set the flag FRAMEBUFFER_FLAG_OFFSETX
Devices that support offset Y should set the flag FRAMEBUFFER_FLAG_OFFSETY


function FramebufferDeviceSetOffsetEx(Framebuffer:PFramebufferDevice; X,Y:LongWord; Pan,Switch:Boolean):LongWord;
Description: Set the virtual offset X and Y of a framebuffer device
Framebuffer The framebuffer device to set the offset for
X The X (Column) offset value in pixels to set
Y The Y (Row) offset value in pixels to set
Pan If True then pan the display without updating the Offset X and/or Y
Switch If False then update the Offset X and/or Y without moving the display
Return ERROR_SUCCESS if completed or another error code on failure
Note X and Y are relative to the virtual buffer and NOT the physical screen (Where applicable)

Not all framebuffer devices support X and/or Y offset, returns ERROR_CALL_NOT_IMPLEMENTED if not supported
Devices that support offset X should set the flag FRAMEBUFFER_FLAG_OFFSETX
Devices that support offset Y should set the flag FRAMEBUFFER_FLAG_OFFSETY


function FramebufferDeviceGetPalette(Framebuffer:PFramebufferDevice; Palette:PFramebufferPalette):LongWord;
Description: Get the 8 bit color palette from a framebuffer device
Framebuffer The framebuffer device to get the palette from
Palette Pointer to a TFramebufferPalette structure for the palette data
Return ERROR_SUCCESS if completed or another error code on failure
Note Not all framebuffer devices support 8 bit palette, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.


function FramebufferDeviceSetPalette(Framebuffer:PFramebufferDevice; Palette:PFramebufferPalette):LongWord;
Description: Set the 8 bit color palette of a framebuffer device
Framebuffer The framebuffer device to set the palette for
Palette Pointer to a TFramebufferPalette structure for the palette data
Return ERROR_SUCCESS if completed or another error code on failure
Note Not all framebuffer devices support 8 bit palette, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.


function FramebufferDeviceSetBacklight(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;
Description: Set the brightness of the backlight of a framebuffer device
Framebuffer The framebuffer device to set the backlight
Brightness The brightness value to set (Normally 0 to 100)
Return ERROR_SUCCESS if completed or another error code on failure
Note Not all framebuffer devices support set backlight, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.

Devices that support set backlight should set the flag FRAMEBUFFER_FLAG_BACKLIGHT


function FramebufferDeviceSetCursor(Framebuffer:PFramebufferDevice; Width,Height,HotspotX,HotspotY:LongWord; Image:Pointer; Len:LongWord):LongWord;
Description: Set the mouse cursor image and properties of a framebuffer device
Framebuffer The framebuffer device to set the cursor
Width The width of the cursor image in pixels
Height The height of the cursor image in pixels
HotspotX The X hotspot of the cursor image, where the cursor X location will be (Normally 0).
HotspotY The Y hotspot of the cursor image, where the cursor Y location will be (Normally 0).
Image A buffer containing the cursor image pixels in COLOR_FORMAT_DEFAULT format
Len The length of the image buffer in bytes
Return ERROR_SUCCESS if completed or another error code on failure
Note For devices that don't support hardware mouse cursor a software cursor will be implemented

If image is nil then the default cursor image will be used


function FramebufferDeviceUpdateCursor(Framebuffer:PFramebufferDevice; Enabled:Boolean; X,Y:LongInt; Relative:Boolean):LongWord;
Description: Update the position and state for the mouse cursor of a framebuffer device
Framebuffer The framebuffer device to update the cursor
Enabled If true then show the cursor else hide it
X The cursor X location in pixels
Y The cursor Y location in pixels
Relative If true then X and Y are considered relative to the current position
Return ERROR_SUCCESS if completed or another error code on failure
Note For devices that don't support hardware mouse cursor a software cursor will be implemented


function FramebufferDeviceGetProperties(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Description: Get the current properties from a framebuffer device
Framebuffer The framebuffer device to get properties from
Properties Pointer to a TFramebufferProperties structure to return
Return ERROR_SUCCESS if completed or another error code on failure


function FramebufferDeviceSetProperties(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Description: Set the current properties for a framebuffer device
Framebuffer The framebuffer device to set properties for
Properties Pointer to a TFramebufferProperties structure containing the properties
Return ERROR_SUCCESS if completed or another error code on failure
Note Changing certain properties may cause the framebuffer to be reallocated


function FramebufferDeviceCheckFlag(Framebuffer:PFramebufferDevice; Flag:LongWord):Boolean;
Description: Check if a framebuffer device supports a flag value
Framebuffer The framebuffer device to check
Flag The framebuffer flag to check (eg FRAMEBUFFER_FLAG_BACKLIGHT)
Return True if flag is supported, False if not or on error.


function FramebufferDeviceGetFormat(Framebuffer:PFramebufferDevice):LongWord;
Description: Get the color format of a framebuffer device
Framebuffer The framebuffer device to get from
Return The color format of the framebuffer (eg COLOR_FORMAT_RGB24)


function FramebufferDeviceCreate:PFramebufferDevice;
Description: Create a new Framebuffer entry
Return Pointer to new Framebuffer entry or nil if Framebuffer could not be created


function FramebufferDeviceCreateEx(Size:LongWord):PFramebufferDevice;
Description: Create a new Framebuffer entry
Size Size in bytes to allocate for new Framebuffer (Including the Framebuffer entry)
Return Pointer to new Framebuffer entry or nil if Framebuffer could not be created


function FramebufferDeviceDestroy(Framebuffer:PFramebufferDevice):LongWord;
Description: Destroy an existing Framebuffer entry
Framebuffer The framebuffer device to destroy
Return ERROR_SUCCESS if completed or another error code on failure


function FramebufferDeviceRegister(Framebuffer:PFramebufferDevice):LongWord;
Description: Register a new Framebuffer in the Framebuffer table
Framebuffer The framebuffer device to register
Return ERROR_SUCCESS if completed or another error code on failure


function FramebufferDeviceDeregister(Framebuffer:PFramebufferDevice):LongWord;
Description: Deregister a Framebuffer from the Framebuffer table
Framebuffer The framebuffer device to deregister
Return ERROR_SUCCESS if completed or another error code on failure


function FramebufferDeviceFind(FramebufferId:LongWord):PFramebufferDevice;
Description: Find a framebuffer device by ID in the framebuffer table
FramebufferId The ID number of the framebuffer to find
Return Pointer to framebuffer device entry or nil if not found


function FramebufferDeviceFindByName(const Name:String):PFramebufferDevice; inline;
Description: Find a framebuffer device by name in the framebuffer table
Name The name of the framebuffer to find (eg Framebuffer0)
Return Pointer to framebuffer device entry or nil if not found


function FramebufferDeviceFindByDescription(const Description:String):PFramebufferDevice; inline;
Description: Find a framebuffer device by description in the framebuffer table
Description The description of the framebuffer to find (eg BCM2836 Framebuffer)
Return Pointer to framebuffer device entry or nil if not found


function FramebufferDeviceEnumerate(Callback:TFramebufferEnumerate; Data:Pointer):LongWord;
Description: Enumerate all framebuffer devices in the framebuffer table
Callback The callback function to call for each framebuffer in the table
Data A private data pointer to pass to callback for each framebuffer in the table
Return ERROR_SUCCESS if completed or another error code on failure


function FramebufferDeviceNotification(Framebuffer:PFramebufferDevice; Callback:TFramebufferNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: Register a notification for framebuffer device changes
Framebuffer The framebuffer device to notify changes for (Optional, pass nil for all framebuffer devices)
Callback The function to call when a notification event occurs
Data A private data pointer to pass to callback when a notification event occurs
Notification The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER)
Flags The flags to control the notification (eg NOTIFIER_FLAG_WORKER)


RTL framebuffer functions

function SysFramebufferAvailable:Boolean;
Description: Check if a framebuffer device is available
Note None documented


Framebuffer helper functions

function FramebufferDeviceGetCount:LongWord;
Description: Get the current framebuffer device count
Note None documented


function FramebufferDeviceGetDefault:PFramebufferDevice;
Description: Get the current default framebuffer device
Note None documented


function FramebufferDeviceSetDefault(Framebuffer:PFramebufferDevice):LongWord;
Description: Set the current default framebuffer device
Note None documented


function FramebufferDeviceCheck(Framebuffer:PFramebufferDevice):PFramebufferDevice;
Description: Check if the supplied Framebuffer device is in the Framebuffer table
Note None documented


function FramebufferDeviceSwap(Value:LongWord):LongWord; inline;
Description: No longer required (See ColorDefaultToFormat and ColorFormatToDefault)
Note None documented


function FramebufferTypeToString(FramebufferType:LongWord):String;
Description: Convert a Framebuffer type value to a string
Note None documented


function FramebufferStateToString(FramebufferState:LongWord):String;
Description: Convert a Framebuffer state value to a string
Note None documented


procedure FramebufferDeviceHideCursor(Framebuffer:PFramebufferDevice);
Description: Restore the framebuffer area under the cursor from the cursor buffer
Note Caller must hold the framebuffer lock

Driver support function only, not intended for direct use by applications


procedure FramebufferDeviceShowCursor(Framebuffer:PFramebufferDevice);
Description: Save the framebuffer area under the cursor to the cursor buffer and merge the cursor input with it to create the cursor output. Put the output to the framebuffer.
Note Caller must hold the framebuffer lock

Driver support function only, not intended for direct use by applications.


function FramebufferCursorToString(State:LongWord):String;
Description: To be documented
Note None documented


function FramebufferDepthToString(Depth:LongWord):String;
Description: To be documented
Note None documented


function FramebufferOrderToString(Order:LongWord):String;
Description: To be documented
Note None documented


function FramebufferModeToString(Mode:LongWord):String;
Description: To be documented
Note None documented


function FramebufferRotationToString(Rotation:LongWord):String;
Description: To be documented
Note None documented


Return to Unit Reference