mirror of
https://git.coom.tech/drummyfish/raycastlib.git
synced 2024-11-21 20:29:59 +01:00
Improve tests
This commit is contained in:
parent
2169b4db39
commit
79fef6c51b
2 changed files with 200 additions and 26 deletions
212
programs/test.c
212
programs/test.c
|
@ -5,35 +5,111 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define RCL_PROFILE
|
#define RCL_PROFILE
|
||||||
|
|
||||||
#define RCL_HORIZONTAL_FOV RCL_UNITS_PER_SQUARE / 2
|
|
||||||
|
|
||||||
#define RCL_PIXEL_FUNCTION pixelFunc
|
#define RCL_PIXEL_FUNCTION pixelFunc
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "../raycastlib.h"
|
#include "../raycastlib.h"
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
static const char renderSimpleExpect[] =
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,EEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,EEEEEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,EEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
"ddddddddd,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
"dddddddddddddddeeeeeeeeee,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffff,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggg,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiii,FFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDD,,,,,,,,,"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhi.....FFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhh..........FFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggg...............FFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffg.....................FFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffff..........................FFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeeffff.................................FFFFEEEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeee............................................EEEEEEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeeeeeeee.....................................................EEEEEEEEEEDDDDDDDDDDD"
|
||||||
|
"dddddddddddddddeeeeee..............................................................EEEEEEDDDDDDDDDDD"
|
||||||
|
"ddddddddddddddde.......................................................................EEDDDDDDDDDDD"
|
||||||
|
"ddddddddddd.................................................................................DDDDDDDD"
|
||||||
|
"ddddddd........................................................................................DDDDD";
|
||||||
|
|
||||||
|
static const char renderComplexExpect[] =
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DD,,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,EEEEEDDe,,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,EEEEEEEEDDee,,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,EEEEEEEEEEEEEDDeee,,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFEEEEEEEEEEEEEEEDDeeee,,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
"ddddddddd,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
"dddddddddddddddeeeeeeee,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeeffff,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,,,,"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffgggggg,,,,,,,,,,,,,,,,FFFFFFEEEEEEEEEEEEEEEDDeeeef,GGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiii,FFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhiiiiiiFFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhhhhhhi.....FFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffggggggggghhh..........FFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffgggggg................FFFFFFEEEEEEEEEEEEEEEDDeeeefGGGG"
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefffffffffffffg.....................FFFFFFEEEEEEEEEEEEEEEDDeeeef...."
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeeffffffff...........................FFFFFFEEEEEEEEEEEEEEEDDeeeef...."
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeeeeefff...................................FFFEEEEEEEEEEEEEEEDDeeeef...."
|
||||||
|
"dddddddddddddddeeeeeeeeeeeeeeee............................................EEEEEEEEEEEEEEDDeeeefFFFE"
|
||||||
|
"dddddddddddddddeeeeeeeeeee.....................................................EEEEEEEEEEDDeeeefFFFE"
|
||||||
|
"dddddddddddddddeeeee................................................................EEEEEDDeeee....E"
|
||||||
|
"ddddddddddddddd..........................................................................DDeee......"
|
||||||
|
"ddddddddddd.................................................................................e......."
|
||||||
|
"dddd................................................................................................";
|
||||||
|
|
||||||
RCL_Unit testArrayFunc(int16_t x, int16_t y)
|
RCL_Unit testArrayFunc(int16_t x, int16_t y)
|
||||||
{
|
{
|
||||||
if (x > 12 || y > 12)
|
if (x == 1 & y == 8)
|
||||||
return x * y * RCL_UNITS_PER_SQUARE;
|
return RCL_UNITS_PER_SQUARE * 3;
|
||||||
|
|
||||||
return (x < 0 || y < 0 || x > 9 || y > 9) ? RCL_UNITS_PER_SQUARE : 0;
|
if (x == 2 & y == 8)
|
||||||
|
return -1 * RCL_UNITS_PER_SQUARE / 4;
|
||||||
|
|
||||||
|
return (x < 0 || x >= 10 || y < 0 || y >= 10) ?
|
||||||
|
(RCL_UNITS_PER_SQUARE * 2) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
RCL_Unit testArrayFunc2(int16_t x, int16_t y)
|
int testSingleRay(RCL_Unit startX, RCL_Unit startY, RCL_Unit dirX,
|
||||||
{
|
RCL_Unit dirY, int16_t expectSquareX, int16_t expectSquareY,
|
||||||
return testArrayFunc(x,y) + 10 * RCL_UNITS_PER_SQUARE;
|
int16_t expectPointX, int16_t expectPointY, int16_t tolerateError)
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Simple automatic test function.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int testSingleRay(RCL_Unit startX, RCL_Unit startY, RCL_Unit dirX, RCL_Unit dirY,
|
|
||||||
int16_t expectSquareX, int16_t expectSquareY, int16_t expectPointX,
|
|
||||||
int16_t expectPointY, int16_t tolerateError)
|
|
||||||
{
|
{
|
||||||
RCL_Ray r;
|
RCL_Ray r;
|
||||||
|
|
||||||
|
@ -176,14 +252,19 @@ void benchmarkMapping()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int countPixels = 0;
|
int renderMode = 0;
|
||||||
uint32_t *pixelCounts = 0;
|
uint32_t *pixelCounts = 0;
|
||||||
RCL_Camera countCamera;
|
RCL_Camera countCamera;
|
||||||
int countOK = 1;
|
int countOK = 1;
|
||||||
|
|
||||||
|
#define TEST_SCREEN_RES_X 100
|
||||||
|
#define TEST_SCREEN_RES_Y 40
|
||||||
|
|
||||||
|
char testScreen[TEST_SCREEN_RES_X * TEST_SCREEN_RES_Y];
|
||||||
|
|
||||||
void pixelFunc(RCL_PixelInfo *p)
|
void pixelFunc(RCL_PixelInfo *p)
|
||||||
{
|
{
|
||||||
if (countPixels)
|
if (renderMode == 0) // count pixels
|
||||||
{
|
{
|
||||||
if (p->position.x >= countCamera.resolution.x || p->position.x < 0 ||
|
if (p->position.x >= countCamera.resolution.x || p->position.x < 0 ||
|
||||||
p->position.y >= countCamera.resolution.y || p->position.y < 0)
|
p->position.y >= countCamera.resolution.y || p->position.y < 0)
|
||||||
|
@ -196,13 +277,27 @@ void pixelFunc(RCL_PixelInfo *p)
|
||||||
else
|
else
|
||||||
pixelCounts[p->position.y * countCamera.resolution.x + p->position.x]++;
|
pixelCounts[p->position.y * countCamera.resolution.x + p->position.x]++;
|
||||||
}
|
}
|
||||||
|
else if (renderMode == 1)
|
||||||
|
{
|
||||||
|
char c = '?';
|
||||||
|
|
||||||
|
if (p->isFloor)
|
||||||
|
c = '.';
|
||||||
|
else
|
||||||
|
c = ',';
|
||||||
|
|
||||||
|
if (p->isWall)
|
||||||
|
c = (p->hit.direction % 2 ? 'a' : 'A') + p->depth / 512;
|
||||||
|
|
||||||
|
testScreen[p->position.y * TEST_SCREEN_RES_X + p->position.x] = c;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int testPixelCount(RCL_Unit camX, RCL_Unit camY, RCL_Unit camZ,
|
int testPixelCount(RCL_Unit camX, RCL_Unit camY, RCL_Unit camZ,
|
||||||
RCL_Unit camDir, RCL_Unit camShear, uint16_t camResX, uint16_t camResY,
|
RCL_Unit camDir, RCL_Unit camShear, uint16_t camResX, uint16_t camResY,
|
||||||
int complexRender)
|
int complexRender)
|
||||||
{
|
{
|
||||||
printf("Counting rendered pixels...\n");
|
printf("Counting rendered pixels (each should be rendered exactly once)...\n");
|
||||||
|
|
||||||
RCL_RayConstraints constraints;
|
RCL_RayConstraints constraints;
|
||||||
RCL_Camera c;
|
RCL_Camera c;
|
||||||
|
@ -210,6 +305,7 @@ int testPixelCount(RCL_Unit camX, RCL_Unit camY, RCL_Unit camZ,
|
||||||
RCL_initRayConstraints(&constraints);
|
RCL_initRayConstraints(&constraints);
|
||||||
constraints.maxSteps = 32;
|
constraints.maxSteps = 32;
|
||||||
RCL_initCamera(&c);
|
RCL_initCamera(&c);
|
||||||
|
|
||||||
c.position.x = camX;
|
c.position.x = camX;
|
||||||
c.position.y = camY;
|
c.position.y = camY;
|
||||||
c.direction = camDir;
|
c.direction = camDir;
|
||||||
|
@ -225,12 +321,12 @@ int testPixelCount(RCL_Unit camX, RCL_Unit camY, RCL_Unit camZ,
|
||||||
|
|
||||||
pixelCounts = pixels;
|
pixelCounts = pixels;
|
||||||
countCamera = c;
|
countCamera = c;
|
||||||
countPixels = 1;
|
renderMode = 0;
|
||||||
|
|
||||||
countOK = 1;
|
countOK = 1;
|
||||||
|
|
||||||
if (complexRender)
|
if (complexRender)
|
||||||
RCL_renderComplex(c,testArrayFunc,testArrayFunc2,0,constraints);
|
RCL_renderComplex(c,testArrayFunc,testArrayFunc,0,constraints);
|
||||||
else
|
else
|
||||||
RCL_renderSimple(c,testArrayFunc,0,0,constraints);
|
RCL_renderSimple(c,testArrayFunc,0,0,constraints);
|
||||||
|
|
||||||
|
@ -249,9 +345,68 @@ int testPixelCount(RCL_Unit camX, RCL_Unit camY, RCL_Unit camZ,
|
||||||
return countOK;
|
return countOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int testRender(int8_t simple)
|
||||||
|
{
|
||||||
|
printf("\nTesting rendering\n");
|
||||||
|
|
||||||
|
renderMode = 1;
|
||||||
|
|
||||||
|
RCL_Camera c;
|
||||||
|
RCL_initCamera(&c);
|
||||||
|
|
||||||
|
c.resolution.x = TEST_SCREEN_RES_X;
|
||||||
|
c.resolution.y = TEST_SCREEN_RES_Y;
|
||||||
|
c.position.x = 2 * RCL_UNITS_PER_SQUARE + RCL_UNITS_PER_SQUARE / 2; // 3000;//5 * RCL_UNITS_PER_SQUARE;
|
||||||
|
c.position.y = 5 * RCL_UNITS_PER_SQUARE + RCL_UNITS_PER_SQUARE / 2; //5000;//5 * RCL_UNITS_PER_SQUARE;
|
||||||
|
c.direction = 625;//700;
|
||||||
|
c.height = 1500;//1000;
|
||||||
|
|
||||||
|
RCL_RayConstraints constraints;
|
||||||
|
RCL_initRayConstraints(&constraints);
|
||||||
|
|
||||||
|
constraints.maxHits = 7;
|
||||||
|
constraints.maxSteps = 20;
|
||||||
|
|
||||||
|
renderMode = 1;
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < TEST_SCREEN_RES_X * TEST_SCREEN_RES_Y; ++i)
|
||||||
|
testScreen[i] = '?';
|
||||||
|
|
||||||
|
if (simple)
|
||||||
|
{
|
||||||
|
RCL_renderSimple(c,testArrayFunc,0,0,constraints);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RCL_renderComplex(c,testArrayFunc,0,0,constraints);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < TEST_SCREEN_RES_X * TEST_SCREEN_RES_Y; ++i)
|
||||||
|
{
|
||||||
|
if ((i % TEST_SCREEN_RES_X) == 0)
|
||||||
|
printf(" \n");
|
||||||
|
|
||||||
|
printf("%c",testScreen[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *expect = simple ? renderSimpleExpect : renderComplexExpect;
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < TEST_SCREEN_RES_X * TEST_SCREEN_RES_Y; ++i)
|
||||||
|
if (expect[i] != testScreen[i])
|
||||||
|
{
|
||||||
|
printf("\n\nFAIL!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n\nOK\n");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void benchmarkRender()
|
void benchmarkRender()
|
||||||
{
|
{
|
||||||
RCL_Camera c;
|
RCL_Camera c;
|
||||||
|
RCL_initCamera(&c);
|
||||||
|
|
||||||
c.resolution.x = 640;
|
c.resolution.x = 640;
|
||||||
c.resolution.y = 300;
|
c.resolution.y = 300;
|
||||||
|
@ -261,14 +416,15 @@ void benchmarkRender()
|
||||||
c.height = 200;
|
c.height = 200;
|
||||||
|
|
||||||
RCL_RayConstraints constraints;
|
RCL_RayConstraints constraints;
|
||||||
|
RCL_initRayConstraints(&constraints);
|
||||||
|
|
||||||
constraints.maxHits = 10;
|
constraints.maxHits = 10;
|
||||||
constraints.maxSteps = 12;
|
constraints.maxSteps = 12;
|
||||||
|
|
||||||
countPixels = 0;
|
renderMode = 255; // don't write pixels
|
||||||
|
|
||||||
for (int i = 0; i < 100; ++i)
|
for (int i = 0; i < 100; ++i)
|
||||||
RCL_renderComplex(c,testArrayFunc,testArrayFunc2,0,constraints);
|
RCL_renderComplex(c,testArrayFunc,testArrayFunc,0,constraints);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
@ -378,6 +534,12 @@ int main()
|
||||||
))
|
))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
if (!testRender(0))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (!testRender(1))
|
||||||
|
return 1;
|
||||||
|
|
||||||
printf("benchmark:\n");
|
printf("benchmark:\n");
|
||||||
|
|
||||||
long t;
|
long t;
|
||||||
|
|
14
raycastlib.h
14
raycastlib.h
|
@ -1524,7 +1524,16 @@ void _RCL_columnFunctionSimple(RCL_HitResult *hits, uint16_t hitCount,
|
||||||
{
|
{
|
||||||
dist = hit.distance;
|
dist = hit.distance;
|
||||||
|
|
||||||
int16_t wallHeightWorld = _RCL_floorFunction(hit.square.x,hit.square.y);
|
RCL_Unit wallHeightWorld = _RCL_floorFunction(hit.square.x,hit.square.y);
|
||||||
|
|
||||||
|
if (wallHeightWorld < 0)
|
||||||
|
{
|
||||||
|
/* We can't just do wallHeightWorld = max(0,wallHeightWorld) because
|
||||||
|
we would be processing an actual hit with height 0, which shouldn't
|
||||||
|
ever happen, so we assign some arbitrary height. */
|
||||||
|
|
||||||
|
wallHeightWorld = RCL_UNITS_PER_SQUARE;
|
||||||
|
}
|
||||||
|
|
||||||
RCL_Unit worldPointTop = wallHeightWorld - _RCL_camera.height;
|
RCL_Unit worldPointTop = wallHeightWorld - _RCL_camera.height;
|
||||||
RCL_Unit worldPointBottom = -1 * _RCL_camera.height;
|
RCL_Unit worldPointBottom = -1 * _RCL_camera.height;
|
||||||
|
@ -1538,6 +1547,9 @@ void _RCL_columnFunctionSimple(RCL_HitResult *hits, uint16_t hitCount,
|
||||||
* _RCL_camera.resolution.y) / RCL_UNITS_PER_SQUARE;
|
* _RCL_camera.resolution.y) / RCL_UNITS_PER_SQUARE;
|
||||||
|
|
||||||
wallHeightScreen = wallEnd - wallStart;
|
wallHeightScreen = wallEnd - wallStart;
|
||||||
|
|
||||||
|
if (wallHeightScreen <= 0) // can happen because of rounding errors
|
||||||
|
wallHeightScreen = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue