1 #include "testUtils.h"
\r
8 bool testWithRenderTarget(video::E_DRIVER_TYPE driverType)
\r
12 IrrlichtDevice *device = createDevice(driverType, core::dimension2d<u32>(160,120));
\r
15 return true; // could not create selected driver.
\r
17 video::IVideoDriver* driver = device->getVideoDriver();
\r
19 if (!driver->queryFeature(video::EVDF_RENDER_TO_TARGET))
\r
21 device->closeDevice();
\r
27 stabilizeScreenBackground(driver);
\r
29 logTestString("Testing driver %ls\n", driver->getName());
\r
31 video::ITexture* renderTargetTex = driver->addRenderTargetTexture(core::dimension2d<u32>(64, 64), "BASEMAP");
\r
32 video::ITexture* renderTargetDepth = driver->addRenderTargetTexture(core::dimension2d<u32>(64, 64), "rtd", video::ECF_D16);
\r
34 video::IRenderTarget* renderTarget = driver->addRenderTarget();
\r
35 renderTarget->setTexture(renderTargetTex, renderTargetDepth);
\r
37 video::ITexture* tex=driver->getTexture("../media/water.jpg");
\r
39 driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(255,255,0,255));//Backbuffer background is pink
\r
41 //draw the 256x256 water image on the rendertarget:
\r
44 driver->setRenderTargetEx(renderTarget,video::ECBF_COLOR|video::ECBF_DEPTH,video::SColor(255,0,0,255));//Rendertarget background is blue
\r
45 driver->draw2DImage(tex, core::position2d<s32>(0,0), core::recti(0,0,32,32));
\r
46 driver->setRenderTargetEx(0, 0);
\r
48 //draw the rendertarget on screen:
\r
49 //this should normally draw a 64x64 image containing a 32x32 image in the top left corner
\r
50 driver->draw2DImage(renderTargetTex, core::position2d<s32>(0,0));
\r
53 bool result = takeScreenshotAndCompareAgainstReference(driver, "-draw2DImageRTT.png");
\r
55 device->closeDevice();
\r
62 // Test various special destination rectangles
\r
63 bool testRectangles(video::E_DRIVER_TYPE driverType)
\r
66 IrrlichtDevice *device = createDevice(driverType, core::dimension2d<u32>(160,120));
\r
69 return true; // could not create selected driver.
\r
71 video::IVideoDriver* driver = device->getVideoDriver();
\r
73 stabilizeScreenBackground(driver);
\r
75 logTestString("Testing driver %ls\n", driver->getName());
\r
77 video::ITexture *tex=driver->getTexture("../media/fireball.bmp");
\r
79 driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(255,255,0,255));//Backbuffer background is pink
\r
81 // draw normal, will be overdrwan in error case
\r
82 driver->draw2DImage(tex, core::recti(68,32,132,96), core::recti(0,0,64,64));
\r
83 //draw the image larger
\r
84 driver->draw2DImage(tex, core::recti(0,0,64,64), core::recti(0,0,32,32));
\r
85 //draw the image flipped horizontally
\r
86 driver->draw2DImage(tex, core::recti(132,0,68,64), core::recti(0,0,64,64));
\r
87 //draw the image smaller
\r
88 driver->draw2DImage(tex, core::recti(0,64,32,96), core::recti(0,0,64,64));
\r
89 //draw the image much smaller
\r
90 driver->draw2DImage(tex, core::recti(36,64,44,72), core::recti(0,0,64,64));
\r
91 //draw the image flipped horizontally
\r
92 driver->draw2DImage(tex, core::recti(68,64,132,0), core::recti(0,0,64,64));
\r
95 bool result = takeScreenshotAndCompareAgainstReference(driver, "-draw2DImageRect.png");
\r
97 device->closeDevice();
\r
104 // draws a complex (interlaced, paletted, alpha) png image
\r
105 bool testWithPNG(video::E_DRIVER_TYPE driverType)
\r
109 IrrlichtDevice *device = createDevice(driverType, core::dimension2d<u32>(160,120));
\r
112 return true; // could not create selected driver.
\r
114 video::IVideoDriver* driver = device->getVideoDriver();
\r
116 stabilizeScreenBackground(driver);
\r
118 logTestString("Testing driver %ls\n", driver->getName());
\r
120 video::ITexture *tex=driver->getTexture("media/RedbrushAlpha-0.25.png");
\r
122 driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(255,40,40,255));//Backbuffer background is blue
\r
123 driver->draw2DImage(tex, core::recti(0,0,160,120), core::recti(0,0,256,256), 0, 0, true);
\r
124 driver->endScene();
\r
126 bool result = takeScreenshotAndCompareAgainstReference(driver, "-draw2DImagePNG.png", 98.f);
\r
128 device->closeDevice();
\r
135 // draws an image and checks if the written example equals the original image
\r
136 bool testExactPlacement(video::E_DRIVER_TYPE driverType)
\r
140 IrrlichtDevice *device = createDevice(driverType, core::dimension2d<u32>(160,120), 32);
\r
143 return true; // could not create selected driver.
\r
145 video::IVideoDriver* driver = device->getVideoDriver();
\r
147 if (driver->getColorFormat() != video::ECF_A8R8G8B8 || !driver->queryFeature(video::EVDF_RENDER_TO_TARGET))
\r
149 device->closeDevice();
\r
155 stabilizeScreenBackground(driver);
\r
157 logTestString("Testing driver %ls\n", driver->getName());
\r
159 video::ITexture* renderTargetTex = driver->addRenderTargetTexture(core::dimension2d<u32>(32, 32), "rt1");
\r
160 video::ITexture* renderTargetDepth = driver->addRenderTargetTexture(core::dimension2d<u32>(32, 32), "rtd", video::ECF_D16);
\r
162 video::IRenderTarget* renderTarget = driver->addRenderTarget();
\r
163 renderTarget->setTexture(renderTargetTex, renderTargetDepth);
\r
165 video::ITexture* tex=driver->getTexture("../media/fireball.bmp");
\r
167 driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(255,40,40,255));//Backbuffer background is blue
\r
168 driver->setRenderTargetEx(renderTarget, 0, video::ECBF_COLOR | video::ECBF_DEPTH);
\r
169 driver->draw2DImage(tex, core::recti(0,0,32,32), core::recti(0,0,64,64));
\r
170 driver->setRenderTargetEx(0, 0, 0);
\r
171 driver->endScene();
\r
173 video::IImage* img = driver->createImage(renderTargetTex, core::vector2di(), renderTargetTex->getSize());
\r
174 driver->writeImageToFile(img, "results/fireball.png");
\r
176 bool result = fuzzyCompareImages(driver, "media/fireball.png", "results/fireball.png")>98.25f;
\r
178 device->closeDevice();
\r
189 bool result = true;
\r
190 TestWithAllDrivers(testWithRenderTarget);
\r
191 TestWithAllHWDrivers(testWithPNG);
\r
192 // TODO D3D driver moves image 1 pixel top-left in case of down scaling
\r
193 TestWithAllDrivers(testExactPlacement);
\r
194 TestWithAllDrivers(testRectangles);
\r