/* Copyright (C) 2012 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * 0 A.D. is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with 0 A.D. If not, see . */ #include "lib/self_test.h" #include "graphics/LOSTexture.h" #include "lib/timer.h" #include "scriptinterface/ScriptInterface.h" #include "simulation2/Simulation2.h" class TestLOSTexture : public CxxTest::TestSuite { public: void test_basic() { CSimulation2 sim(NULL, g_ScriptRuntime, NULL); CLOSTexture tex(sim); const ssize_t size = 8; u32 inputData[size*size] = { 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 }; std::vector inputDataVec(inputData, inputData+size*size); // LOS_MASK should be cmpRanageManager->GetSharedLosMask(1), // but that would mean adding a huge mock component for this and it // should always be LOS_MASK for player 1 (as the other players are bit-shifted). ICmpRangeManager::CLosQuerier los(ICmpRangeManager::LOS_MASK, inputDataVec, size); std::vector losData; size_t pitch; losData.resize(tex.GetBitmapSize(size, size, &pitch)); tex.GenerateBitmap(los, &losData[0], size, size, pitch); // for (size_t i = 0; i < losData.size(); ++i) // printf("%s %3d", i % (size_t)sqrt(losData.size()) ? "" : "\n", losData[i]); TS_ASSERT_EQUALS(losData[0], 104); } void test_perf_DISABLED() { CSimulation2 sim(NULL, g_ScriptRuntime, NULL); CLOSTexture tex(sim); const ssize_t size = 257; std::vector inputDataVec; inputDataVec.resize(size*size); // LOS_MASK should be cmpRanageManager->GetSharedLosMask(1), // but that would mean adding a huge mock component for this and it // should always be LOS_MASK for player 1 (as the other players are bit-shifted). ICmpRangeManager::CLosQuerier los(ICmpRangeManager::LOS_MASK, inputDataVec, size); size_t reps = 128; double t = timer_Time(); for (size_t i = 0; i < reps; ++i) { std::vector losData; size_t pitch; losData.resize(tex.GetBitmapSize(size, size, &pitch)); tex.GenerateBitmap(los, &losData[0], size, size, pitch); } double dt = timer_Time() - t; printf("\n# %f secs\n", dt/reps); } };