From d560627b2d2b05588421583197a6c05cddaa6a4d Mon Sep 17 00:00:00 2001 From: antifallobst Date: Wed, 15 Mar 2023 23:37:59 +0100 Subject: [PATCH] noxos (docs): merged 'drivers/graphics' docs from .wiki --- .../noxos/docs/codebase/drivers/graphics.md | 4 + .../docs/codebase/drivers/graphics/_index.md | 6 ++ .../docs/codebase/drivers/graphics/color.h.md | 31 +++++++ .../docs/codebase/drivers/graphics/font.h.md | 16 ++++ .../drivers/graphics/framebuffer.h.md | 19 ++++ .../codebase/drivers/graphics/renderer.h.md | 89 +++++++++++++++++++ 6 files changed, 165 insertions(+) create mode 100644 content/projects/noxos/docs/codebase/drivers/graphics.md create mode 100644 content/projects/noxos/docs/codebase/drivers/graphics/_index.md create mode 100644 content/projects/noxos/docs/codebase/drivers/graphics/color.h.md create mode 100644 content/projects/noxos/docs/codebase/drivers/graphics/font.h.md create mode 100644 content/projects/noxos/docs/codebase/drivers/graphics/framebuffer.h.md create mode 100644 content/projects/noxos/docs/codebase/drivers/graphics/renderer.h.md diff --git a/content/projects/noxos/docs/codebase/drivers/graphics.md b/content/projects/noxos/docs/codebase/drivers/graphics.md new file mode 100644 index 0000000..af69d0f --- /dev/null +++ b/content/projects/noxos/docs/codebase/drivers/graphics.md @@ -0,0 +1,4 @@ +--- +title: "graphics" +summary: "a small rendering infrastructure" +--- diff --git a/content/projects/noxos/docs/codebase/drivers/graphics/_index.md b/content/projects/noxos/docs/codebase/drivers/graphics/_index.md new file mode 100644 index 0000000..17bae4d --- /dev/null +++ b/content/projects/noxos/docs/codebase/drivers/graphics/_index.md @@ -0,0 +1,6 @@ +--- +title: "graphics" +--- + +The graphics renderer is just for the development time. +As soon as the kernel supports modules, the renderer will be a module, or even an userspace program. \ No newline at end of file diff --git a/content/projects/noxos/docs/codebase/drivers/graphics/color.h.md b/content/projects/noxos/docs/codebase/drivers/graphics/color.h.md new file mode 100644 index 0000000..e3f9a31 --- /dev/null +++ b/content/projects/noxos/docs/codebase/drivers/graphics/color.h.md @@ -0,0 +1,31 @@ +--- +title: "color.h" +summary: "provides basic color definitions and operations" +--- + +# `color_palette_E` - enum +Indexes for [g_color_palette](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/color.h/#g_color_palette---global-variable). The color palette was designed by [gogh](https://gogh-co.github.io/Gogh/). +- **Grey Dark** +- **Pink** +- **Signal Green** +- **Orange** +- **Blue** +- **Purple** +- **Green** +- **Grey Light** +- **Red** + +# `color_argb_T` - struct +| Name | Type | Description | +|-------|---------|---------------------------------| +| alpha | uint8_t | Transparency value of the color | +| red | uint8_t | Red value of the color | +| green | uint8_t | Green value of the color | +| blue | uint8_t | Blue value of the color | + +# `color_argb_blend_alpha(background, foreground)` - function (color_argb_T) +Blends **_background_** and **_foreground_** with the _alpha_ value of **_foreground_**. + +# `g_color_palette` - global variable +An array of standard colors. +This array is indexed using [color_palette_E](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/color.h/#color_palette_e---enum). diff --git a/content/projects/noxos/docs/codebase/drivers/graphics/font.h.md b/content/projects/noxos/docs/codebase/drivers/graphics/font.h.md new file mode 100644 index 0000000..056d3f2 --- /dev/null +++ b/content/projects/noxos/docs/codebase/drivers/graphics/font.h.md @@ -0,0 +1,16 @@ +--- +title: "font.h" +summary: "basic bitmap font definitions" +--- + +# `font_T` - struct + +| Name | Type | Description | +|------------|----------|------------------------------------------------| +| width | uint8_t | The width of each char (in pixels) | +| height | uint8_t | The height of each char (in pixels) | +| glyph_size | uint8_t | The amount of bytes a char takes in the buffer | +| buffer | uint8_t* | The buffer, where the char bitmaps lay | + +# `g_font` - global variable +A globally usable 8x8 font. diff --git a/content/projects/noxos/docs/codebase/drivers/graphics/framebuffer.h.md b/content/projects/noxos/docs/codebase/drivers/graphics/framebuffer.h.md new file mode 100644 index 0000000..cff844d --- /dev/null +++ b/content/projects/noxos/docs/codebase/drivers/graphics/framebuffer.h.md @@ -0,0 +1,19 @@ +--- +title: "framebuffer.h" +summary: "framebuffer definitions" +--- + +#### `framebuffer_T` - struct + +| Name | Type | Description | +|-----------------|----------|-----------------------------------------------------| +| address | void* | The address of the framebuffer | +| width | uint64_t | The pixel width of the framebuffer | +| height | uint64_t | The pixel height of the framebuffer | +| pitch | uint64_t | The number of bytes in each row | +| bits_per_pixel | uint16_t | The amount of bits a pixel consumes in the buffer | +| bytes_per_pixel | uint8_t | The amount of bytes a pixel consumes in the buffer | +| shift_red | uint8_t | How many bits the red value is shifted in a pixel | +| shift_green | uint8_t | How many bits the green value is shifted in a pixel | +| shift_blue | uint8_t | How many bits the blue value is shifted in a pixel | + diff --git a/content/projects/noxos/docs/codebase/drivers/graphics/renderer.h.md b/content/projects/noxos/docs/codebase/drivers/graphics/renderer.h.md new file mode 100644 index 0000000..88d3590 --- /dev/null +++ b/content/projects/noxos/docs/codebase/drivers/graphics/renderer.h.md @@ -0,0 +1,89 @@ +--- +title: "renderer.h" +summary: "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 | [color_argb_T](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/color.h/#color_argb_t---struct)* | 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](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/renderer.h/#graphics_buffer_layer_e---enum) | The layer, on which the buffer will be rendered | +| prev | [graphics_buffer_T](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/renderer.h/#graphics_buffer_t---struct)* | The previous buffer in the rendering queue | +| next | [graphics_buffer_T](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/renderer.h/#graphics_buffer_t---struct)* | The next buffer in the rendering queue | + +#### `graphics_renderer_T` - struct + +| Name | Type | Description | +|------------------------|----------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| framebuffer | [framebuffer_T](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/framebuffer.h/#framebuffer_t---struct) | 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](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/renderer.h/#graphics_buffer_t---struct)** | List of pointers to the first [graphics_buffer_T](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/renderer.h/#graphics_buffer_t---struct) of every layer | +| font | [font_T](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/font.h/#font_t---struct) | 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](https://nerdcult.net/projects/noxos/docs/codebase/drivers/graphics/renderer.h/#graphics_renderer_update---function-void) | + + +#### `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.