Changeset View
Changeset View
Standalone View
Standalone View
source/graphics/tests/test_LOSTexture.h
Show All 25 Lines | |||||
class TestLOSTexture : public CxxTest::TestSuite | class TestLOSTexture : public CxxTest::TestSuite | ||||
{ | { | ||||
public: | public: | ||||
void test_basic() | void test_basic() | ||||
{ | { | ||||
CSimulation2 sim(NULL, g_ScriptRuntime, NULL); | CSimulation2 sim(NULL, g_ScriptRuntime, NULL); | ||||
CLOSTexture tex(sim); | CLOSTexture tex(sim); | ||||
LosMask H = LosMask(LosStateFlags::VISIBLE, 1); | |||||
LosMask O = LosMask(LosStateFlags::UNEXPLORED, 1); | |||||
const ssize_t size = 8; | const ssize_t size = 8; | ||||
u32 inputData[size*size] = { | LosMask inputData[size*size] = { | ||||
2, 2, 2, 0, 0, 0, 0, 0, | H, H, H, O, O, O, O, O, | ||||
2, 2, 2, 0, 0, 0, 0, 0, | H, H, H, O, O, O, O, O, | ||||
2, 2, 2, 0, 0, 0, 0, 0, | H, H, H, O, O, O, O, O, | ||||
0, 0, 0, 0, 0, 0, 0, 0, | O, O, O, O, O, O, O, O, | ||||
0, 0, 0, 0, 0, 0, 0, 0, | O, O, O, O, O, O, O, O, | ||||
0, 0, 0, 0, 0, 0, 0, 0, | O, O, O, O, O, O, O, O, | ||||
0, 0, 0, 0, 0, 0, 0, 0, | O, O, O, O, O, O, O, O, | ||||
0, 0, 0, 0, 0, 0, 0, 2 | O, O, O, O, O, O, O, H | ||||
}; | }; | ||||
Grid<u32> inputDataVec(size, size); | Grid<LosMask> inputDataVec(size, size); | ||||
for (u8 i = 0; i < size; ++i) | for (u8 i = 0; i < size; ++i) | ||||
for (u8 j = 0; j < size; ++j) | for (u8 j = 0; j < size; ++j) | ||||
inputDataVec.set(i, j, inputData[i + j * size]); | inputDataVec.set(i, j, inputData[i + j * size]); | ||||
// LosState::MASK should be cmpRanageManager->GetSharedLosMask(1), | CLosQuerier los(LosMask(LosStateFlags::EXPLORED | LosStateFlags::VISIBLE, 1), inputDataVec, size); | ||||
// but that would mean adding a huge mock component for this and it | |||||
// should always be LosState::MASK for player 1 (as the other players are bit-shifted). | |||||
CLosQuerier los((u32)LosState::MASK, inputDataVec, size); | |||||
std::vector<u8> losData; | std::vector<u8> losData; | ||||
size_t pitch; | size_t pitch; | ||||
losData.resize(tex.GetBitmapSize(size, size, &pitch)); | losData.resize(tex.GetBitmapSize(size, size, &pitch)); | ||||
tex.GenerateBitmap(los, &losData[0], size, size, pitch); | tex.GenerateBitmap(los, &losData[0], size, size, pitch); | ||||
// for (size_t i = 0; i < losData.size(); ++i) | // for (size_t i = 0; i < losData.size(); ++i) | ||||
// printf("%s %3d", i % (size_t)sqrt(losData.size()) ? "" : "\n", losData[i]); | // printf("%s %3d", i % (size_t)sqrt(losData.size()) ? "" : "\n", losData[i]); | ||||
TS_ASSERT_EQUALS(losData[0], 104); | TS_ASSERT_EQUALS(losData[0], 104); | ||||
} | } | ||||
void test_perf_DISABLED() | void test_perf_DISABLED() | ||||
{ | { | ||||
CSimulation2 sim(NULL, g_ScriptRuntime, NULL); | CSimulation2 sim(NULL, g_ScriptRuntime, NULL); | ||||
CLOSTexture tex(sim); | CLOSTexture tex(sim); | ||||
const ssize_t size = 257; | const ssize_t size = 257; | ||||
Grid<u32> inputDataVec(size, size); | Grid<LosMask> inputDataVec(size, size); | ||||
// LosState::MASK should be cmpRanageManager->GetSharedLosMask(1), | CLosQuerier los(LosMask(LosStateFlags::EXPLORED | LosStateFlags::VISIBLE, 1), inputDataVec, size); | ||||
// but that would mean adding a huge mock component for this and it | |||||
// should always be LosState::MASK for player 1 (as the other players are bit-shifted). | |||||
CLosQuerier los((u32)LosState::MASK, inputDataVec, size); | |||||
size_t reps = 128; | size_t reps = 128; | ||||
double t = timer_Time(); | double t = timer_Time(); | ||||
for (size_t i = 0; i < reps; ++i) | for (size_t i = 0; i < reps; ++i) | ||||
{ | { | ||||
std::vector<u8> losData; | std::vector<u8> losData; | ||||
size_t pitch; | size_t pitch; | ||||
losData.resize(tex.GetBitmapSize(size, size, &pitch)); | losData.resize(tex.GetBitmapSize(size, size, &pitch)); | ||||
tex.GenerateBitmap(los, &losData[0], size, size, pitch); | tex.GenerateBitmap(los, &losData[0], size, size, pitch); | ||||
} | } | ||||
double dt = timer_Time() - t; | double dt = timer_Time() - t; | ||||
printf("\n# %f secs\n", dt/reps); | printf("\n# %f secs\n", dt/reps); | ||||
} | } | ||||
}; | }; |
Wildfire Games · Phabricator