mirror of
https://git.coom.tech/drummyfish/raycastlib.git
synced 2024-11-21 20:29:59 +01:00
Update test
This commit is contained in:
parent
598618c9e5
commit
0d37d51bef
2 changed files with 111 additions and 4 deletions
|
@ -422,7 +422,7 @@ int16_t _RCL_cameraHeightScreen = 0;
|
||||||
RCL_ArrayFunction _RCL_rollFunction = 0; // says door rolling
|
RCL_ArrayFunction _RCL_rollFunction = 0; // says door rolling
|
||||||
RCL_Unit *_RCL_floorPixelDistances = 0;
|
RCL_Unit *_RCL_floorPixelDistances = 0;
|
||||||
|
|
||||||
#ifdef RAYCASTLIB_PROFILE
|
#ifdef RCL_PROFILE
|
||||||
// function call counters for profiling
|
// function call counters for profiling
|
||||||
uint32_t profile_RCL_sqrtInt = 0;
|
uint32_t profile_RCL_sqrtInt = 0;
|
||||||
uint32_t profile_RCL_clamp = 0;
|
uint32_t profile_RCL_clamp = 0;
|
||||||
|
@ -1270,7 +1270,8 @@ RCL_Unit coordStep = 1;
|
||||||
|
|
||||||
#if RCL_COMPUTE_WALL_TEXCOORDS == 1
|
#if RCL_COMPUTE_WALL_TEXCOORDS == 1
|
||||||
p.texCoords.x = p.hit.textureCoord;
|
p.texCoords.x = p.hit.textureCoord;
|
||||||
coordStep = RCL_UNITS_PER_SQUARE / wallHeightScreen;
|
coordStep = RCL_UNITS_PER_SQUARE /
|
||||||
|
(wallHeightScreen != 0 ? wallHeightScreen : 1);
|
||||||
p.texCoords.y = coordStep * coordHelper;
|
p.texCoords.y = coordStep * coordHelper;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1284,7 +1285,8 @@ RCL_Unit coordStep = 1;
|
||||||
|
|
||||||
p.position.y = y;
|
p.position.y = y;
|
||||||
#if RCL_COMPUTE_WALL_TEXCOORDS == 1
|
#if RCL_COMPUTE_WALL_TEXCOORDS == 1
|
||||||
p.texCoords.y = (RCL_UNITS_PER_SQUARE * coordHelper) / wallHeightScreen;
|
p.texCoords.y = (RCL_UNITS_PER_SQUARE * coordHelper) /
|
||||||
|
(wallHeightScreen != 0 ? wallHeightScreen : 1);
|
||||||
#endif
|
#endif
|
||||||
RCL_PIXEL_FUNCTION(&p);
|
RCL_PIXEL_FUNCTION(&p);
|
||||||
++coordHelper;
|
++coordHelper;
|
||||||
|
|
105
test.c
105
test.c
|
@ -174,8 +174,76 @@ void benchmarkMapping()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int countPixels = 0;
|
||||||
|
uint32_t *pixelCounts = 0;
|
||||||
|
RCL_Camera countCamera;
|
||||||
|
int countOK = 1;
|
||||||
|
|
||||||
void pixelFunc(RCL_PixelInfo *p)
|
void pixelFunc(RCL_PixelInfo *p)
|
||||||
{
|
{
|
||||||
|
if (countPixels)
|
||||||
|
{
|
||||||
|
if (p->position.x >= countCamera.resolution.x || p->position.x < 0 ||
|
||||||
|
p->position.y >= countCamera.resolution.y || p->position.y < 0)
|
||||||
|
{
|
||||||
|
printf("ERROR: writing pixel outside screen at %d %d!\n",
|
||||||
|
p->position.x,p->position.y);
|
||||||
|
|
||||||
|
countOK = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pixelCounts[p->position.y * countCamera.resolution.x + p->position.x]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int testPixelCount(RCL_Unit camX, RCL_Unit camY, RCL_Unit camZ,
|
||||||
|
RCL_Unit camDir, RCL_Unit camShear, uint16_t camResX, uint16_t camResY,
|
||||||
|
int complexRender)
|
||||||
|
{
|
||||||
|
printf("Counting rendered pixels...\n");
|
||||||
|
|
||||||
|
RCL_RayConstraints constraints;
|
||||||
|
RCL_Camera c;
|
||||||
|
|
||||||
|
RCL_initRayConstraints(&constraints);
|
||||||
|
RCL_initCamera(&c);
|
||||||
|
c.position.x = camX;
|
||||||
|
c.position.y = camY;
|
||||||
|
c.direction = camDir;
|
||||||
|
c.shear = camShear;
|
||||||
|
c.height = camZ;
|
||||||
|
c.resolution.x = camResX;
|
||||||
|
c.resolution.y = camResY;
|
||||||
|
|
||||||
|
uint32_t pixels[camResX * camResY];
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < camResX * camResY; ++i)
|
||||||
|
pixels[i] = 0;
|
||||||
|
|
||||||
|
pixelCounts = pixels;
|
||||||
|
countCamera = c;
|
||||||
|
countPixels = 1;
|
||||||
|
|
||||||
|
countOK = 1;
|
||||||
|
|
||||||
|
if (complexRender)
|
||||||
|
RCL_renderComplex(c,testArrayFunc,testArrayFunc2,0,constraints);
|
||||||
|
else
|
||||||
|
RCL_renderSimple(c,testArrayFunc,0,0,constraints);
|
||||||
|
|
||||||
|
for (uint32_t y = 0; y < camResY; ++y)
|
||||||
|
for (uint32_t x = 0; x < camResX; ++x)
|
||||||
|
{
|
||||||
|
uint32_t index = y * camResX + x;
|
||||||
|
|
||||||
|
if (pixels[index] != 1)
|
||||||
|
{
|
||||||
|
printf("ERROR: pixel at %d %d written %d times!\n",x,y,pixels[index]);
|
||||||
|
countOK = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return countOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void benchmarkRender()
|
void benchmarkRender()
|
||||||
|
@ -194,6 +262,8 @@ void benchmarkRender()
|
||||||
constraints.maxHits = 10;
|
constraints.maxHits = 10;
|
||||||
constraints.maxSteps = 12;
|
constraints.maxSteps = 12;
|
||||||
|
|
||||||
|
countPixels = 0;
|
||||||
|
|
||||||
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,testArrayFunc2,0,constraints);
|
||||||
}
|
}
|
||||||
|
@ -254,6 +324,41 @@ int main()
|
||||||
|
|
||||||
printf("OK\n");
|
printf("OK\n");
|
||||||
|
|
||||||
|
if (!testPixelCount(
|
||||||
|
RCL_UNITS_PER_SQUARE / 2,
|
||||||
|
RCL_UNITS_PER_SQUARE / 2,
|
||||||
|
RCL_UNITS_PER_SQUARE / 2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
128,
|
||||||
|
64,
|
||||||
|
1))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (!testPixelCount(
|
||||||
|
3 * RCL_UNITS_PER_SQUARE + 100,
|
||||||
|
4 * RCL_UNITS_PER_SQUARE + RCL_UNITS_PER_SQUARE / 3,
|
||||||
|
RCL_UNITS_PER_SQUARE,
|
||||||
|
312,
|
||||||
|
0,
|
||||||
|
200,
|
||||||
|
63,
|
||||||
|
0))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (!testPixelCount(
|
||||||
|
- RCL_UNITS_PER_SQUARE,
|
||||||
|
0,
|
||||||
|
300,
|
||||||
|
-600,
|
||||||
|
-120,
|
||||||
|
64,
|
||||||
|
68,
|
||||||
|
1))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
printf("OK\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (!testSingleMapping(
|
if (!testSingleMapping(
|
||||||
-RCL_UNITS_PER_SQUARE,
|
-RCL_UNITS_PER_SQUARE,
|
||||||
|
|
Loading…
Reference in a new issue