mirror of
https://git.planet-casio.com/Lephenixnoir/gint.git
synced 2025-01-01 06:23:35 +01:00
49 lines
1.6 KiB
C
49 lines
1.6 KiB
C
#ifndef _INTERNALS_DISPLAY_H
|
|
#define _INTERNALS_DISPLAY_H
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
extern uint32_t *vram;
|
|
|
|
//---
|
|
// Rectangle masks.
|
|
//
|
|
// The concept of 'rectangle masks' is used several times in this module.
|
|
// It relies on the fact that operations affecting a rectangle act the
|
|
// same for all lines, and line operation is very optimized. A rectangle
|
|
// mask is a set of integers, where each bit indicate whether a specific
|
|
// pixel is affected (1) by the operation, or not (0).
|
|
//
|
|
// For example to clear a rectangle such as (14, 16, 112, 48), the masks
|
|
// will need to hold 0003ffff ffffffff ffffffff ffff0000. Bitwise-
|
|
// combining them with video ram long entries yields very good performance
|
|
// as compared to operation on single pixels. Each bitwise operation will
|
|
// produce different results, which is very flexible.
|
|
//
|
|
// This technique can also be used in subtle cases with patterns more
|
|
// complicated than rectangles, but within this module this is unlikely to
|
|
// happen.
|
|
//---
|
|
|
|
/*
|
|
adjustRectangle()
|
|
Adjusts the given rectangle coordinates to ensure that :
|
|
- the rectangle is entirely contained in the screen;
|
|
- x1 < x2;
|
|
- y1 < y2,
|
|
which is needed when working with screen rectangles. Returns non-zero
|
|
if the rectangle is outside the screen, which usually means there is
|
|
nothing to do.
|
|
*/
|
|
int adjustRectangle(int *x1, int *y1, int *x2, int *y2);
|
|
|
|
/*
|
|
getMasks()
|
|
Computes the rectangle masks needed to affect pixels located between x1
|
|
and x2 (both included). The four masks are stored in the third argument
|
|
(seen as an array).
|
|
*/
|
|
void getMasks(size_t x1, size_t x2, uint32_t *masks);
|
|
|
|
#endif // _INTERNALS_DISPLAY_H
|