1v13d/src/FxEngine/zbuffer.c

65 lines
1.3 KiB
C
Raw Normal View History

2019-07-21 20:14:54 +02:00
#include "zbuffer.h"
2019-08-16 15:27:15 +02:00
2019-08-17 14:09:45 +02:00
#include <stdint.h>
2019-07-21 20:14:54 +02:00
#include <stdbool.h>
2019-07-23 15:52:20 +02:00
#include <gint/display.h>
#include <gint/std/stdio.h>
#include <gint/std/stdlib.h>
#include <gint/keyboard.h>
2019-07-21 20:14:54 +02:00
2019-08-16 15:27:15 +02:00
/** size_uint32
* taille du zbuffer exprimée en uint32_t
* utile pour l'effacement du zbuffer sur sh3
**/
2019-08-17 14:09:45 +02:00
static const uint32_t size_uint32 = FE_ZB_SIZE_X*FE_ZB_SIZE_Y;
2019-08-16 15:27:15 +02:00
/** size_char
* taille du zbuffer exprimée en octets
* sera utile pour le DMA Controller
**/
2019-08-17 14:09:45 +02:00
static const uint32_t size_char = size_uint32*sizeof(int32_t);
2019-08-16 15:27:15 +02:00
/** address
* addresse du zbuffer
**/
2019-08-17 14:09:45 +02:00
static int32_t* address=0;
2019-07-21 20:14:54 +02:00
void FE_zbuffer_clear()
{
2019-08-17 14:09:45 +02:00
if (address==0)
2019-07-23 15:52:20 +02:00
{
2019-08-17 14:09:45 +02:00
address = malloc(size_char);
2019-08-16 15:27:15 +02:00
if (address==0) // cas de figure où il n'y a plus assez de RAM
2019-07-23 15:52:20 +02:00
{
dclear(C_WHITE);
2019-08-16 15:27:15 +02:00
dtext(1, 1, "Not enough RAM...", C_BLACK, C_NONE);
2019-08-17 14:09:45 +02:00
dupdate();
while (1==1)
getkey();
2019-07-23 15:52:20 +02:00
}
}
2019-08-16 15:27:15 +02:00
// TODO déterminer le type d'effacement
// effacement fait par le CPU
2019-08-17 14:09:45 +02:00
uint32_t indice;
2019-08-16 15:27:15 +02:00
for (indice = 0; indice < size_uint32; indice ++)
address[indice] = 3000;
// effacement fait par le DMA
// TODO
2019-07-21 20:14:54 +02:00
}
2019-08-17 14:09:45 +02:00
bool FE_zbuffer_set_dist(int32_t x, int32_t y, int32_t dist)
2019-07-21 20:14:54 +02:00
{
2019-08-16 15:27:15 +02:00
x %= FE_ZB_SIZE_X;
y %= FE_ZB_SIZE_Y;
2019-08-17 14:09:45 +02:00
const uint32_t indice = x * 64 + y;
2019-08-16 15:27:15 +02:00
if (address[indice]>dist && dist>0)
2019-07-21 20:14:54 +02:00
{
2019-08-16 15:27:15 +02:00
address[indice] = dist;
2019-07-21 20:14:54 +02:00
return true;
}
else
return false;
2019-08-17 14:09:45 +02:00
}