documentation/kernel/drivers/graphics/renderer.h.md

5.5 KiB

renderer.h

The renderer is maybe a bit over-engineered and slow.

The renderer has a stack of buffers, which act like canvases. You can create, move, hide and show buffers.

graphics_buffer_layer_E - enum

  • Standard - The layer, where almost everything should be on
  • Overlay - This layer should be used for stuff like a mouse cursor, that should always be visible

graphics_buffer_T - struct

Name Type Description
buffer g_color_palette* The buffer, where all the pixels are stored
width uint32_t The width of the buffer
height uint32_t The height of the buffer
pos_x uint32_t The buffers x offset (from the top-left corner) in the renderers main buffer
pos_y uint32_t The buffers y offset (from the top-left corner) in the renderers main buffer
blocked bool Thread safety block variable
render bool Controls, if the buffer will be rendered or not
layer graphics_buffer_layer_E The layer, on which the buffer will be rendered
prev graphics_buffer_layer_E* The previous buffer in the rendering queue
next graphics_buffer_T* The next buffer in the rendering queue

graphics_renderer_T - struct

Name Type Description
framebuffer framebuffer_T The systems framebuffer (requested from bootloader)
back_buffer uint32_t* The buffer, where the final image is calculated, before sending it to the framebuffer
buffer_size uint64_t The size of back_buffer (in bytes)
graphics_buffer_layers graphics_buffer_T** List of pointers to the first graphics_buffer_T of every layer
font font_T The font, all graphics buffers use to draw chars (could be moved to graphics_buffer_T)
initialized bool Indicates whether the renderer is initialized or not
blocked bool Blocking variable that is used for thread safety in graphics_renderer_update()

graphics_buffer_request(pos_x, pos_y, width, height, layer) - function (graphics_buffer_T*)

Allocates a graphics buffer and pushes it on top of the rendering queue of layer.

graphics_buffer_show(graphics_buffer) - function (void)

Enables rendering for this buffer. Every created buffer will be rendered by default.

graphics_buffer_hide(graphics_buffer) - function (void)

Disables rendering for this buffer.

graphics_buffer_destruct(graphics_buffer) - function (void)

Removes graphics_buffer from the rendering queue and frees its memory allocations.

graphics_buffer_shift_up(graphics_buffer, shift) - function (void)

Shifts graphics_buffer's content shift rows up.

graphics_buffer_set_pixel(graphics_buffer, x, y, color) - function (void)

Sets a pixel with the given color at position(x | y) in graphics_buffer. x and y are graphics buffer relative.

graphics_buffer_get_pixel(graphics_buffer, x, y) - function (color_argb_T)

Returns the color of the pixel at position(x | y) in graphics_buffer.

graphics_buffer_draw_char(graphics_buffer, x, y, color, chr) - function (void)

Draws a character (chr) at position(x | y) in graphics_buffer. The position is the top-left corner of the char.

graphics_buffer_draw_string(graphics_buffer, x, y, color, string) - function (position_T)

Draws string at position(x | y) in graphics_buffer. The position is the top-left corner of the string. Returns the position after the last char of the string.

graphics_renderer_init(boot_info) - function (void)

Initializes the global graphics renderer. Needs a pointer to boot_info to extract information about the framebuffer.

graphics_renderer_update() - function (void)

Updates the renderers back_buffer and swaps it into the framebuffer. To update the back_buffer, it iterates over the rendering queue and copies every buffer to the back_buffer. If there are overlapping graphics_buffers, it alpha-blends them.

graphics_renderer_get_top_buffer(layer) - function (graphics_buffer_T*)

Returns a pointer to the graphics_buffer, that is on top of the rendering queue of layer.

graphics_renderer_get_width() - function (uint32_t)

Returns the width of the framebuffer.

graphics_renderer_get_height() - function (uint32_t)

Returns the height of the framebuffer.