Commit 3f47f807 authored by hybrid's avatar hybrid

Added two macros to call tests for all drivers, or for all hw drivers, with just one call.

Added tests to check whether the driver supports the necessary features, and stop early if it does not make sense.
Fixed line endings for testXML.cpp

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@3819 dfc29bdd-3216-0410-991c-e03cc46cb475
parent b2f1c1ff
...@@ -645,6 +645,16 @@ static bool draw2DImage4c(video::E_DRIVER_TYPE type) ...@@ -645,6 +645,16 @@ static bool draw2DImage4c(video::E_DRIVER_TYPE type)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
if (!driver->queryFeature(video::EVDF_BILINEAR_FILTER))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS,true); driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS,true);
driver->setTextureCreationFlag(video::ETCF_OPTIMIZED_FOR_QUALITY,true); driver->setTextureCreationFlag(video::ETCF_OPTIMIZED_FOR_QUALITY,true);
...@@ -739,6 +749,16 @@ static bool addBlend2d(video::E_DRIVER_TYPE type) ...@@ -739,6 +749,16 @@ static bool addBlend2d(video::E_DRIVER_TYPE type)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager(); scene::ISceneManager* smgr = device->getSceneManager();
if (!driver->queryFeature(video::EVDF_BILINEAR_FILTER))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
scene::IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2"); scene::IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2");
if (!mesh) if (!mesh)
{ {
...@@ -816,6 +836,16 @@ static bool moreFilterTests(video::E_DRIVER_TYPE type) ...@@ -816,6 +836,16 @@ static bool moreFilterTests(video::E_DRIVER_TYPE type)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
gui::IGUIEnvironment* gui = device->getGUIEnvironment(); gui::IGUIEnvironment* gui = device->getGUIEnvironment();
if (!driver->queryFeature(video::EVDF_BILINEAR_FILTER))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false); driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
video::ITexture* tex = driver->getTexture("../media/irrlichtlogo.jpg"); video::ITexture* tex = driver->getTexture("../media/irrlichtlogo.jpg");
gui::IGUIImage* image = gui->addImage(core::recti(0,0,64,64)); gui::IGUIImage* image = gui->addImage(core::recti(0,0,64,64));
...@@ -857,20 +887,9 @@ static bool moreFilterTests(video::E_DRIVER_TYPE type) ...@@ -857,20 +887,9 @@ static bool moreFilterTests(video::E_DRIVER_TYPE type)
bool twodmaterial() bool twodmaterial()
{ {
bool result = addBlend2d(video::EDT_OPENGL); bool result = true;
result &= addBlend2d(video::EDT_DIRECT3D9); TestWithAllDrivers(addBlend2d);
result &= addBlend2d(video::EDT_DIRECT3D8); TestWithAllDrivers(moreFilterTests);
result &= addBlend2d(video::EDT_BURNINGSVIDEO); TestWithAllDrivers(draw2DImage4c);
result &= moreFilterTests(video::EDT_OPENGL);
result &= moreFilterTests(video::EDT_DIRECT3D9);
result &= moreFilterTests(video::EDT_DIRECT3D8);
result &= moreFilterTests(video::EDT_BURNINGSVIDEO);
result &= draw2DImage4c(video::EDT_OPENGL);
result &= draw2DImage4c(video::EDT_DIRECT3D9);
result &= draw2DImage4c(video::EDT_DIRECT3D8);
result &= draw2DImage4c(video::EDT_BURNINGSVIDEO);
return result; return result;
} }
...@@ -25,6 +25,8 @@ static bool testLineRendering(video::E_DRIVER_TYPE type) ...@@ -25,6 +25,8 @@ static bool testLineRendering(video::E_DRIVER_TYPE type)
return true; return true;
} }
logTestString("Testing driver %ls\n", driver->getName());
scene::ISceneManager* smgr = device->getSceneManager(); scene::ISceneManager* smgr = device->getSceneManager();
scene::IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2"); scene::IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2");
...@@ -62,7 +64,7 @@ static bool testLineRendering(video::E_DRIVER_TYPE type) ...@@ -62,7 +64,7 @@ static bool testLineRendering(video::E_DRIVER_TYPE type)
bool antiAliasing() bool antiAliasing()
{ {
bool result = testLineRendering(video::EDT_OPENGL); bool result = true;
result &= testLineRendering(video::EDT_DIRECT3D9); TestWithAllHWDrivers(testLineRendering);
return result; return result;
} }
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
using namespace irr; using namespace irr;
static bool testImageCreation(video::E_DRIVER_TYPE driverType) static bool testImageCreation()
{ {
// create device // create device
IrrlichtDevice *device = createDevice(driverType, core::dimension2d<u32>(160,120)); IrrlichtDevice *device = createDevice(video::EDT_SOFTWARE, core::dimension2d<u32>(160,120));
if (device == 0) if (device == 0)
return true; // could not create selected driver. return true; // could not create selected driver.
...@@ -37,6 +37,6 @@ static bool testImageCreation(video::E_DRIVER_TYPE driverType) ...@@ -37,6 +37,6 @@ static bool testImageCreation(video::E_DRIVER_TYPE driverType)
bool createImage() bool createImage()
{ {
bool result = testImageCreation(video::EDT_SOFTWARE); bool result = testImageCreation();
return result; return result;
} }
...@@ -72,14 +72,8 @@ bool testWithPNG(video::E_DRIVER_TYPE driverType) ...@@ -72,14 +72,8 @@ bool testWithPNG(video::E_DRIVER_TYPE driverType)
bool draw2DImage() bool draw2DImage()
{ {
bool result = testWithRenderTarget(video::EDT_DIRECT3D9); bool result = true;
result &= testWithRenderTarget(video::EDT_DIRECT3D8); TestWithAllDrivers(testWithRenderTarget);
result &= testWithRenderTarget(video::EDT_OPENGL); TestWithAllHWDrivers(testWithPNG);
result &= testWithRenderTarget(video::EDT_BURNINGSVIDEO);
result &= testWithRenderTarget(video::EDT_SOFTWARE);
result &= testWithPNG(video::EDT_DIRECT3D9);
result &= testWithPNG(video::EDT_OPENGL);
return result; return result;
} }
...@@ -24,6 +24,8 @@ static bool lineRender(E_DRIVER_TYPE driverType) ...@@ -24,6 +24,8 @@ static bool lineRender(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver(); IVideoDriver* driver = device->getVideoDriver();
ISceneManager * smgr = device->getSceneManager(); ISceneManager * smgr = device->getSceneManager();
logTestString("Testing driver %ls\n", driver->getName());
// Draw a cube background so that we can check that the pixels' alpha is working. // Draw a cube background so that we can check that the pixels' alpha is working.
ISceneNode * cube = smgr->addCubeSceneNode(50.f, 0, -1, vector3df(0, 0, 60)); ISceneNode * cube = smgr->addCubeSceneNode(50.f, 0, -1, vector3df(0, 0, 60));
cube->setMaterialTexture(0, driver->getTexture("../media/wall.bmp")); cube->setMaterialTexture(0, driver->getTexture("../media/wall.bmp"));
...@@ -64,6 +66,8 @@ static bool pixelAccuracy(E_DRIVER_TYPE driverType) ...@@ -64,6 +66,8 @@ static bool pixelAccuracy(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver(); IVideoDriver* driver = device->getVideoDriver();
logTestString("Testing driver %ls\n", driver->getName());
device->getSceneManager()->addCameraSceneNode(); device->getSceneManager()->addCameraSceneNode();
driver->beginScene(true, true, SColor(255,100,101,140)); driver->beginScene(true, true, SColor(255,100,101,140));
...@@ -108,30 +112,10 @@ static bool pixelAccuracy(E_DRIVER_TYPE driverType) ...@@ -108,30 +112,10 @@ static bool pixelAccuracy(E_DRIVER_TYPE driverType)
bool drawPixel(void) bool drawPixel(void)
{ {
bool passed = true; bool result = true;
logTestString("Check OpenGL driver\n");
passed &= lineRender(EDT_OPENGL);
logTestString("Check Software driver\n");
passed &= lineRender(EDT_SOFTWARE);
logTestString("Check Burning's Video driver\n");
passed &= lineRender(EDT_BURNINGSVIDEO);
logTestString("Check Direct3D9 driver\n");
passed &= lineRender(EDT_DIRECT3D9);
logTestString("Check Direct3D8 driver\n");
passed &= lineRender(EDT_DIRECT3D8);
logTestString("Check OpenGL driver\n");
passed &= pixelAccuracy(EDT_OPENGL);
logTestString("Check Software driver\n");
passed &= pixelAccuracy(EDT_SOFTWARE);
logTestString("Check Burning's Video driver\n");
passed &= pixelAccuracy(EDT_BURNINGSVIDEO);
logTestString("Check Direct3D9 driver\n");
passed &= pixelAccuracy(EDT_DIRECT3D9);
logTestString("Check Direct3D8 driver\n");
passed &= pixelAccuracy(EDT_DIRECT3D8);
return passed;
}
TestWithAllDrivers(lineRender);
TestWithAllDrivers(pixelAccuracy);
return result;
}
...@@ -11,6 +11,8 @@ bool testWithDriver(video::E_DRIVER_TYPE driverType) ...@@ -11,6 +11,8 @@ bool testWithDriver(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
logTestString("Testing driver %ls\n", driver->getName());
driver->beginScene(true, true, video::SColor(255,100,101,140)); driver->beginScene(true, true, video::SColor(255,100,101,140));
core::recti r; core::recti r;
...@@ -40,10 +42,7 @@ bool testWithDriver(video::E_DRIVER_TYPE driverType) ...@@ -40,10 +42,7 @@ bool testWithDriver(video::E_DRIVER_TYPE driverType)
bool drawRectOutline(void) bool drawRectOutline(void)
{ {
// TODO: Only OpenGL supports thick lines // TODO: Only OpenGL supports thick lines
bool result = testWithDriver(video::EDT_BURNINGSVIDEO); bool result = true;
result &= testWithDriver(video::EDT_DIRECT3D8); TestWithAllDrivers(testWithDriver);
result &= testWithDriver(video::EDT_DIRECT3D9);
result &= testWithDriver(video::EDT_OPENGL);
result &= testWithDriver(video::EDT_SOFTWARE);
return result; return result;
} }
...@@ -14,7 +14,7 @@ using namespace gui; ...@@ -14,7 +14,7 @@ using namespace gui;
bool guiDisabledMenu(void) bool guiDisabledMenu(void)
{ {
IrrlichtDevice *device = createDevice( video::EDT_OPENGL, IrrlichtDevice *device = createDevice( video::EDT_BURNINGSVIDEO,
dimension2d<u32>(160, 40), 32); dimension2d<u32>(160, 40), 32);
assert(device); assert(device);
if (!device) if (!device)
......
...@@ -20,6 +20,15 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType) ...@@ -20,6 +20,15 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver(); IVideoDriver* driver = device->getVideoDriver();
ISceneManager * smgr = device->getSceneManager(); ISceneManager * smgr = device->getSceneManager();
logTestString("Testing driver %ls\n", driver->getName());
if (driver->getDriverAttributes().getAttributeAsInt("MaxTextures")<2)
{
device->closeDevice();
device->run();
device->drop();
return true;
}
bool result = true; bool result = true;
bool added = device->getFileSystem()->addFileArchive("../media/map-20kdm2.pk3"); bool added = device->getFileSystem()->addFileArchive("../media/map-20kdm2.pk3");
assert(added); assert(added);
...@@ -55,13 +64,8 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType) ...@@ -55,13 +64,8 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType)
bool lightMaps(void) bool lightMaps(void)
{ {
bool passed = true; bool result = true;
TestWithAllDrivers(runTestWithDriver);
passed &= runTestWithDriver(EDT_OPENGL); return result;
passed &= runTestWithDriver(EDT_BURNINGSVIDEO);
passed &= runTestWithDriver(EDT_DIRECT3D9);
passed &= runTestWithDriver(EDT_DIRECT3D8);
return passed;
} }
...@@ -10,34 +10,46 @@ static bool testLightTypes(video::E_DRIVER_TYPE driverType) ...@@ -10,34 +10,46 @@ static bool testLightTypes(video::E_DRIVER_TYPE driverType)
IrrlichtDevice *device = createDevice (driverType, core::dimension2d<u32>(128,128)); IrrlichtDevice *device = createDevice (driverType, core::dimension2d<u32>(128,128));
if (!device) if (!device)
return true; // No error if device does not exist return true; // No error if device does not exist
// device->getSceneManager()->setAmbientLight(video::SColorf(0.3f,0.3f,0.3f));
scene::ICameraSceneNode* cam = device->getSceneManager()->addCameraSceneNode(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
if (!driver->getDriverAttributes().getAttributeAsInt("MaxLights"))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
// smgr->setAmbientLight(video::SColorf(0.3f,0.3f,0.3f));
scene::ICameraSceneNode* cam = smgr->addCameraSceneNode();
cam->setPosition(core::vector3df(0,200,0)); cam->setPosition(core::vector3df(0,200,0));
cam->setTarget(core::vector3df()); cam->setTarget(core::vector3df());
device->getSceneManager()->addAnimatedMeshSceneNode(device->getSceneManager()->addHillPlaneMesh("plane", core::dimension2df(4,4), core::dimension2du(128,128))); smgr->addAnimatedMeshSceneNode(device->getSceneManager()->addHillPlaneMesh("plane", core::dimension2df(4,4), core::dimension2du(128,128)));
scene::ILightSceneNode* light1 = device->getSceneManager()->addLightSceneNode(0, core::vector3df(-100,30,-100)); scene::ILightSceneNode* light1 = smgr->addLightSceneNode(0, core::vector3df(-100,30,-100));
light1->setLightType(video::ELT_POINT); light1->setLightType(video::ELT_POINT);
light1->setRadius(100.f); light1->setRadius(100.f);
light1->getLightData().DiffuseColor.set(0,1,1); light1->getLightData().DiffuseColor.set(0,1,1);
// device->getSceneManager()->addCubeSceneNode(10, light1)->setMaterialFlag(video::EMF_LIGHTING, false); // smgr->addCubeSceneNode(10, light1)->setMaterialFlag(video::EMF_LIGHTING, false);
scene::ILightSceneNode* light2 = device->getSceneManager()->addLightSceneNode(0, core::vector3df(100,30,100)); scene::ILightSceneNode* light2 = smgr->addLightSceneNode(0, core::vector3df(100,30,100));
light2->setRotation(core::vector3df(90,0,0)); light2->setRotation(core::vector3df(90,0,0));
light2->setLightType(video::ELT_SPOT); light2->setLightType(video::ELT_SPOT);
light2->setRadius(100.f); light2->setRadius(100.f);
light2->getLightData().DiffuseColor.set(1,0,0); light2->getLightData().DiffuseColor.set(1,0,0);
light2->getLightData().InnerCone=10.f; light2->getLightData().InnerCone=10.f;
light2->getLightData().OuterCone=30.f; light2->getLightData().OuterCone=30.f;
// device->getSceneManager()->addCubeSceneNode(10, light2)->setMaterialFlag(video::EMF_LIGHTING, false); // smgr->addCubeSceneNode(10, light2)->setMaterialFlag(video::EMF_LIGHTING, false);
scene::ILightSceneNode* light3 = device->getSceneManager()->addLightSceneNode(); scene::ILightSceneNode* light3 = smgr->addLightSceneNode();
light3->setRotation(core::vector3df(15,0,0)); light3->setRotation(core::vector3df(15,0,0));
light3->setLightType(video::ELT_DIRECTIONAL); light3->setLightType(video::ELT_DIRECTIONAL);
light1->getLightData().DiffuseColor.set(0,1,0); light1->getLightData().DiffuseColor.set(0,1,0);
device->getVideoDriver()->beginScene (true, true, 0); driver->beginScene (true, true, 0);
device->getSceneManager()->drawAll(); smgr->drawAll();
device->getVideoDriver()->endScene(); driver->endScene();
const bool result = takeScreenshotAndCompareAgainstReference(device->getVideoDriver(), "-lightType.png", 99.91f); const bool result = takeScreenshotAndCompareAgainstReference(driver, "-lightType.png", 99.91f);
device->closeDevice(); device->closeDevice();
device->run(); device->run();
...@@ -48,14 +60,8 @@ static bool testLightTypes(video::E_DRIVER_TYPE driverType) ...@@ -48,14 +60,8 @@ static bool testLightTypes(video::E_DRIVER_TYPE driverType)
bool lights(void) bool lights(void)
{ {
bool passed = true; bool result = true;
passed &= testLightTypes(video::EDT_OPENGL);
// no lights in sw renderer // no lights in sw renderer
// passed &= testLightTypes(video::EDT_SOFTWARE); TestWithAllDrivers(testLightTypes);
passed &= testLightTypes(video::EDT_BURNINGSVIDEO); return result;
passed &= testLightTypes(video::EDT_DIRECT3D9);
passed &= testLightTypes(video::EDT_DIRECT3D8);
return passed;
} }
...@@ -92,6 +92,8 @@ int main(int argumentCount, char * arguments[]) ...@@ -92,6 +92,8 @@ int main(int argumentCount, char * arguments[])
TEST(createImage); TEST(createImage);
TEST(cursorSetVisible); TEST(cursorSetVisible);
TEST(flyCircleAnimator); TEST(flyCircleAnimator);
TEST(guiDisabledMenu);
TEST(makeColorKeyTexture);
TEST(md2Animation); TEST(md2Animation);
TEST(meshTransform); TEST(meshTransform);
TEST(skinnedMesh); TEST(skinnedMesh);
...@@ -103,8 +105,6 @@ int main(int argumentCount, char * arguments[]) ...@@ -103,8 +105,6 @@ int main(int argumentCount, char * arguments[])
TEST(screenshot); TEST(screenshot);
TEST(drawPixel); TEST(drawPixel);
TEST(drawRectOutline); TEST(drawRectOutline);
TEST(guiDisabledMenu);
TEST(makeColorKeyTexture);
TEST(material); TEST(material);
TEST(renderTargetTexture); TEST(renderTargetTexture);
TEST(textureFeatures); TEST(textureFeatures);
...@@ -139,9 +139,9 @@ int main(int argumentCount, char * arguments[]) ...@@ -139,9 +139,9 @@ int main(int argumentCount, char * arguments[])
{ {
for (unsigned int i=0; i<tests.size(); ++i) for (unsigned int i=0; i<tests.size(); ++i)
{ {
printf("%3d: %s\n", i, tests[i].testName); logTestString("%3d: %s\n", i, tests[i].testName);
} }
printf("\n"); logTestString("\n");
return 0; return 0;
} }
......
...@@ -61,7 +61,7 @@ static bool polygonOffset(video::E_DRIVER_TYPE type) ...@@ -61,7 +61,7 @@ static bool polygonOffset(video::E_DRIVER_TYPE type)
bool material() bool material()
{ {
bool result = polygonOffset(video::EDT_OPENGL); bool result = true;
result &= polygonOffset(video::EDT_DIRECT3D9); TestWithAllDrivers(polygonOffset);
return result; return result;
} }
...@@ -4,24 +4,18 @@ ...@@ -4,24 +4,18 @@
#include "testUtils.h" #include "testUtils.h"
using namespace irr; using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
// Tests mesh loading features and the mesh cache. // Tests mesh loading features and the mesh cache.
/** This won't test render results. Currently, not all mesh loaders are tested. */ /** This won't test render results. Currently, not all mesh loaders are tested. */
bool meshLoaders(void) bool meshLoaders(void)
{ {
IrrlichtDevice *device = createDevice( EDT_NULL, dimension2d<u32>(160, 120), 32); IrrlichtDevice *device = createDevice(video::EDT_NULL, core::dimension2d<u32>(160, 120), 32);
assert(device); assert(device);
if (!device) if (!device)
return false; return false;
ISceneManager * smgr = device->getSceneManager(); scene::ISceneManager * smgr = device->getSceneManager();
scene::IAnimatedMesh* mesh = smgr->getMesh("../media/ninja.b3d");
IAnimatedMesh* mesh = smgr->getMesh("../media/ninja.b3d");
assert(mesh); assert(mesh);
bool result = (mesh != 0); bool result = (mesh != 0);
......
...@@ -17,6 +17,8 @@ static bool testWithDriver(video::E_DRIVER_TYPE driverType) ...@@ -17,6 +17,8 @@ static bool testWithDriver(video::E_DRIVER_TYPE driverType)
// if (driver->getDriverAttributes().getAttributeAsInt("ShaderLanguageVersion")<=100) // if (driver->getDriverAttributes().getAttributeAsInt("ShaderLanguageVersion")<=100)
// return true; // return true;
logTestString("Testing driver %ls\n", driver->getName());
const char* const ps1="struct PS_INPUT\n {\n float4 Position : POSITION0;\n };\n\n struct PS_OUTPUT\n {\n float4 Color : COLOR0;\n float4 Normal : COLOR1;\n float4 Depth : COLOR2;\n };\n PS_OUTPUT pixelMain( PS_INPUT Input )\n {\n PS_OUTPUT Output;\n Output.Color = float4(1.0,1.0,1.0,1.0);\n Output.Normal = float4(0.0,1.0,0.0,1.0);\n Output.Depth = float4(0.0,0.0,1.0,1.0);\n return Output;\n }"; const char* const ps1="struct PS_INPUT\n {\n float4 Position : POSITION0;\n };\n\n struct PS_OUTPUT\n {\n float4 Color : COLOR0;\n float4 Normal : COLOR1;\n float4 Depth : COLOR2;\n };\n PS_OUTPUT pixelMain( PS_INPUT Input )\n {\n PS_OUTPUT Output;\n Output.Color = float4(1.0,1.0,1.0,1.0);\n Output.Normal = float4(0.0,1.0,0.0,1.0);\n Output.Depth = float4(0.0,0.0,1.0,1.0);\n return Output;\n }";
const char* const ps2="void main(void)\n {\n gl_FragData[0] = vec4(1.0,1.0,1.0,1.0);\n gl_FragData[1] = vec4(0.0,1.0,0.0,1.0);\n gl_FragData[2] = vec4(0.0,0.0,1.0,1.0);\n }"; const char* const ps2="void main(void)\n {\n gl_FragData[0] = vec4(1.0,1.0,1.0,1.0);\n gl_FragData[1] = vec4(0.0,1.0,0.0,1.0);\n gl_FragData[2] = vec4(0.0,0.0,1.0,1.0);\n }";
...@@ -95,10 +97,9 @@ static bool testWithDriver(video::E_DRIVER_TYPE driverType) ...@@ -95,10 +97,9 @@ static bool testWithDriver(video::E_DRIVER_TYPE driverType)
bool mrt(void) bool mrt(void)
{ {
bool passed = true; bool result = true;
passed &= testWithDriver(video::EDT_OPENGL); TestWithAllHWDrivers(testWithDriver);
passed &= testWithDriver(video::EDT_DIRECT3D9);
return passed; return result;
} }
...@@ -19,6 +19,8 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType) ...@@ -19,6 +19,8 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver(); IVideoDriver* driver = device->getVideoDriver();
logTestString("Testing driver %ls\n", driver->getName());
bool result = true; bool result = true;
driver->beginScene(true, false, SColor(255,0,0,0)); driver->beginScene(true, false, SColor(255,0,0,0));
...@@ -73,14 +75,10 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType) ...@@ -73,14 +75,10 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType)
bool projectionMatrix(void) bool projectionMatrix(void)
{ {
bool passed = true; bool result = true;
// TODO: Seems that software driver does not handle this projection matrix // TODO: Seems that software driver does not handle this projection matrix
// passed &= runTestWithDriver(EDT_SOFTWARE); TestWithAllDrivers(runTestWithDriver);
passed &= runTestWithDriver(EDT_BURNINGSVIDEO);
passed &= runTestWithDriver(EDT_DIRECT3D9);
passed &= runTestWithDriver(EDT_DIRECT3D8);
passed &= runTestWithDriver(EDT_OPENGL);
return passed; return result;
} }
...@@ -13,10 +13,18 @@ static bool testWith2DImage(video::E_DRIVER_TYPE driverType) ...@@ -13,10 +13,18 @@ static bool testWith2DImage(video::E_DRIVER_TYPE driverType)
if (!device) if (!device)
return true; // No error if device does not exist return true; // No error if device does not exist
device->setWindowCaption (L"Irrlicht - RTT Bug report");
video::IVideoDriver *driver = device->getVideoDriver (); video::IVideoDriver *driver = device->getVideoDriver ();
scene::ISceneManager *smgr = device->getSceneManager (); scene::ISceneManager *smgr = device->getSceneManager ();
if (!driver->queryFeature(video::EVDF_RENDER_TO_TARGET))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
video::ITexture *image = driver->getTexture ("../media/irrlichtlogo2.png"); video::ITexture *image = driver->getTexture ("../media/irrlichtlogo2.png");
video::ITexture *RTT_texture = driver->addRenderTargetTexture (core::dimension2d < u32 > (128, 128)); video::ITexture *RTT_texture = driver->addRenderTargetTexture (core::dimension2d < u32 > (128, 128));
...@@ -101,6 +109,8 @@ bool rttAndZBuffer(video::E_DRIVER_TYPE driverType) ...@@ -101,6 +109,8 @@ bool rttAndZBuffer(video::E_DRIVER_TYPE driverType)
IrrlichtDevice* nullDevice = createDevice(video::EDT_NULL); IrrlichtDevice* nullDevice = createDevice(video::EDT_NULL);
cp.WindowSize = nullDevice->getVideoModeList()->getDesktopResolution(); cp.WindowSize = nullDevice->getVideoModeList()->getDesktopResolution();
nullDevice->closeDevice();
nullDevice->run();
nullDevice->drop(); nullDevice->drop();
cp.WindowSize -= core::dimension2d<u32>(100, 100); cp.WindowSize -= core::dimension2d<u32>(100, 100);
...@@ -113,7 +123,14 @@ bool rttAndZBuffer(video::E_DRIVER_TYPE driverType) ...@@ -113,7 +123,14 @@ bool rttAndZBuffer(video::E_DRIVER_TYPE driverType)
scene::ISceneManager* sm = device->getSceneManager(); scene::ISceneManager* sm = device->getSceneManager();
if (!vd->queryFeature(video::EVDF_RENDER_TO_TARGET)) if (!vd->queryFeature(video::EVDF_RENDER_TO_TARGET))
{
device->closeDevice();
device->run();
device->drop();
return true; return true;
}
logTestString("Testing driver %ls\n", vd->getName());
video::ITexture* rt = vd->addRenderTargetTexture(cp.WindowSize, "rt", video::ECF_A32B32G32R32F); video::ITexture* rt = vd->addRenderTargetTexture(cp.WindowSize, "rt", video::ECF_A32B32G32R32F);
video::S3DVertex vertices[4]; video::S3DVertex vertices[4];
...@@ -196,10 +213,24 @@ bool rttAndText(video::E_DRIVER_TYPE driverType) ...@@ -196,10 +213,24 @@ bool rttAndText(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
gui::IGUIEnvironment* guienv = device->getGUIEnvironment(); gui::IGUIEnvironment* guienv = device->getGUIEnvironment();
if (!driver->queryFeature(video::EVDF_RENDER_TO_TARGET))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
//RTT //RTT
video::ITexture* rt = driver->addRenderTargetTexture(core::dimension2d<u32>(256, 256), "rt"); video::ITexture* rt = driver->addRenderTargetTexture(core::dimension2d<u32>(256, 256), "rt");
if (!rt) if (!rt)
{
device->closeDevice();
device->run();
device->drop();
return false; return false;
}
driver->beginScene(true, true, video::SColor(255,255, 255, 255)); driver->beginScene(true, true, video::SColor(255,255, 255, 255));
driver->setRenderTarget(rt, true, true, video::SColor(255,255,0,255)); driver->setRenderTarget(rt, true, true, video::SColor(255,255,0,255));
...@@ -245,7 +276,8 @@ bool rttAndText(video::E_DRIVER_TYPE driverType) ...@@ -245,7 +276,8 @@ bool rttAndText(video::E_DRIVER_TYPE driverType)
static void Render(IrrlichtDevice* device, video::ITexture* rt, core::vector3df& pos1, static void Render(IrrlichtDevice* device, video::ITexture* rt, core::vector3df& pos1,
core::vector3df& pos2, scene::IAnimatedMesh* sphereMesh, core::vector3df& pos3, core::vector3df& pos4) core::vector3df& pos2, scene::IAnimatedMesh* sphereMesh, core::vector3df& pos3, core::vector3df& pos4)
{ {
device->getVideoDriver()->setRenderTarget(rt); video::IVideoDriver* driver = device->getVideoDriver();
driver->setRenderTarget(rt);
device->getSceneManager()->drawAll(); device->getSceneManager()->drawAll();
video::SMaterial mat; video::SMaterial mat;
...@@ -257,27 +289,27 @@ static void Render(IrrlichtDevice* device, video::ITexture* rt, core::vector3df& ...@@ -257,27 +289,27 @@ static void Render(IrrlichtDevice* device, video::ITexture* rt, core::vector3df&
core::matrix4 m; core::matrix4 m;
m.setTranslation(pos1); m.setTranslation(pos1);
device->getVideoDriver()->setTransform(video::ETS_WORLD, m); driver->setTransform(video::ETS_WORLD, m);
device->getVideoDriver()->setMaterial(mat); driver->setMaterial(mat);
device->getVideoDriver()->drawMeshBuffer(sphereMesh->getMeshBuffer(0)); driver->drawMeshBuffer(sphereMesh->getMeshBuffer(0));
m.setTranslation(pos2); m.setTranslation(pos2);
mat.Shininess=0.f; mat.Shininess=0.f;
device->getVideoDriver()->setTransform(video::ETS_WORLD, m); driver->setTransform(video::ETS_WORLD, m);
device->getVideoDriver()->setMaterial(mat); driver->setMaterial(mat);
device->getVideoDriver()->drawMeshBuffer(sphereMesh->getMeshBuffer(0)); driver->drawMeshBuffer(sphereMesh->getMeshBuffer(0));
m.setTranslation(pos3); m.setTranslation(pos3);
mat.Shininess=8.f; mat.Shininess=8.f;
device->getVideoDriver()->setTransform(video::ETS_WORLD, m); driver->setTransform(video::ETS_WORLD, m);
device->getVideoDriver()->setMaterial(mat); driver->setMaterial(mat);
device->getVideoDriver()->drawMeshBuffer(sphereMesh->getMeshBuffer(0)); driver->drawMeshBuffer(sphereMesh->getMeshBuffer(0));
m.setTranslation(pos4); m.setTranslation(pos4);
mat.Shininess=0.f; mat.Shininess=0.f;
device->getVideoDriver()->setTransform(video::ETS_WORLD, m); driver->setTransform(video::ETS_WORLD, m);
device->getVideoDriver()->setMaterial(mat); driver->setMaterial(mat);
device->getVideoDriver()->drawMeshBuffer(sphereMesh->getMeshBuffer(0)); driver->drawMeshBuffer(sphereMesh->getMeshBuffer(0));
} }
bool rttAndAntiAliasing(video::E_DRIVER_TYPE driverType) bool rttAndAntiAliasing(video::E_DRIVER_TYPE driverType)
...@@ -293,6 +325,16 @@ bool rttAndAntiAliasing(video::E_DRIVER_TYPE driverType) ...@@ -293,6 +325,16 @@ bool rttAndAntiAliasing(video::E_DRIVER_TYPE driverType)
return true; return true;
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
if ((driver->getDriverAttributes().getAttributeAsInt("AntiAlias")<2) ||
(!driver->queryFeature(video::EVDF_RENDER_TO_TARGET)))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
// sphere mesh // sphere mesh
scene::IAnimatedMesh* sphereMesh = device->getSceneManager()->addSphereMesh("atom", 1, 32, 32); scene::IAnimatedMesh* sphereMesh = device->getSceneManager()->addSphereMesh("atom", 1, 32, 32);
...@@ -320,11 +362,11 @@ bool rttAndAntiAliasing(video::E_DRIVER_TYPE driverType) ...@@ -320,11 +362,11 @@ bool rttAndAntiAliasing(video::E_DRIVER_TYPE driverType)
video::ITexture* rt1 = device->getVideoDriver()->addRenderTargetTexture(dim_txt, "rt1", device->getColorFormat()); video::ITexture* rt1 = device->getVideoDriver()->addRenderTargetTexture(dim_txt, "rt1", device->getColorFormat());
video::ITexture* rt2 = device->getVideoDriver()->addRenderTargetTexture(dim_txt, "rt2", device->getColorFormat()); video::ITexture* rt2 = device->getVideoDriver()->addRenderTargetTexture(dim_txt, "rt2", device->getColorFormat());
video::ITexture* rt3 = device->getVideoDriver()->addRenderTargetTexture(dim_txt, "rt3", video::ECF_A8R8G8B8);//device->getColorFormat()); video::ITexture* rt3 = device->getVideoDriver()->addRenderTargetTexture(dim_txt, "rt3", video::ECF_A8R8G8B8);
video::ITexture* rt4 = device->getVideoDriver()->addRenderTargetTexture(dim_txt, "rt4", device->getColorFormat()); video::ITexture* rt4 = device->getVideoDriver()->addRenderTargetTexture(dim_txt, "rt4", device->getColorFormat());
device->getSceneManager()->setActiveCamera(cam); device->getSceneManager()->setActiveCamera(cam);
device->getVideoDriver()->beginScene(); //true, true, SColor(0, 30, 40, 60)); device->getVideoDriver()->beginScene();
#if 1 #if 1
st->setText(L"Texture Rendering"); st->setText(L"Texture Rendering");
Render(device, rt1, pos1, pos2, sphereMesh, pos3, pos4); Render(device, rt1, pos1, pos2, sphereMesh, pos3, pos4);
...@@ -365,6 +407,8 @@ bool rttFormats(video::E_DRIVER_TYPE driverType) ...@@ -365,6 +407,8 @@ bool rttFormats(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
logTestString("Testing driver %ls\n", driver->getName());
video::ITexture* tex = 0; video::ITexture* tex = 0;
{ {
...@@ -517,41 +561,19 @@ bool rttFormats(video::E_DRIVER_TYPE driverType) ...@@ -517,41 +561,19 @@ bool rttFormats(video::E_DRIVER_TYPE driverType)
bool renderTargetTexture(void) bool renderTargetTexture(void)
{ {
bool passed = true; bool result = true;
passed &= testWith2DImage(video::EDT_OPENGL); TestWithAllDrivers(testWith2DImage);
passed &= testWith2DImage(video::EDT_SOFTWARE);
passed &= testWith2DImage(video::EDT_BURNINGSVIDEO);
passed &= testWith2DImage(video::EDT_DIRECT3D9);
passed &= testWith2DImage(video::EDT_DIRECT3D8);
#if 0 #if 0
passed &= rttAndZBuffer(video::EDT_OPENGL); TestWithAllDrivers(rttAndZBuffer);
passed &= rttAndZBuffer(video::EDT_SOFTWARE);
passed &= rttAndZBuffer(video::EDT_BURNINGSVIDEO);
passed &= rttAndZBuffer(video::EDT_DIRECT3D9);
passed &= rttAndZBuffer(video::EDT_DIRECT3D8);
#endif #endif
passed &= rttAndAntiAliasing(video::EDT_OPENGL); TestWithAllDrivers(rttAndAntiAliasing);
// passed &= rttAndAntiAliasing(video::EDT_SOFTWARE); TestWithAllDrivers(rttAndText);
passed &= rttAndAntiAliasing(video::EDT_BURNINGSVIDEO);
passed &= rttAndAntiAliasing(video::EDT_DIRECT3D9);
passed &= rttAndAntiAliasing(video::EDT_DIRECT3D8);
passed &= rttAndText(video::EDT_OPENGL);
passed &= rttAndText(video::EDT_DIRECT3D9);
passed &= rttAndText(video::EDT_DIRECT3D8);
passed &= rttAndText(video::EDT_BURNINGSVIDEO);
passed &= rttAndText(video::EDT_SOFTWARE);
logTestString("Test RTT format support\n"); logTestString("Test RTT format support\n");
logTestString("OpenGL:\n"); TestWithAllHWDrivers(rttFormats);
passed &= rttFormats(video::EDT_OPENGL);
logTestString("D3D9:\n"); return result;
passed &= rttFormats(video::EDT_DIRECT3D9);
logTestString("D3D8:\n");
passed &= rttFormats(video::EDT_DIRECT3D8);
return passed;
} }
...@@ -456,7 +456,7 @@ static bool compareGetSceneNodeFromRayBBWithBBIntersectsWithLine(IrrlichtDevice ...@@ -456,7 +456,7 @@ static bool compareGetSceneNodeFromRayBBWithBBIntersectsWithLine(IrrlichtDevice
/** Test functionality of the sceneCollisionManager */ /** Test functionality of the sceneCollisionManager */
bool sceneCollisionManager(void) bool sceneCollisionManager(void)
{ {
IrrlichtDevice * device = irr::createDevice(video::EDT_OPENGL, dimension2d<u32>(160, 120)); IrrlichtDevice * device = irr::createDevice(video::EDT_NULL, dimension2d<u32>(160, 120));
assert(device); assert(device);
if(!device) if(!device)
return false; return false;
......
...@@ -15,6 +15,8 @@ bool testShots(video::E_DRIVER_TYPE type) ...@@ -15,6 +15,8 @@ bool testShots(video::E_DRIVER_TYPE type)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager(); scene::ISceneManager * smgr = device->getSceneManager();
logTestString("Testing driver %ls\n", driver->getName());
scene::IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2"); scene::IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2");
scene::IAnimatedMeshSceneNode* node; scene::IAnimatedMeshSceneNode* node;
...@@ -55,7 +57,7 @@ bool testShots(video::E_DRIVER_TYPE type) ...@@ -55,7 +57,7 @@ bool testShots(video::E_DRIVER_TYPE type)
bool screenshot() bool screenshot()
{ {
testShots(video::EDT_OPENGL); bool result = true;
testShots(video::EDT_DIRECT3D9); TestWithAllHWDrivers(testShots);
return true; return result;
} }
...@@ -11,7 +11,7 @@ namespace ...@@ -11,7 +11,7 @@ namespace
bool terrainRecalc(void) bool terrainRecalc(void)
{ {
IrrlichtDevice *device = IrrlichtDevice *device =
createDevice(video::EDT_OPENGL, dimension2du(160, 120), 32); createDevice(video::EDT_BURNINGSVIDEO, dimension2du(160, 120), 32);
if (!device) if (!device)
return true; return true;
...@@ -77,7 +77,7 @@ bool terrainRecalc(void) ...@@ -77,7 +77,7 @@ bool terrainRecalc(void)
bool terrainGaps() bool terrainGaps()
{ {
IrrlichtDevice* device = createDevice(video::EDT_OPENGL, dimension2d<u32>(160, 120)); IrrlichtDevice* device = createDevice(video::EDT_BURNINGSVIDEO, dimension2d<u32>(160, 120));
if (!device) if (!device)
return true; return true;
......
...@@ -5,6 +5,13 @@ ...@@ -5,6 +5,13 @@
#include "irrlicht.h" #include "irrlicht.h"
#include <assert.h> #include <assert.h>
#define TestWithAllDrivers(X, ...) \
for (u32 i=1; i<video::EDT_COUNT; ++i) \
result &= X(video::E_DRIVER_TYPE(i), __VA_ARGS__)
#define TestWithAllHWDrivers(X, ...) \
for (u32 i=video::EDT_DIRECT3D8; i<video::EDT_COUNT; ++i) \
result &= X(video::E_DRIVER_TYPE(i), __VA_ARGS__)
//! Compare two files //! Compare two files
/** \param fileName1 The first file for comparison. /** \param fileName1 The first file for comparison.
\param fileName1 The second file for comparison. \param fileName1 The second file for comparison.
......
// Copyright (C) 2009-2011 Christian Stehno // Copyright (C) 2009-2011 Christian Stehno
// No rights reserved: this software is in the public domain. // No rights reserved: this software is in the public domain.
#include "testUtils.h" #include "testUtils.h"
using namespace irr; using namespace irr;
using namespace core; using namespace core;
bool simple_xml( irr::io::IFileSystem * fs ) bool simple_xml( irr::io::IFileSystem * fs )
{ {
io::IXMLReaderUTF8* reader = fs->createXMLReaderUTF8("media/test.xml"); io::IXMLReaderUTF8* reader = fs->createXMLReaderUTF8("media/test.xml");
if (!reader) if (!reader)
{ {
logTestString("Could not create XML reader.\n"); logTestString("Could not create XML reader.\n");
return false; return false;
} }
const core::stringc expected[] = { const core::stringc expected[] = {
"a", "b", "c" "a", "b", "c"
}; };
bool retVal = true; bool retVal = true;
u32 i=0; u32 i=0;
while(reader->read()) while(reader->read())
{ {
if (reader->getNodeType() == io::EXN_ELEMENT) if (reader->getNodeType() == io::EXN_ELEMENT)
{ {
if (expected[i++] != reader->getNodeName()) if (expected[i++] != reader->getNodeName())
{ {
logTestString("Did not find expected string in XML element name.\n"); logTestString("Did not find expected string in XML element name.\n");
retVal = false; retVal = false;
break; break;
} }
} }
} }
reader->drop(); reader->drop();
return retVal; return retVal;
} }
// CDATA should return everything between "![CDATA[" and "]]>" as it's in the file // CDATA should return everything between "![CDATA[" and "]]>" as it's in the file
bool cdata( irr::io::IFileSystem * fs ) bool cdata( irr::io::IFileSystem * fs )
{ {
io::IXMLReaderUTF8* reader = fs->createXMLReaderUTF8("media/cdata.xml"); io::IXMLReaderUTF8* reader = fs->createXMLReaderUTF8("media/cdata.xml");
if (!reader) if (!reader)
{ {
logTestString("Could not create XML reader.\n"); logTestString("Could not create XML reader.\n");
return false; return false;
} }
const core::stringc textNode("text"); const core::stringc textNode("text");
core::array< core::stringc > compareStrings; core::array< core::stringc > compareStrings;
compareStrings.push_back("simple"); compareStrings.push_back("simple");
compareStrings.push_back(""); compareStrings.push_back("");
compareStrings.push_back("] ]> "); compareStrings.push_back("] ]> ");
compareStrings.push_back("]\n]> "); compareStrings.push_back("]\n]> ");
compareStrings.push_back("\nNewlines\n\tand tabs\n\t\tgogogo"); compareStrings.push_back("\nNewlines\n\tand tabs\n\t\tgogogo");
compareStrings.push_back("&&#@#$%*()@#$%*()#$%*("); compareStrings.push_back("&&#@#$%*()@#$%*()#$%*(");
compareStrings.push_back("& & && &&& &a &ü &ä &ö &&#"); compareStrings.push_back("& & && &&& &a &ü &ä &ö &&#");
bool result = true; bool result = true;
size_t count = 0; size_t count = 0;
while(reader->read()) while(reader->read())
{ {
if (reader->getNodeType() == io::EXN_ELEMENT) if (reader->getNodeType() == io::EXN_ELEMENT)
{ {
if ( core::stringc(reader->getNodeName()) == textNode ) if ( core::stringc(reader->getNodeName()) == textNode )
{ {
while(reader->read()) while(reader->read())
{ {
if (reader->getNodeType() == io::EXN_CDATA) if (reader->getNodeType() == io::EXN_CDATA)
{ {
core::stringc data = reader->getNodeData(); core::stringc data = reader->getNodeData();
core::stringc name = reader->getNodeName(); core::stringc name = reader->getNodeName();
if ( count == compareStrings.size() ) if ( count == compareStrings.size() )
{ {
logTestString("too many cdata elements for reading in %s:%d\n", __FILE__, __LINE__); logTestString("too many cdata elements for reading in %s:%d\n", __FILE__, __LINE__);
} }
else if ( count < compareStrings.size() ) else if ( count < compareStrings.size() )
{ {
core::stringc cmpString(compareStrings[count]); core::stringc cmpString(compareStrings[count]);
// some (unused) variables to ease debugging // some (unused) variables to ease debugging
// const c8* dataRaw = data.c_str(); // const c8* dataRaw = data.c_str();
// const c8* cmpRaw = cmpString.c_str(); // const c8* cmpRaw = cmpString.c_str();
if ( cmpString != data ) if ( cmpString != data )
{ {
result = false; result = false;
logTestString("cdata read failed for string %d in %s:%d\n", count, __FILE__, __LINE__); logTestString("cdata read failed for string %d in %s:%d\n", count, __FILE__, __LINE__);
} }
} }
++count; ++count;
} }
if ( reader->getNodeType() == io::EXN_ELEMENT_END ) if ( reader->getNodeType() == io::EXN_ELEMENT_END )
{ {
break; break;
} }
} }
} }
} }
} }
reader->drop(); reader->drop();
return result; return result;
} }
bool attributeValues(irr::io::IFileSystem * fs) bool attributeValues(irr::io::IFileSystem * fs)
{ {
io::IXMLReaderUTF8* reader = fs->createXMLReaderUTF8("media/attributes.xml"); io::IXMLReaderUTF8* reader = fs->createXMLReaderUTF8("media/attributes.xml");
if (!reader) if (!reader)
{ {
logTestString("Could not create XML reader.\n"); logTestString("Could not create XML reader.\n");
return false; return false;
} }
bool result = true; bool result = true;
bool hasNode = false; bool hasNode = false;
while (reader->read()) while (reader->read())
{ {
if (io::EXN_ELEMENT == reader->getNodeType() ) if (io::EXN_ELEMENT == reader->getNodeType() )
{ {
if ( core::stringc(reader->getNodeName()) == core::stringc("element_position") ) if ( core::stringc(reader->getNodeName()) == core::stringc("element_position") )
{ {
hasNode = true; hasNode = true;
int id1 = reader->getAttributeValueAsInt("id1"); int id1 = reader->getAttributeValueAsInt("id1");
if ( id1 != 152722522 ) if ( id1 != 152722522 )
{ {
logTestString("id1 is %d in %s:%d\n", id1, __FILE__, __LINE__); logTestString("id1 is %d in %s:%d\n", id1, __FILE__, __LINE__);
result = false; result = false;
} }
int id2 = reader->getAttributeValueAsInt("id2"); int id2 = reader->getAttributeValueAsInt("id2");
result &= id2 == 3; result &= id2 == 3;
int x = reader->getAttributeValueAsInt("x"); int x = reader->getAttributeValueAsInt("x");
result &= x == 301; result &= x == 301;
int y = reader->getAttributeValueAsInt("y"); int y = reader->getAttributeValueAsInt("y");
result &= y == 118; result &= y == 118;
} }
} }
} }
if ( !hasNode ) if ( !hasNode )
{ {
logTestString("missing node in xml in %s:%d\n", __FILE__, __LINE__); logTestString("missing node in xml in %s:%d\n", __FILE__, __LINE__);
return false; return false;
} }
reader->drop(); reader->drop();
return result; return result;
} }
/** Tests for XML handling */ /** Tests for XML handling */
bool testXML(void) bool testXML(void)
{ {
IrrlichtDevice *device = createDevice(video::EDT_NULL, dimension2du(400, 200)); IrrlichtDevice *device = createDevice(video::EDT_NULL, dimension2du(400, 200));
bool result = true; bool result = true;
logTestString("Test simple XML reader features.\n"); logTestString("Test simple XML reader features.\n");
result &= simple_xml(device->getFileSystem()); result &= simple_xml(device->getFileSystem());
logTestString("Test XML reader CDATA support.\n"); logTestString("Test XML reader CDATA support.\n");
result &= cdata(device->getFileSystem()); result &= cdata(device->getFileSystem());
logTestString("Test XML reader attribute support.\n"); logTestString("Test XML reader attribute support.\n");
result &= attributeValues(device->getFileSystem()); result &= attributeValues(device->getFileSystem());
device->closeDevice(); device->closeDevice();
device->run(); device->run();
device->drop(); device->drop();
return result; return result;
} }
...@@ -17,6 +17,15 @@ bool renderMipLevels(video::E_DRIVER_TYPE driverType) ...@@ -17,6 +17,15 @@ bool renderMipLevels(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager(); scene::ISceneManager * smgr = device->getSceneManager();
if (!driver->queryFeature(video::EVDF_MIP_MAP))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
scene::ISceneNode* n = smgr->addCubeSceneNode(); scene::ISceneNode* n = smgr->addCubeSceneNode();
scene::ISceneNode* n2 = smgr->addCubeSceneNode(10, 0, -1, core::vector3df(20,0,30), core::vector3df(0,45,0)); scene::ISceneNode* n2 = smgr->addCubeSceneNode(10, 0, -1, core::vector3df(20,0,30), core::vector3df(0,45,0));
...@@ -87,6 +96,16 @@ bool lockAllMipLevels(video::E_DRIVER_TYPE driverType) ...@@ -87,6 +96,16 @@ bool lockAllMipLevels(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager(); scene::ISceneManager * smgr = device->getSceneManager();
if (!driver->queryFeature(video::EVDF_MIP_MAP))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
scene::ISceneNode* n = smgr->addCubeSceneNode(); scene::ISceneNode* n = smgr->addCubeSceneNode();
if (n) if (n)
...@@ -193,6 +212,16 @@ bool lockWithAutoMipmap(video::E_DRIVER_TYPE driverType) ...@@ -193,6 +212,16 @@ bool lockWithAutoMipmap(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager(); scene::ISceneManager * smgr = device->getSceneManager();
if (!driver->queryFeature(video::EVDF_MIP_MAP))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
scene::ISceneNode* n = smgr->addCubeSceneNode(); scene::ISceneNode* n = smgr->addCubeSceneNode();
if (n) if (n)
...@@ -263,24 +292,11 @@ bool lockWithAutoMipmap(video::E_DRIVER_TYPE driverType) ...@@ -263,24 +292,11 @@ bool lockWithAutoMipmap(video::E_DRIVER_TYPE driverType)
bool textureFeatures(void) bool textureFeatures(void)
{ {
bool passed = true; bool result = true;
logTestString("OpenGL\n"); TestWithAllDrivers(renderMipLevels);
passed &= renderMipLevels(video::EDT_OPENGL); TestWithAllDrivers(lockAllMipLevels);
passed &= lockAllMipLevels(video::EDT_OPENGL); TestWithAllDrivers(lockWithAutoMipmap);
passed &= lockWithAutoMipmap(video::EDT_OPENGL);
logTestString("Burnings Video\n"); return result;
passed &= renderMipLevels(video::EDT_BURNINGSVIDEO);
passed &= lockAllMipLevels(video::EDT_BURNINGSVIDEO);
passed &= lockWithAutoMipmap(video::EDT_BURNINGSVIDEO);
logTestString("Direct3D9\n");
passed &= renderMipLevels(video::EDT_DIRECT3D9);
passed &= lockAllMipLevels(video::EDT_DIRECT3D9);
passed &= lockWithAutoMipmap(video::EDT_DIRECT3D9);
logTestString("Direct3D8\n");
passed &= renderMipLevels(video::EDT_DIRECT3D8);
passed &= lockAllMipLevels(video::EDT_DIRECT3D8);
passed &= lockWithAutoMipmap(video::EDT_DIRECT3D8);
return passed;
} }
...@@ -14,6 +14,9 @@ static bool manyTextures(video::E_DRIVER_TYPE driverType) ...@@ -14,6 +14,9 @@ static bool manyTextures(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager(); scene::ISceneManager * smgr = device->getSceneManager();
logTestString("Testing driver %ls\n", driver->getName());
(void)smgr->addCameraSceneNode(); (void)smgr->addCameraSceneNode();
scene::SMeshBufferLightMap* mesh = new scene::SMeshBufferLightMap; scene::SMeshBufferLightMap* mesh = new scene::SMeshBufferLightMap;
...@@ -73,6 +76,8 @@ static bool renderAndLoad(video::E_DRIVER_TYPE driverType) ...@@ -73,6 +76,8 @@ static bool renderAndLoad(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager(); scene::ISceneManager * smgr = device->getSceneManager();
logTestString("Testing driver %ls\n", driver->getName());
video::ITexture* tex1 = driver->getTexture("../media/wall.bmp"); video::ITexture* tex1 = driver->getTexture("../media/wall.bmp");
(void)smgr->addCameraSceneNode(); (void)smgr->addCameraSceneNode();
...@@ -108,6 +113,8 @@ static bool renderAndRemove(video::E_DRIVER_TYPE driverType) ...@@ -108,6 +113,8 @@ static bool renderAndRemove(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager(); scene::ISceneManager * smgr = device->getSceneManager();
logTestString("Testing driver %ls\n", driver->getName());
driver->beginScene (true, true, video::SColor(255, 0, 255, 0)); driver->beginScene (true, true, video::SColor(255, 0, 255, 0));
smgr->drawAll(); smgr->drawAll();
driver->endScene(); driver->endScene();
...@@ -155,6 +162,16 @@ static bool testTextureMatrixInMixedScenes(video::E_DRIVER_TYPE driverType) ...@@ -155,6 +162,16 @@ static bool testTextureMatrixInMixedScenes(video::E_DRIVER_TYPE driverType)
scene::ISceneManager* sceneManager = device->getSceneManager(); scene::ISceneManager* sceneManager = device->getSceneManager();
gui::IGUIEnvironment* gui = device->getGUIEnvironment(); gui::IGUIEnvironment* gui = device->getGUIEnvironment();
if (!driver->queryFeature(video::EVDF_TEXTURE_MATRIX))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
scene::ICameraSceneNode* camera = sceneManager->addCameraSceneNode(); scene::ICameraSceneNode* camera = sceneManager->addCameraSceneNode();
camera->setPosition(vector3df(0,10,0)); camera->setPosition(vector3df(0,10,0));
...@@ -200,6 +217,16 @@ static bool textureMatrix(video::E_DRIVER_TYPE driverType) ...@@ -200,6 +217,16 @@ static bool textureMatrix(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* sceneManager = device->getSceneManager(); scene::ISceneManager* sceneManager = device->getSceneManager();
if (!driver->queryFeature(video::EVDF_TEXTURE_MATRIX))
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
scene::ICameraSceneNode* camera = sceneManager->addCameraSceneNode(); scene::ICameraSceneNode* camera = sceneManager->addCameraSceneNode();
camera->setPosition(vector3df(0,0,-10)); camera->setPosition(vector3df(0,0,-10));
...@@ -248,35 +275,13 @@ static bool textureMatrix(video::E_DRIVER_TYPE driverType) ...@@ -248,35 +275,13 @@ static bool textureMatrix(video::E_DRIVER_TYPE driverType)
bool textureRenderStates(void) bool textureRenderStates(void)
{ {
bool passed = true; bool result = true;
passed &= renderAndLoad(video::EDT_OPENGL);
passed &= renderAndLoad(video::EDT_SOFTWARE);
passed &= renderAndLoad(video::EDT_BURNINGSVIDEO);
passed &= renderAndLoad(video::EDT_DIRECT3D9);
passed &= renderAndLoad(video::EDT_DIRECT3D8);
passed &= renderAndRemove(video::EDT_OPENGL);
passed &= renderAndRemove(video::EDT_SOFTWARE);
passed &= renderAndRemove(video::EDT_BURNINGSVIDEO);
passed &= renderAndRemove(video::EDT_DIRECT3D9);
passed &= renderAndRemove(video::EDT_DIRECT3D8);
passed &= testTextureMatrixInMixedScenes(video::EDT_OPENGL);
passed &= testTextureMatrixInMixedScenes(video::EDT_SOFTWARE);
passed &= testTextureMatrixInMixedScenes(video::EDT_BURNINGSVIDEO);
passed &= testTextureMatrixInMixedScenes(video::EDT_DIRECT3D9);
passed &= testTextureMatrixInMixedScenes(video::EDT_DIRECT3D8);
passed &= manyTextures(video::EDT_OPENGL);
passed &= manyTextures(video::EDT_SOFTWARE);
passed &= manyTextures(video::EDT_BURNINGSVIDEO);
passed &= manyTextures(video::EDT_DIRECT3D9);
passed &= manyTextures(video::EDT_DIRECT3D8);
passed &= textureMatrix(video::EDT_OPENGL);
passed &= textureMatrix(video::EDT_DIRECT3D9);
return passed;
}
TestWithAllDrivers(renderAndLoad);
TestWithAllDrivers(renderAndRemove);
TestWithAllDrivers(testTextureMatrixInMixedScenes);
TestWithAllDrivers(manyTextures);
TestWithAllDrivers(textureMatrix);
return result;
}
...@@ -19,6 +19,16 @@ bool testTransparentAlphaChannelRef(video::E_DRIVER_TYPE driverType) ...@@ -19,6 +19,16 @@ bool testTransparentAlphaChannelRef(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager(); scene::ISceneManager* smgr = device->getSceneManager();
if (driver->getColorFormat() != video::ECF_A8R8G8B8)
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true); driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
ISceneNode * backCube = smgr->addCubeSceneNode(); ISceneNode * backCube = smgr->addCubeSceneNode();
...@@ -59,6 +69,16 @@ bool testTransparentAlphaChannel(video::E_DRIVER_TYPE driverType) ...@@ -59,6 +69,16 @@ bool testTransparentAlphaChannel(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager(); scene::ISceneManager* smgr = device->getSceneManager();
if (driver->getColorFormat() != video::ECF_A8R8G8B8)
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true); driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
ISceneNode * backCube = smgr->addCubeSceneNode(); ISceneNode * backCube = smgr->addCubeSceneNode();
...@@ -99,6 +119,16 @@ bool testTransparentVertexAlpha(video::E_DRIVER_TYPE driverType) ...@@ -99,6 +119,16 @@ bool testTransparentVertexAlpha(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager(); scene::ISceneManager* smgr = device->getSceneManager();
if (driver->getColorFormat() != video::ECF_A8R8G8B8)
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true); driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
ISceneNode * backCube = smgr->addCubeSceneNode(); ISceneNode * backCube = smgr->addCubeSceneNode();
...@@ -146,6 +176,16 @@ bool testTransparentReflection2Layer(video::E_DRIVER_TYPE driverType) ...@@ -146,6 +176,16 @@ bool testTransparentReflection2Layer(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager(); scene::ISceneManager* smgr = device->getSceneManager();
if (driver->getColorFormat() != video::ECF_A8R8G8B8)
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true); driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
ISceneNode * backCube = smgr->addCubeSceneNode(); ISceneNode * backCube = smgr->addCubeSceneNode();
...@@ -196,6 +236,16 @@ bool testTransparentAddColor(video::E_DRIVER_TYPE driverType) ...@@ -196,6 +236,16 @@ bool testTransparentAddColor(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager(); scene::ISceneManager* smgr = device->getSceneManager();
if (driver->getColorFormat() != video::ECF_A8R8G8B8)
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true); driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
ISceneNode * backCube = smgr->addCubeSceneNode(); ISceneNode * backCube = smgr->addCubeSceneNode();
...@@ -235,6 +285,16 @@ bool testTransparentVertexAlphaMore(E_DRIVER_TYPE driverType) ...@@ -235,6 +285,16 @@ bool testTransparentVertexAlphaMore(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver(); IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager(); ISceneManager* smgr = device->getSceneManager();
if (driver->getColorFormat() != video::ECF_A8R8G8B8)
{
device->closeDevice();
device->run();
device->drop();
return true;
}
logTestString("Testing driver %ls\n", driver->getName());
IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2"); IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
IMeshSceneNode* cube = smgr->addCubeSceneNode(10.0f,0,-1,vector3df(-5,3,-15)); IMeshSceneNode* cube = smgr->addCubeSceneNode(10.0f,0,-1,vector3df(-5,3,-15));
...@@ -279,37 +339,21 @@ bool testTransparentVertexAlphaMore(E_DRIVER_TYPE driverType) ...@@ -279,37 +339,21 @@ bool testTransparentVertexAlphaMore(E_DRIVER_TYPE driverType)
bool transparentMaterials(void) bool transparentMaterials(void)
{ {
bool result = testTransparentAlphaChannel(EDT_DIRECT3D9); bool result = true;
result &= testTransparentAlphaChannel(EDT_OPENGL); TestWithAllDrivers(testTransparentAlphaChannel);
result &= testTransparentAlphaChannel(EDT_BURNINGSVIDEO);
result &= testTransparentAlphaChannelRef(EDT_DIRECT3D9);
result &= testTransparentAlphaChannelRef(EDT_OPENGL);
// FIXME Rogerborg 8-January-2011. Burning's video currently produces unexpected results, // FIXME Rogerborg 8-January-2011. Burning's video currently produces unexpected results,
// blending using the full alpha value instead of using a boolean mask. This test is being // blending using the full alpha value instead of using a boolean mask. This test is being
// added now anyway to help verify the fix when it's done; it should just require an // added now anyway to help verify the fix when it's done; it should just require an
// update of the reference image. // update of the reference image.
result &= testTransparentAlphaChannelRef(EDT_BURNINGSVIDEO); TestWithAllDrivers(testTransparentAlphaChannelRef);
result &= testTransparentVertexAlpha(EDT_DIRECT3D9);
result &= testTransparentVertexAlpha(EDT_OPENGL);
// This type seems to be broken as well for Burning's video. // This type seems to be broken as well for Burning's video.
result &= testTransparentVertexAlpha(EDT_BURNINGSVIDEO); TestWithAllDrivers(testTransparentVertexAlpha);
TestWithAllDrivers(testTransparentAddColor);
result &= testTransparentAddColor(EDT_DIRECT3D9);
result &= testTransparentAddColor(EDT_OPENGL);
result &= testTransparentAddColor(EDT_BURNINGSVIDEO);
// TODO: this simply does not work in OpenGL due to the sphere map // TODO: this simply does not work in OpenGL due to the sphere map
// at least it creates different results, and also varies across drivers // at least it creates different results, and also varies across drivers
// result &= testTransparentReflection2Layer(EDT_OPENGL); TestWithAllDrivers(testTransparentReflection2Layer);
result &= testTransparentReflection2Layer(EDT_DIRECT3D9);
result &= testTransparentReflection2Layer(EDT_BURNINGSVIDEO);
result &= testTransparentVertexAlphaMore(EDT_DIRECT3D9);
result &= testTransparentVertexAlphaMore(EDT_OPENGL);
// This type seems to be broken as well for Burning's video. // This type seems to be broken as well for Burning's video.
result &= testTransparentVertexAlphaMore(EDT_BURNINGSVIDEO); TestWithAllDrivers(testTransparentVertexAlphaMore);
return result; return result;
} }
...@@ -28,7 +28,7 @@ bool testVideoDriver(video::E_DRIVER_TYPE driverType) ...@@ -28,7 +28,7 @@ bool testVideoDriver(video::E_DRIVER_TYPE driverType)
logTestString("MaxTextureSize: %d\n", driver->getDriverAttributes().getAttributeAsInt("MaxTextureSize")); logTestString("MaxTextureSize: %d\n", driver->getDriverAttributes().getAttributeAsInt("MaxTextureSize"));
logTestString("MaxGeometryVerticesOut: %d\n", driver->getDriverAttributes().getAttributeAsInt("MaxGeometryVerticesOut")); logTestString("MaxGeometryVerticesOut: %d\n", driver->getDriverAttributes().getAttributeAsInt("MaxGeometryVerticesOut"));
logTestString("Version: %d\n", driver->getDriverAttributes().getAttributeAsInt("Version")); logTestString("Version: %d\n", driver->getDriverAttributes().getAttributeAsInt("Version"));
logTestString("ShaderLanguageVersion: %d\n", driver->getDriverAttributes().getAttributeAsInt("ShaderLanguageVersion")); logTestString("ShaderLanguageVersion: %d\n\n", driver->getDriverAttributes().getAttributeAsInt("ShaderLanguageVersion"));
device->closeDevice(); device->closeDevice();
device->run(); device->run();
...@@ -38,11 +38,7 @@ bool testVideoDriver(video::E_DRIVER_TYPE driverType) ...@@ -38,11 +38,7 @@ bool testVideoDriver(video::E_DRIVER_TYPE driverType)
bool videoDriver() bool videoDriver()
{ {
bool result = testVideoDriver(video::EDT_OPENGL); bool result = true;
result &= testVideoDriver(video::EDT_DIRECT3D9); TestWithAllDrivers(testVideoDriver);
result &= testVideoDriver(video::EDT_DIRECT3D8);
result &= testVideoDriver(video::EDT_BURNINGSVIDEO);
result &= testVideoDriver(video::EDT_SOFTWARE);
result &= testVideoDriver(video::EDT_NULL);
return result; return result;
} }
...@@ -29,6 +29,8 @@ static bool viewPortText(E_DRIVER_TYPE driverType) ...@@ -29,6 +29,8 @@ static bool viewPortText(E_DRIVER_TYPE driverType)
IGUIEnvironment* env = smgr->getGUIEnvironment(); IGUIEnvironment* env = smgr->getGUIEnvironment();
env->addCheckBox(true, core::recti(10,60,28,82)); env->addCheckBox(true, core::recti(10,60,28,82));
logTestString("Testing driver %ls\n", driver->getName());
IBillboardSceneNode * bnode = smgr->addBillboardSceneNode(0,dimension2d<f32>(32,32),core::vector3df(0,0,10)); IBillboardSceneNode * bnode = smgr->addBillboardSceneNode(0,dimension2d<f32>(32,32),core::vector3df(0,0,10));
bnode->setMaterialFlag(video::EMF_LIGHTING, false); bnode->setMaterialFlag(video::EMF_LIGHTING, false);
bnode->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR); bnode->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
...@@ -63,21 +65,12 @@ static bool viewPortText(E_DRIVER_TYPE driverType) ...@@ -63,21 +65,12 @@ static bool viewPortText(E_DRIVER_TYPE driverType)
bool viewPort(void) bool viewPort(void)
{ {
bool passed = true; bool result = true;
logTestString("Check OpenGL driver\n");
passed &= viewPortText(EDT_OPENGL);
// TODO: software driver and burnings don't use view port for // TODO: software driver and burnings don't use view port for
// 2d rendering, so result is pretty wrong. // 2d rendering, so result is pretty wrong.
logTestString("Check Software driver\n"); TestWithAllDrivers(viewPortText);
passed &= viewPortText(EDT_SOFTWARE);
logTestString("Check Burning's Video driver\n"); return result;
passed &= viewPortText(EDT_BURNINGSVIDEO);
logTestString("Check Direct3D9 driver\n");
passed &= viewPortText(EDT_DIRECT3D9);
logTestString("Check Direct3D8 driver\n");
passed &= viewPortText(EDT_DIRECT3D8);
return passed;
} }
...@@ -53,8 +53,8 @@ bool writeImageToFile(void) ...@@ -53,8 +53,8 @@ bool writeImageToFile(void)
const char * referenceFilename = 0; const char * referenceFilename = 0;
video::ECOLOR_FORMAT format; video::ECOLOR_FORMAT format;
irr::video::IImage * screenshot = driver->createScreenShot(); irr::video::IImage * screenshot = driver->createScreenShot(video::ECF_R8G8B8);
if(!screenshot) if (!screenshot)
{ {
logTestString("Failed to take screenshot\n"); logTestString("Failed to take screenshot\n");
assert(false); assert(false);
...@@ -62,14 +62,14 @@ bool writeImageToFile(void) ...@@ -62,14 +62,14 @@ bool writeImageToFile(void)
} }
format = screenshot->getColorFormat(); format = screenshot->getColorFormat();
if(format != video::ECF_R8G8B8) if (format != video::ECF_R8G8B8)
{ {
irr::video::IImage * fixedScreenshot = driver->createImage(video::ECF_R8G8B8, screenshot->getDimension()); irr::video::IImage * fixedScreenshot = driver->createImage(video::ECF_R8G8B8, screenshot->getDimension());
screenshot->copyTo(fixedScreenshot); screenshot->copyTo(fixedScreenshot);
screenshot->drop(); screenshot->drop();
screenshot = 0; screenshot = 0;
if(!fixedScreenshot) if (!fixedScreenshot)
{ {
logTestString("Failed to convert screenshot to ECF_A8R8G8B8\n"); logTestString("Failed to convert screenshot to ECF_A8R8G8B8\n");
assert(false); assert(false);
...@@ -82,7 +82,7 @@ bool writeImageToFile(void) ...@@ -82,7 +82,7 @@ bool writeImageToFile(void)
buffer = new c8[BUFFER_SIZE]; buffer = new c8[BUFFER_SIZE];
writtenFilename = "results/Burning's Video-writeImageToFile.png"; writtenFilename = "results/Burning's Video-writeImageToFile.png";
memoryFile = device->getFileSystem()->createMemoryWriteFile(buffer, BUFFER_SIZE, writtenFilename, false); memoryFile = device->getFileSystem()->createMemoryWriteFile(buffer, BUFFER_SIZE, writtenFilename, false);
if(!driver->writeImageToFile(screenshot, memoryFile)) if (!driver->writeImageToFile(screenshot, memoryFile))
{ {
logTestString("Failed to write png to memory file\n"); logTestString("Failed to write png to memory file\n");
assert(false); assert(false);
...@@ -90,14 +90,14 @@ bool writeImageToFile(void) ...@@ -90,14 +90,14 @@ bool writeImageToFile(void)
} }
writtenFile = device->getFileSystem()->createAndWriteFile(memoryFile->getFileName()); writtenFile = device->getFileSystem()->createAndWriteFile(memoryFile->getFileName());
if(!writtenFile) if (!writtenFile)
{ {
logTestString("Can't open %s for writing.\n", writtenFilename); logTestString("Can't open %s for writing.\n", writtenFilename);
assert(false); assert(false);
goto cleanup; goto cleanup;
} }
if(memoryFile->getPos() != writtenFile->write(buffer, memoryFile->getPos())) if (memoryFile->getPos() != writtenFile->write(buffer, memoryFile->getPos()))
{ {
logTestString("Error while writing to %s.\n", writtenFilename); logTestString("Error while writing to %s.\n", writtenFilename);
assert(false); assert(false);
...@@ -108,7 +108,7 @@ bool writeImageToFile(void) ...@@ -108,7 +108,7 @@ bool writeImageToFile(void)
writtenFile = 0; writtenFile = 0;
referenceFilename = "media/Burning's Video-drawPixel.png"; referenceFilename = "media/Burning's Video-drawPixel.png";
if(!binaryCompareFiles(writtenFilename, referenceFilename)) if (!binaryCompareFiles(writtenFilename, referenceFilename))
{ {
logTestString("File written from memory is not the same as the reference file. %s:%d\n" , __FILE__, __LINE__); logTestString("File written from memory is not the same as the reference file. %s:%d\n" , __FILE__, __LINE__);
// assert(false); // assert(false);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment