1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#include "System/mmgr.h"
#include <map>
#include <boost/assign/list_of.hpp>
#include "LuaOpenGLUtils.h"
#include "Game/Camera.h"
#include "Rendering/ShadowHandler.h"
#include "System/Matrix44f.h"
#include "System/Util.h"
/******************************************************************************/
/******************************************************************************/
enum LUAMATRICES {
LUAMATRICES_SHADOW,
LUAMATRICES_VIEW,
LUAMATRICES_VIEWINVERSE,
LUAMATRICES_PROJECTION,
LUAMATRICES_PROJECTIONINVERSE,
LUAMATRICES_VIEWPROJECTION,
LUAMATRICES_VIEWPROJECTIONINVERSE,
LUAMATRICES_BILLBOARD,
LUAMATRICES_NONE
};
static const std::map<std::string, LUAMATRICES> matrixNameToId = boost::assign::map_list_of
("shadow", LUAMATRICES_SHADOW)
("view", LUAMATRICES_VIEW)
("viewinverse", LUAMATRICES_VIEWINVERSE)
("projection", LUAMATRICES_PROJECTION)
("projectioninverse", LUAMATRICES_PROJECTIONINVERSE)
("viewprojection", LUAMATRICES_VIEWPROJECTION)
("viewprojectioninverse", LUAMATRICES_VIEWPROJECTIONINVERSE)
("billboard", LUAMATRICES_BILLBOARD)
//!backward compability
("camera", LUAMATRICES_VIEW)
("caminv", LUAMATRICES_VIEWINVERSE)
("camprj", LUAMATRICES_PROJECTION)
("camprjinv", LUAMATRICES_PROJECTIONINVERSE)
;
inline static LUAMATRICES MatrixGetId(const std::string& name)
{
const std::map<std::string, LUAMATRICES>::const_iterator it = matrixNameToId.find(name);
if (it == matrixNameToId.end()) {
return LUAMATRICES_NONE;
}
return it->second;
}
/******************************************************************************/
/******************************************************************************/
const CMatrix44f* LuaOpenGLUtils::GetNamedMatrix(const std::string& name)
{
//! don't do for performance reasons (this function gets called a lot)
//StringToLowerInPlace(name);
const LUAMATRICES mat = MatrixGetId(name);
switch (mat) {
case LUAMATRICES_SHADOW:
if (!shadowHandler) { break; }
return &shadowHandler->shadowMatrix;
case LUAMATRICES_VIEW:
return &camera->GetViewMatrix();
case LUAMATRICES_VIEWINVERSE:
return &camera->GetViewMatrixInverse();
case LUAMATRICES_PROJECTION:
return &camera->GetProjectionMatrix();
case LUAMATRICES_PROJECTIONINVERSE:
return &camera->GetProjectionMatrixInverse();
case LUAMATRICES_VIEWPROJECTION:
return &camera->GetViewProjectionMatrix();
case LUAMATRICES_VIEWPROJECTIONINVERSE:
return &camera->GetViewProjectionMatrixInverse();
case LUAMATRICES_BILLBOARD:
return &camera->GetBillBoardMatrix();
case LUAMATRICES_NONE:
break;
}
return NULL;
}
/******************************************************************************/
/******************************************************************************/
|