Commit 9548b470 authored by Nadro's avatar Nadro

- fixed issues with a D3D driver and Aero effects.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4159 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 390ee21b
......@@ -661,6 +661,8 @@ static bool draw2DImage4c(video::E_DRIVER_TYPE type)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS,true);
......@@ -775,6 +777,9 @@ static bool addBlend2d(video::E_DRIVER_TYPE type)
device->drop();
return false;
}
stabilizeScreenBackground(driver);
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
if (node)
......@@ -852,6 +857,8 @@ static bool moreFilterTests(video::E_DRIVER_TYPE type)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
......
......@@ -37,6 +37,9 @@ static bool testLineRendering(video::E_DRIVER_TYPE type)
device->drop();
return false;
}
stabilizeScreenBackground(driver);
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
if (node)
......
......@@ -23,6 +23,9 @@ bool testWithRenderTarget(video::E_DRIVER_TYPE driverType)
device->drop();
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
video::ITexture* RenderTarget=driver->addRenderTargetTexture(core::dimension2d<u32>(64,64), "BASEMAP");
......@@ -61,6 +64,8 @@ bool testRectangles(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
video::ITexture *tex=driver->getTexture("../media/fireball.bmp");
......@@ -102,6 +107,8 @@ bool testWithPNG(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
video::ITexture *tex=driver->getTexture("media/RedbrushAlpha-0.25.png");
......@@ -138,6 +145,9 @@ bool testExactPlacement(video::E_DRIVER_TYPE driverType)
device->drop();
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
video::ITexture* rt=driver->addRenderTargetTexture(core::dimension2d<u32>(32,32), "rt1");
......
......@@ -24,6 +24,8 @@ static bool lineRender(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver();
ISceneManager * smgr = device->getSceneManager();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
// Draw a cube background so that we can check that the pixels' alpha is working.
......@@ -66,6 +68,8 @@ static bool pixelAccuracy(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
device->getSceneManager()->addCameraSceneNode();
......@@ -126,6 +130,8 @@ static bool drawLine(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
device->getSceneManager()->addCameraSceneNode();
......
......@@ -11,6 +11,8 @@ bool testWithDriver(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
driver->beginScene(true, true, video::SColor(255,100,101,140));
......
......@@ -29,6 +29,8 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
bool result = true;
bool added = device->getFileSystem()->addFileArchive("../media/map-20kdm2.pk3");
assert_log(added);
......
......@@ -20,6 +20,9 @@ static bool testLightTypes(video::E_DRIVER_TYPE driverType)
device->drop();
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
// smgr->setAmbientLight(video::SColorf(0.3f,0.3f,0.3f));
......
......@@ -17,6 +17,9 @@ static bool polygonOffset(video::E_DRIVER_TYPE type)
device->drop();
return true;
}
stabilizeScreenBackground(driver);
scene::ISceneManager* smgr = device->getSceneManager();
// create first plane
......
......@@ -17,6 +17,8 @@ static bool testWithDriver(video::E_DRIVER_TYPE driverType)
// if (driver->getDriverAttributes().getAttributeAsInt("ShaderLanguageVersion")<=100)
// return true;
stabilizeScreenBackground(driver);
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 }";
......
......@@ -11,6 +11,8 @@ static bool testOrthoCam(video::E_DRIVER_TYPE driverType)
if (!device)
return true; // No error if device does not exist
stabilizeScreenBackground(device->getVideoDriver());
scene::ICameraSceneNode* cam = device->getSceneManager()->addCameraSceneNode();
cam->setPosition(core::vector3df(500,200,-500));
cam->setTarget(core::vector3df());
......@@ -53,6 +55,8 @@ static bool testOrthoStencil(video::E_DRIVER_TYPE driverType)
if (!device)
return true; // No error if device does not exist
stabilizeScreenBackground(device->getVideoDriver());
scene::ICameraSceneNode* cam = device->getSceneManager()->addCameraSceneNode();
cam->setPosition(core::vector3df(300,250,-300));
cam->setTarget(core::vector3df(0,20,0));
......
......@@ -19,6 +19,8 @@ static bool runTestWithDriver(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
bool result = true;
......
......@@ -23,6 +23,9 @@ static bool testWith2DImage(video::E_DRIVER_TYPE driverType)
device->drop();
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
video::ITexture *image = driver->getTexture ("../media/irrlichtlogo2.png");
......@@ -130,6 +133,8 @@ bool rttAndZBuffer(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(vd);
logTestString("Testing driver %ls\n", vd->getName());
video::ITexture* rt = vd->addRenderTargetTexture(cp.WindowSize, "rt", video::ECF_A32B32G32R32F);
......@@ -232,6 +237,8 @@ bool rttAndText(video::E_DRIVER_TYPE driverType)
return false;
}
stabilizeScreenBackground(driver);
driver->beginScene(true, true, video::SColor(255,255, 255, 255));
driver->setRenderTarget(rt, true, true, video::SColor(255,255,0,255));
driver->draw2DImage(driver->getTexture("../media/fireball.bmp"), core::recti(0, 0,rt->getSize().Width,rt->getSize().Height), core::recti(0,0,64,64));
......@@ -334,6 +341,8 @@ bool rttAndAntiAliasing(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
// sphere mesh
......
......@@ -25,6 +25,9 @@ bool testShots(video::E_DRIVER_TYPE type)
node = smgr->addAnimatedMeshSceneNode(mesh);
if (!node)
return false;
stabilizeScreenBackground(driver);
node->setPosition(core::vector3df(20, 0, 30));
node->setMaterialFlag(video::EMF_LIGHTING, false);
node->setMaterialTexture(0, driver->getTexture("../media/sydney.bmp"));
......
......@@ -11,6 +11,8 @@ static bool shadows(video::E_DRIVER_TYPE driverType)
if (!device)
return true; // No error if device does not exist
stabilizeScreenBackground(device->getVideoDriver());
scene::ICameraSceneNode* cam = device->getSceneManager()->addCameraSceneNodeFPS();
cam->setPosition(core::vector3df(-15,55,10));
cam->setTarget(core::vector3df(-5,-5,-15));
......
......@@ -333,6 +333,54 @@ float fuzzyCompareImages(irr::video::IVideoDriver * driver,
return result;
}
void stabilizeScreenBackground(irr::video::IVideoDriver * driver,
irr::video::SColor color)
{
for(int i = 0; i < 100; ++i) // 100 - max checks
{
driver->beginScene(true, true, color);
driver->endScene();
irr::video::IImage * screenshot = driver->createScreenShot();
if(!screenshot)
return;
const video::ECOLOR_FORMAT format = screenshot->getColorFormat();
if(format != video::ECF_R8G8B8)
{
irr::video::IImage * fixedScreenshot = driver->createImage(video::ECF_R8G8B8, screenshot->getDimension());
screenshot->copyTo(fixedScreenshot);
screenshot->drop();
if(!fixedScreenshot)
return;
screenshot = fixedScreenshot;
}
u8 * image1Data = (u8*)screenshot->lock();
const u32 pixels = (screenshot->getPitch() * screenshot->getDimension().Height) / 4;
u32 mismatchedColours = 0;
bool status = true;
for(u32 pixel = 0; pixel < pixels; ++pixel)
{
const u8 r = *(image1Data++);
const u8 g = *(image1Data++);
const u8 b = *(image1Data++);
if(r != color.getRed() || g != color.getGreen() || b != color.getBlue())
{
status = false;
break;
}
}
if(status)
return;
}
}
bool takeScreenshotAndCompareAgainstReference(irr::video::IVideoDriver * driver,
const char * fileName,
irr::f32 requiredMatch)
......
......@@ -55,6 +55,12 @@ extern bool takeScreenshotAndCompareAgainstReference(irr::video::IVideoDriver *
const char * fileName,
irr::f32 requiredMatch = 99.f);
//! Stabilize the screen background eg. eliminate problems like an aero transparency effects etc.
/** \param driver The Irrlicht video driver.
\return true if required color is the same as a window background color. */
extern void stabilizeScreenBackground(irr::video::IVideoDriver * driver,
irr::video::SColor color = irr::video::SColor(255, 255, 255, 255));
//! Opens a test log file, deleting any existing contents.
/** \param startNewLog true to create a new log file, false to append to an
......
......@@ -25,6 +25,8 @@ bool renderMipLevels(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
scene::ISceneNode* n = smgr->addCubeSceneNode();
......@@ -104,6 +106,8 @@ bool lockAllMipLevels(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
scene::ISceneNode* n = smgr->addCubeSceneNode();
......@@ -220,6 +224,8 @@ bool lockWithAutoMipmap(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
scene::ISceneNode* n = smgr->addCubeSceneNode();
......
......@@ -15,6 +15,8 @@ static bool manyTextures(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
(void)smgr->addCameraSceneNode();
......@@ -76,6 +78,8 @@ static bool renderAndLoad(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
video::ITexture* tex1 = driver->getTexture("../media/wall.bmp");
......@@ -113,6 +117,8 @@ static bool renderAndRemove(video::E_DRIVER_TYPE driverType)
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager * smgr = device->getSceneManager();
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
driver->beginScene (true, true, video::SColor(255, 0, 255, 0));
......@@ -170,6 +176,8 @@ static bool testTextureMatrixInMixedScenes(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
scene::ICameraSceneNode* camera = sceneManager->addCameraSceneNode();
......@@ -225,6 +233,8 @@ static bool textureMatrix(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
scene::ICameraSceneNode* camera = sceneManager->addCameraSceneNode();
......@@ -297,6 +307,8 @@ bool danglingTexturePointer()
irr::video::IVideoDriver* driver = device->getVideoDriver();
stabilizeScreenBackground(driver);
// Load a texture from a file
// This binds and uploads to OpenGL texture #2.
irr::video::ITexture* logo2 = driver->getTexture("../media/irrlichtlogo2.png");
......
......@@ -27,6 +27,8 @@ bool testTransparentAlphaChannelRef(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
......@@ -77,6 +79,8 @@ bool testTransparentAlphaChannel(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
......@@ -127,6 +131,8 @@ bool testTransparentVertexAlpha(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
......@@ -184,6 +190,8 @@ bool testTransparentReflection2Layer(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
......@@ -244,6 +252,8 @@ bool testTransparentAddColor(video::E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
......@@ -293,6 +303,8 @@ bool testTransparentVertexAlphaMore(E_DRIVER_TYPE driverType)
return true;
}
stabilizeScreenBackground(driver);
logTestString("Testing driver %ls\n", driver->getName());
IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2");
......
......@@ -47,6 +47,8 @@ bool octree()
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
stabilizeScreenBackground(driver);
scene::IMetaTriangleSelector * meta = smgr->createMetaTriangleSelector();
device->getFileSystem()->addFileArchive("../media/map-20kdm2.pk3");
......@@ -157,6 +159,8 @@ bool triangle()
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
stabilizeScreenBackground(driver);
scene::IMetaTriangleSelector * meta = smgr->createMetaTriangleSelector();
scene::IAnimatedMesh * mesh = smgr->getMesh("../media/sydney.md2");
......
......@@ -27,6 +27,9 @@ static bool viewPortText(E_DRIVER_TYPE driverType)
IVideoDriver* driver = device->getVideoDriver();
ISceneManager * smgr = device->getSceneManager();
IGUIEnvironment* env = smgr->getGUIEnvironment();
stabilizeScreenBackground(driver);
env->addCheckBox(true, core::recti(10,60,28,82));
logTestString("Testing driver %ls\n", driver->getName());
......
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