Merging r5975 through r6036 from trunk to ogl-es branch.
GLES drivers adapted, but only did make compile-tests. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6038 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
105
tests/orthoCam.cpp
Normal file
105
tests/orthoCam.cpp
Normal file
@@ -0,0 +1,105 @@
|
||||
// Copyright (C) 2008-2012 Christian Stehno, Colin MacDonald
|
||||
// No rights reserved: this software is in the public domain.
|
||||
|
||||
#include "testUtils.h"
|
||||
|
||||
using namespace irr;
|
||||
|
||||
static bool testOrthoCam(video::E_DRIVER_TYPE driverType)
|
||||
{
|
||||
IrrlichtDevice *device = createDevice (driverType, core::dimension2d<u32>(160,120));
|
||||
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());
|
||||
cam->setProjectionMatrix(core::matrix4().buildProjectionMatrixOrthoLH(240,180,0.9f,2000.f,driverType != video::EDT_OPENGL), true);
|
||||
|
||||
device->getSceneManager()->addAnimatedMeshSceneNode(device->getSceneManager()->addHillPlaneMesh("plane", core::dimension2df(32,32), core::dimension2du(16,16)));//->setMaterialFlag(video::EMF_WIREFRAME, true);
|
||||
device->getSceneManager()->addCubeSceneNode(20.f)->setPosition(core::vector3df(50,20,50));
|
||||
device->getSceneManager()->addCubeSceneNode(20.f)->setPosition(core::vector3df(50,20,-50));
|
||||
device->getSceneManager()->addCubeSceneNode(20.f)->setPosition(core::vector3df(50,50,0));
|
||||
|
||||
device->getSceneManager()->addCubeSceneNode(20.f)->setPosition(core::vector3df(-50,10,0));
|
||||
device->getSceneManager()->addCubeSceneNode(20.f)->setPosition(core::vector3df(100,10,-100));
|
||||
device->getSceneManager()->addCubeSceneNode(20.f)->setPosition(core::vector3df(150,10,0));
|
||||
|
||||
scene::IAnimatedMeshSceneNode* node = device->getSceneManager()->addAnimatedMeshSceneNode(device->getSceneManager()->getMesh("../media/ninja.b3d"), 0, -1, core::vector3df(-50,2,-50), core::vector3df(),core::vector3df(5,5,5));
|
||||
node->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);
|
||||
node->setAnimationSpeed(0.f);
|
||||
|
||||
scene::ILightSceneNode* light = device->getSceneManager()->addLightSceneNode(0, core::vector3df(0,100,0));
|
||||
light->setLightType(video::ELT_POINT);
|
||||
light->setRadius(500.f);
|
||||
light->getLightData().DiffuseColor.set(0,1,1);
|
||||
|
||||
device->getVideoDriver()->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(0,0,0,0));
|
||||
device->getSceneManager()->drawAll();
|
||||
device->getVideoDriver()->endScene();
|
||||
|
||||
const bool result = takeScreenshotAndCompareAgainstReference(device->getVideoDriver(), "-orthoCam.png", 99.91f);
|
||||
|
||||
device->closeDevice();
|
||||
device->run();
|
||||
device->drop();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static bool testOrthoStencil(video::E_DRIVER_TYPE driverType)
|
||||
{
|
||||
IrrlichtDevice *device = createDevice (driverType, core::dimension2d<u32>(160,120), 16, false, true);
|
||||
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));
|
||||
cam->setProjectionMatrix(core::matrix4().buildProjectionMatrixOrthoLH(120,90,0.9f,5000.f,driverType != video::EDT_OPENGL), true);
|
||||
|
||||
device->getSceneManager()->addAnimatedMeshSceneNode(device->getSceneManager()->addHillPlaneMesh("plane", core::dimension2df(32,32), core::dimension2du(16,16)));//->setMaterialFlag(video::EMF_WIREFRAME, true);
|
||||
|
||||
scene::IAnimatedMeshSceneNode* node = device->getSceneManager()->addAnimatedMeshSceneNode(device->getSceneManager()->getMesh("../media/ninja.b3d"), 0, -1, core::vector3df(0,2,0), core::vector3df(),core::vector3df(5,5,5));
|
||||
node->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);
|
||||
node->addShadowVolumeSceneNode();
|
||||
node->setAnimationSpeed(0.f);
|
||||
|
||||
scene::ILightSceneNode* light = device->getSceneManager()->addLightSceneNode(0, core::vector3df(100,150,100));
|
||||
light->setLightType(video::ELT_POINT);
|
||||
light->setRadius(500.f);
|
||||
light->getLightData().DiffuseColor.set(0,1,1);
|
||||
|
||||
device->getVideoDriver()->beginScene(video::ECBF_ALL, video::SColor(0,0,0,0));
|
||||
device->getSceneManager()->drawAll();
|
||||
device->getVideoDriver()->endScene();
|
||||
|
||||
const bool result = takeScreenshotAndCompareAgainstReference(device->getVideoDriver(), "-orthoStencil.png", 99.91f);
|
||||
|
||||
device->closeDevice();
|
||||
device->run();
|
||||
device->drop();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool orthoCam(void)
|
||||
{
|
||||
bool passed = true;
|
||||
|
||||
passed &= testOrthoCam(video::EDT_OPENGL);
|
||||
// no lights in sw renderer
|
||||
// passed &= testOrthoCam(video::EDT_SOFTWARE);
|
||||
passed &= testOrthoCam(video::EDT_BURNINGSVIDEO);
|
||||
passed &= testOrthoCam(video::EDT_DIRECT3D9);
|
||||
|
||||
// TODO: not sure if burnings could work? Currently it doesn't.
|
||||
passed &= testOrthoStencil(video::EDT_OPENGL);
|
||||
passed &= testOrthoStencil(video::EDT_DIRECT3D9);
|
||||
|
||||
return passed;
|
||||
}
|
Reference in New Issue
Block a user