BGE: Use float as default instead of double in Moto library.
Use float in moto instead of double for MT_Scalar. This switch allow future optimization like SSE. Additionally, it changes the OpenGL calls to float versions as they are very bad with doubles. Reviewers: campbellbarton, moguri, lordloki Reviewed By: lordloki Subscribers: brecht, lordloki Differential Revision: https://developer.blender.org/D1610
This commit is contained in:
@@ -55,7 +55,7 @@ class MT_CmMatrix4x4
|
|||||||
public :
|
public :
|
||||||
|
|
||||||
MT_CmMatrix4x4(
|
MT_CmMatrix4x4(
|
||||||
const float value[4][4]
|
const MT_Scalar value[4][4]
|
||||||
);
|
);
|
||||||
|
|
||||||
MT_CmMatrix4x4(
|
MT_CmMatrix4x4(
|
||||||
@@ -63,7 +63,7 @@ public :
|
|||||||
|
|
||||||
|
|
||||||
MT_CmMatrix4x4(
|
MT_CmMatrix4x4(
|
||||||
const double value[16]
|
const MT_Scalar value[16]
|
||||||
);
|
);
|
||||||
|
|
||||||
MT_CmMatrix4x4(
|
MT_CmMatrix4x4(
|
||||||
@@ -85,19 +85,19 @@ public :
|
|||||||
const MT_CmMatrix4x4 & other
|
const MT_CmMatrix4x4 & other
|
||||||
);
|
);
|
||||||
|
|
||||||
double*
|
MT_Scalar*
|
||||||
getPointer(
|
getPointer(
|
||||||
);
|
);
|
||||||
|
|
||||||
const
|
const
|
||||||
double*
|
MT_Scalar*
|
||||||
getPointer(
|
getPointer(
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
void
|
void
|
||||||
setElem(
|
setElem(
|
||||||
int pos,
|
int pos,
|
||||||
double newvalue
|
MT_Scalar newvalue
|
||||||
);
|
);
|
||||||
|
|
||||||
MT_Vector3
|
MT_Vector3
|
||||||
@@ -121,7 +121,7 @@ public :
|
|||||||
const MT_Vector3 & v
|
const MT_Vector3 & v
|
||||||
);
|
);
|
||||||
|
|
||||||
double&
|
MT_Scalar&
|
||||||
operator (
|
operator (
|
||||||
) (int row,int col) { return m_V[col][row]; }
|
) (int row,int col) { return m_V[col][row]; }
|
||||||
|
|
||||||
@@ -139,8 +139,8 @@ public :
|
|||||||
protected:
|
protected:
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
double m_V[4][4];
|
MT_Scalar m_V[4][4];
|
||||||
double m_Vflat[16];
|
MT_Scalar m_Vflat[16];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
#include "MT_random.h"
|
#include "MT_random.h"
|
||||||
|
|
||||||
typedef double MT_Scalar; //this should be float !
|
typedef float MT_Scalar;
|
||||||
|
|
||||||
|
|
||||||
const MT_Scalar MT_DEGS_PER_RAD(57.29577951308232286465);
|
const MT_Scalar MT_DEGS_PER_RAD(57.29577951308232286465);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ MT_CmMatrix4x4::MT_CmMatrix4x4()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
MT_CmMatrix4x4::MT_CmMatrix4x4(const float value[4][4])
|
MT_CmMatrix4x4::MT_CmMatrix4x4(const MT_Scalar value[4][4])
|
||||||
{
|
{
|
||||||
for (int i=0;i<4;i++)
|
for (int i=0;i<4;i++)
|
||||||
{
|
{
|
||||||
@@ -53,7 +53,7 @@ MT_CmMatrix4x4::MT_CmMatrix4x4(const float value[4][4])
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
MT_CmMatrix4x4::MT_CmMatrix4x4(const double value[16])
|
MT_CmMatrix4x4::MT_CmMatrix4x4(const MT_Scalar value[16])
|
||||||
{
|
{
|
||||||
for (int i=0;i<16;i++)
|
for (int i=0;i<16;i++)
|
||||||
m_Vflat[i] = value[i];
|
m_Vflat[i] = value[i];
|
||||||
@@ -148,21 +148,21 @@ void MT_CmMatrix4x4::SetMatrix(const MT_CmMatrix4x4& other)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
double* MT_CmMatrix4x4::getPointer()
|
MT_Scalar* MT_CmMatrix4x4::getPointer()
|
||||||
{
|
{
|
||||||
return &m_V[0][0];
|
return &m_V[0][0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const double* MT_CmMatrix4x4::getPointer() const
|
const MT_Scalar* MT_CmMatrix4x4::getPointer() const
|
||||||
{
|
{
|
||||||
return &m_V[0][0];
|
return &m_V[0][0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void MT_CmMatrix4x4::setElem(int pos,double newvalue)
|
void MT_CmMatrix4x4::setElem(int pos,MT_Scalar newvalue)
|
||||||
{
|
{
|
||||||
m_Vflat[pos] = newvalue;
|
m_Vflat[pos] = newvalue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,7 +194,10 @@ void KX_FontObject::DrawFontText()
|
|||||||
|
|
||||||
/* Get a working copy of the OpenGLMatrix to use */
|
/* Get a working copy of the OpenGLMatrix to use */
|
||||||
double mat[16];
|
double mat[16];
|
||||||
memcpy(mat, this->GetOpenGLMatrix(), sizeof(double)*16);
|
float *origmat = GetOpenGLMatrix();
|
||||||
|
for (unsigned short i = 0; i < 16; ++i) {
|
||||||
|
mat[i] = (double)origmat[i];
|
||||||
|
}
|
||||||
|
|
||||||
/* Account for offset */
|
/* Account for offset */
|
||||||
MT_Vector3 offset = this->NodeGetWorldOrientation() * m_offset * this->NodeGetWorldScaling();
|
MT_Vector3 offset = this->NodeGetWorldOrientation() * m_offset * this->NodeGetWorldScaling();
|
||||||
|
|||||||
@@ -700,10 +700,10 @@ void KX_GameObject::ApplyRotation(const MT_Vector3& drot,bool local)
|
|||||||
/**
|
/**
|
||||||
* GetOpenGL Matrix, returns an OpenGL 'compatible' matrix
|
* GetOpenGL Matrix, returns an OpenGL 'compatible' matrix
|
||||||
*/
|
*/
|
||||||
double* KX_GameObject::GetOpenGLMatrix()
|
float *KX_GameObject::GetOpenGLMatrix()
|
||||||
{
|
{
|
||||||
// todo: optimize and only update if necessary
|
// todo: optimize and only update if necessary
|
||||||
double* fl = m_OpenGL_4x4Matrix.getPointer();
|
float *fl = m_OpenGL_4x4Matrix.getPointer();
|
||||||
if (GetSGNode()) {
|
if (GetSGNode()) {
|
||||||
MT_Transform trans;
|
MT_Transform trans;
|
||||||
|
|
||||||
@@ -742,7 +742,7 @@ void KX_GameObject::AddMeshUser()
|
|||||||
m_meshes[i]->AddMeshUser(this, &m_meshSlots, GetDeformer());
|
m_meshes[i]->AddMeshUser(this, &m_meshSlots, GetDeformer());
|
||||||
}
|
}
|
||||||
// set the part of the mesh slot that never change
|
// set the part of the mesh slot that never change
|
||||||
double* fl = GetOpenGLMatrixPtr()->getPointer();
|
float *fl = GetOpenGLMatrixPtr()->getPointer();
|
||||||
|
|
||||||
SG_QList::iterator<RAS_MeshSlot> mit(m_meshSlots);
|
SG_QList::iterator<RAS_MeshSlot> mit(m_meshSlots);
|
||||||
// RAS_MeshSlot* ms;
|
// RAS_MeshSlot* ms;
|
||||||
@@ -2768,7 +2768,7 @@ PyObject *KX_GameObject::pyattr_get_localTransform(void *self_v, const KX_PYATTR
|
|||||||
{
|
{
|
||||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||||
|
|
||||||
double mat[16];
|
float mat[16];
|
||||||
|
|
||||||
MT_Transform trans;
|
MT_Transform trans;
|
||||||
|
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ public:
|
|||||||
* side effect of storing the result internally. The
|
* side effect of storing the result internally. The
|
||||||
* memory for the matrix remains the property of this class.
|
* memory for the matrix remains the property of this class.
|
||||||
*/
|
*/
|
||||||
double *
|
float *
|
||||||
GetOpenGLMatrix(
|
GetOpenGLMatrix(
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1557,9 +1557,9 @@ void KX_Scene::CalculateVisibleMeshes(RAS_IRasterizer* rasty,KX_Camera* cam, int
|
|||||||
planes[5].setValue(cplanes[3].getValue()); // bottom
|
planes[5].setValue(cplanes[3].getValue()); // bottom
|
||||||
CullingInfo info(layer);
|
CullingInfo info(layer);
|
||||||
|
|
||||||
double mvmat[16] = {0};
|
float mvmat[16] = {0};
|
||||||
cam->GetModelviewMatrix().getValue(mvmat);
|
cam->GetModelviewMatrix().getValue(mvmat);
|
||||||
double pmat[16] = {0};
|
float pmat[16] = {0};
|
||||||
cam->GetProjectionMatrix().getValue(pmat);
|
cam->GetProjectionMatrix().getValue(pmat);
|
||||||
|
|
||||||
dbvt_culling = m_physicsEnvironment->CullingTest(PhysicsCullingCallback,&info,planes,5,m_dbvt_occlusion_res,
|
dbvt_culling = m_physicsEnvironment->CullingTest(PhysicsCullingCallback,&info,planes,5,m_dbvt_occlusion_res,
|
||||||
|
|||||||
@@ -1472,7 +1472,7 @@ struct OcclusionBuffer
|
|||||||
m[15] = btScalar(m1[3] * m2[12] + m1[7] * m2[13] + m1[11] * m2[14] + m1[15] * m2[15]);
|
m[15] = btScalar(m1[3] * m2[12] + m1[7] * m2[13] + m1[11] * m2[14] + m1[15] * m2[15]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup(int size, const int *view, double modelview[16], double projection[16])
|
void setup(int size, const int *view, float modelview[16], float projection[16])
|
||||||
{
|
{
|
||||||
m_initialized = false;
|
m_initialized = false;
|
||||||
m_occlusion = false;
|
m_occlusion = false;
|
||||||
@@ -1519,7 +1519,7 @@ struct OcclusionBuffer
|
|||||||
m_occlusion = false;
|
m_occlusion = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetModelMatrix(double *fl)
|
void SetModelMatrix(float *fl)
|
||||||
{
|
{
|
||||||
CMmat4mul(m_mtc,m_wtc,fl);
|
CMmat4mul(m_mtc,m_wtc,fl);
|
||||||
if (!m_initialized) {
|
if (!m_initialized) {
|
||||||
@@ -1969,7 +1969,7 @@ struct DbvtCullingCallback : btDbvt::ICollide
|
|||||||
KX_GameObject* gameobj = KX_GameObject::GetClientObject(info);
|
KX_GameObject* gameobj = KX_GameObject::GetClientObject(info);
|
||||||
if (gameobj && gameobj->GetOccluder())
|
if (gameobj && gameobj->GetOccluder())
|
||||||
{
|
{
|
||||||
double* fl = gameobj->GetOpenGLMatrixPtr()->getPointer();
|
float *fl = gameobj->GetOpenGLMatrixPtr()->getPointer();
|
||||||
// this will create the occlusion buffer if not already done
|
// this will create the occlusion buffer if not already done
|
||||||
// and compute the transformation from model local space to clip space
|
// and compute the transformation from model local space to clip space
|
||||||
m_ocb->SetModelMatrix(fl);
|
m_ocb->SetModelMatrix(fl);
|
||||||
@@ -2010,7 +2010,7 @@ struct DbvtCullingCallback : btDbvt::ICollide
|
|||||||
};
|
};
|
||||||
|
|
||||||
static OcclusionBuffer gOcb;
|
static OcclusionBuffer gOcb;
|
||||||
bool CcdPhysicsEnvironment::CullingTest(PHY_CullingCallback callback, void* userData, MT_Vector4 *planes, int nplanes, int occlusionRes, const int *viewport, double modelview[16], double projection[16])
|
bool CcdPhysicsEnvironment::CullingTest(PHY_CullingCallback callback, void* userData, MT_Vector4 *planes, int nplanes, int occlusionRes, const int *viewport, float modelview[16], float projection[16])
|
||||||
{
|
{
|
||||||
if (!m_cullingTree)
|
if (!m_cullingTree)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ protected:
|
|||||||
btTypedConstraint* GetConstraintById(int constraintId);
|
btTypedConstraint* GetConstraintById(int constraintId);
|
||||||
|
|
||||||
virtual PHY_IPhysicsController* RayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
|
virtual PHY_IPhysicsController* RayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
|
||||||
virtual bool CullingTest(PHY_CullingCallback callback, void* userData, MT_Vector4* planes, int nplanes, int occlusionRes, const int *viewport, double modelview[16], double projection[16]);
|
virtual bool CullingTest(PHY_CullingCallback callback, void* userData, MT_Vector4* planes, int nplanes, int occlusionRes, const int *viewport, float modelview[16], float projection[16]);
|
||||||
|
|
||||||
|
|
||||||
//Methods for gamelogic collision/physics callbacks
|
//Methods for gamelogic collision/physics callbacks
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual PHY_IPhysicsController* RayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
|
virtual PHY_IPhysicsController* RayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
|
||||||
virtual bool CullingTest(PHY_CullingCallback callback, void* userData, class MT_Vector4* planes, int nplanes, int occlusionRes, const int *viewport, double modelview[16], double projection[16]) { return false; }
|
virtual bool CullingTest(PHY_CullingCallback callback, void* userData, class MT_Vector4* planes, int nplanes, int occlusionRes, const int *viewport, float modelview[16], float projection[16]) { return false; }
|
||||||
|
|
||||||
|
|
||||||
//gamelogic callbacks
|
//gamelogic callbacks
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ class PHY_IPhysicsEnvironment
|
|||||||
//culling based on physical broad phase
|
//culling based on physical broad phase
|
||||||
// the plane number must be set as follow: near, far, left, right, top, botton
|
// the plane number must be set as follow: near, far, left, right, top, botton
|
||||||
// the near plane must be the first one and must always be present, it is used to get the direction of the view
|
// the near plane must be the first one and must always be present, it is used to get the direction of the view
|
||||||
virtual bool CullingTest(PHY_CullingCallback callback, void *userData, MT_Vector4* planeNormals, int planeNumber, int occlusionRes, const int *viewport, double modelview[16], double projection[16]) = 0;
|
virtual bool CullingTest(PHY_CullingCallback callback, void *userData, MT_Vector4* planeNormals, int planeNumber, int occlusionRes, const int *viewport, float modelview[16], float projection[16]) = 0;
|
||||||
|
|
||||||
//Methods for gamelogic collision/physics callbacks
|
//Methods for gamelogic collision/physics callbacks
|
||||||
//todo:
|
//todo:
|
||||||
|
|||||||
@@ -422,7 +422,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Render Tools
|
* Render Tools
|
||||||
*/
|
*/
|
||||||
virtual void applyTransform(double *oglmatrix, int drawingmode) = 0;
|
virtual void applyTransform(float *oglmatrix, int drawingmode) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders 2D boxes.
|
* Renders 2D boxes.
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ public:
|
|||||||
void* m_clientObj;
|
void* m_clientObj;
|
||||||
RAS_Deformer* m_pDeformer;
|
RAS_Deformer* m_pDeformer;
|
||||||
DerivedMesh* m_pDerivedMesh;
|
DerivedMesh* m_pDerivedMesh;
|
||||||
double* m_OpenGLMatrix;
|
float* m_OpenGLMatrix;
|
||||||
// visibility
|
// visibility
|
||||||
bool m_bVisible;
|
bool m_bVisible;
|
||||||
bool m_bCulled;
|
bool m_bCulled;
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ void RAS_OpenGLLight::Update()
|
|||||||
// lights don't get their openGL matrix updated, do it now
|
// lights don't get their openGL matrix updated, do it now
|
||||||
if (kxlight->GetSGNode()->IsDirty())
|
if (kxlight->GetSGNode()->IsDirty())
|
||||||
kxlight->GetOpenGLMatrix();
|
kxlight->GetOpenGLMatrix();
|
||||||
double *dobmat = kxlight->GetOpenGLMatrixPtr()->getPointer();
|
float *dobmat = kxlight->GetOpenGLMatrixPtr()->getPointer();
|
||||||
|
|
||||||
for (int i=0; i<4; i++)
|
for (int i=0; i<4; i++)
|
||||||
for (int j=0; j<4; j++, dobmat++)
|
for (int j=0; j<4; j++, dobmat++)
|
||||||
|
|||||||
@@ -371,8 +371,8 @@ void RAS_OpenGLRasterizer::FlushDebugShapes(SCA_IScene *scene)
|
|||||||
glColor4f(debugShapes[i].m_color[0], debugShapes[i].m_color[1], debugShapes[i].m_color[2], 1.0f);
|
glColor4f(debugShapes[i].m_color[0], debugShapes[i].m_color[1], debugShapes[i].m_color[2], 1.0f);
|
||||||
const MT_Scalar *fromPtr = &debugShapes[i].m_pos.x();
|
const MT_Scalar *fromPtr = &debugShapes[i].m_pos.x();
|
||||||
const MT_Scalar *toPtr= &debugShapes[i].m_param.x();
|
const MT_Scalar *toPtr= &debugShapes[i].m_param.x();
|
||||||
glVertex3dv(fromPtr);
|
glVertex3fv(fromPtr);
|
||||||
glVertex3dv(toPtr);
|
glVertex3fv(toPtr);
|
||||||
}
|
}
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|
||||||
@@ -408,7 +408,7 @@ void RAS_OpenGLRasterizer::FlushDebugShapes(SCA_IScene *scene)
|
|||||||
pos = pos*tr;
|
pos = pos*tr;
|
||||||
pos += debugShapes[i].m_pos;
|
pos += debugShapes[i].m_pos;
|
||||||
const MT_Scalar* posPtr = &pos.x();
|
const MT_Scalar* posPtr = &pos.x();
|
||||||
glVertex3dv(posPtr);
|
glVertex3fv(posPtr);
|
||||||
}
|
}
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
@@ -823,8 +823,8 @@ void RAS_OpenGLRasterizer::DrawDerivedMesh(class RAS_MeshSlot &ms)
|
|||||||
void RAS_OpenGLRasterizer::SetProjectionMatrix(MT_CmMatrix4x4 &mat)
|
void RAS_OpenGLRasterizer::SetProjectionMatrix(MT_CmMatrix4x4 &mat)
|
||||||
{
|
{
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
double* matrix = &mat(0, 0);
|
float* matrix = &mat(0, 0);
|
||||||
glLoadMatrixd(matrix);
|
glLoadMatrixf(matrix);
|
||||||
|
|
||||||
m_camortho = (mat(3, 3) != 0.0);
|
m_camortho = (mat(3, 3) != 0.0);
|
||||||
}
|
}
|
||||||
@@ -832,11 +832,11 @@ void RAS_OpenGLRasterizer::SetProjectionMatrix(MT_CmMatrix4x4 &mat)
|
|||||||
void RAS_OpenGLRasterizer::SetProjectionMatrix(const MT_Matrix4x4 & mat)
|
void RAS_OpenGLRasterizer::SetProjectionMatrix(const MT_Matrix4x4 & mat)
|
||||||
{
|
{
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
double matrix[16];
|
float matrix[16];
|
||||||
/* Get into argument. Looks a bit dodgy, but it's ok. */
|
/* Get into argument. Looks a bit dodgy, but it's ok. */
|
||||||
mat.getValue(matrix);
|
mat.getValue(matrix);
|
||||||
/* Internally, MT_Matrix4x4 uses doubles (MT_Scalar). */
|
/* Internally, MT_Matrix4x4 uses doubles (MT_Scalar). */
|
||||||
glLoadMatrixd(matrix);
|
glLoadMatrixf(matrix);
|
||||||
|
|
||||||
m_camortho= (mat[3][3] != 0.0);
|
m_camortho= (mat[3][3] != 0.0);
|
||||||
}
|
}
|
||||||
@@ -852,7 +852,7 @@ MT_Matrix4x4 RAS_OpenGLRasterizer::GetFrustumMatrix(
|
|||||||
bool
|
bool
|
||||||
) {
|
) {
|
||||||
MT_Matrix4x4 result;
|
MT_Matrix4x4 result;
|
||||||
double mat[16];
|
float mat[16];
|
||||||
|
|
||||||
// correction for stereo
|
// correction for stereo
|
||||||
if (Stereo())
|
if (Stereo())
|
||||||
@@ -891,7 +891,7 @@ MT_Matrix4x4 RAS_OpenGLRasterizer::GetFrustumMatrix(
|
|||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glFrustum(left, right, bottom, top, frustnear, frustfar);
|
glFrustum(left, right, bottom, top, frustnear, frustfar);
|
||||||
|
|
||||||
glGetDoublev(GL_PROJECTION_MATRIX, mat);
|
glGetFloatv(GL_PROJECTION_MATRIX, mat);
|
||||||
result.setValue(mat);
|
result.setValue(mat);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -906,14 +906,14 @@ MT_Matrix4x4 RAS_OpenGLRasterizer::GetOrthoMatrix(
|
|||||||
float frustfar
|
float frustfar
|
||||||
) {
|
) {
|
||||||
MT_Matrix4x4 result;
|
MT_Matrix4x4 result;
|
||||||
double mat[16];
|
float mat[16];
|
||||||
|
|
||||||
// stereo is meaning less for orthographic, disable it
|
// stereo is meaning less for orthographic, disable it
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glOrtho(left, right, bottom, top, frustnear, frustfar);
|
glOrtho(left, right, bottom, top, frustnear, frustfar);
|
||||||
|
|
||||||
glGetDoublev(GL_PROJECTION_MATRIX, mat);
|
glGetFloatv(GL_PROJECTION_MATRIX, mat);
|
||||||
result.setValue(mat);
|
result.setValue(mat);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -974,7 +974,7 @@ void RAS_OpenGLRasterizer::SetViewMatrix(const MT_Matrix4x4 &mat,
|
|||||||
m_viewmatrix.getValue(glviewmat);
|
m_viewmatrix.getValue(glviewmat);
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glLoadMatrixd(glviewmat);
|
glLoadMatrixf(glviewmat);
|
||||||
m_campos = pos;
|
m_campos = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1287,7 +1287,7 @@ void RAS_OpenGLRasterizer::RemoveLight(RAS_ILightObject* lightobject)
|
|||||||
m_lights.erase(lit);
|
m_lights.erase(lit);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RAS_OpenGLRasterizer::RayHit(struct KX_ClientObjectInfo *client, KX_RayCast *result, double *oglmatrix)
|
bool RAS_OpenGLRasterizer::RayHit(struct KX_ClientObjectInfo *client, KX_RayCast *result, float *oglmatrix)
|
||||||
{
|
{
|
||||||
if (result->m_hitMesh) {
|
if (result->m_hitMesh) {
|
||||||
|
|
||||||
@@ -1301,14 +1301,14 @@ bool RAS_OpenGLRasterizer::RayHit(struct KX_ClientObjectInfo *client, KX_RayCast
|
|||||||
left = (dir.cross(resultnormal)).safe_normalized();
|
left = (dir.cross(resultnormal)).safe_normalized();
|
||||||
// for the up vector, we take the 'resultnormal' returned by the physics
|
// for the up vector, we take the 'resultnormal' returned by the physics
|
||||||
|
|
||||||
double maat[16] = {left[0], left[1], left[2], 0,
|
float maat[16] = {left[0], left[1], left[2], 0,
|
||||||
dir[0], dir[1], dir[2], 0,
|
dir[0], dir[1], dir[2], 0,
|
||||||
resultnormal[0], resultnormal[1], resultnormal[2], 0,
|
resultnormal[0], resultnormal[1], resultnormal[2], 0,
|
||||||
0, 0, 0, 1};
|
0, 0, 0, 1};
|
||||||
|
|
||||||
glTranslated(oglmatrix[12],oglmatrix[13],oglmatrix[14]);
|
glTranslatef(oglmatrix[12],oglmatrix[13],oglmatrix[14]);
|
||||||
//glMultMatrixd(oglmatrix);
|
//glMultMatrixd(oglmatrix);
|
||||||
glMultMatrixd(maat);
|
glMultMatrixf(maat);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1316,7 +1316,7 @@ bool RAS_OpenGLRasterizer::RayHit(struct KX_ClientObjectInfo *client, KX_RayCast
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RAS_OpenGLRasterizer::applyTransform(double* oglmatrix,int objectdrawmode )
|
void RAS_OpenGLRasterizer::applyTransform(float* oglmatrix,int objectdrawmode )
|
||||||
{
|
{
|
||||||
/* FIXME:
|
/* FIXME:
|
||||||
blender: intern/moto/include/MT_Vector3.inl:42: MT_Vector3 operator/(const
|
blender: intern/moto/include/MT_Vector3.inl:42: MT_Vector3 operator/(const
|
||||||
@@ -1369,13 +1369,13 @@ void RAS_OpenGLRasterizer::applyTransform(double* oglmatrix,int objectdrawmode )
|
|||||||
dir *= size[1];
|
dir *= size[1];
|
||||||
up *= size[2];
|
up *= size[2];
|
||||||
|
|
||||||
double maat[16] = {left[0], left[1], left[2], 0,
|
float maat[16] = {left[0], left[1], left[2], 0,
|
||||||
dir[0], dir[1], dir[2], 0,
|
dir[0], dir[1], dir[2], 0,
|
||||||
up[0], up[1], up[2], 0,
|
up[0], up[1], up[2], 0,
|
||||||
0, 0, 0, 1};
|
0, 0, 0, 1};
|
||||||
|
|
||||||
glTranslatef(objpos[0],objpos[1],objpos[2]);
|
glTranslatef(objpos[0],objpos[1],objpos[2]);
|
||||||
glMultMatrixd(maat);
|
glMultMatrixf(maat);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1399,11 +1399,11 @@ void RAS_OpenGLRasterizer::applyTransform(double* oglmatrix,int objectdrawmode )
|
|||||||
if (!physics_controller && parent)
|
if (!physics_controller && parent)
|
||||||
physics_controller = parent->GetPhysicsController();
|
physics_controller = parent->GetPhysicsController();
|
||||||
|
|
||||||
KX_RayCast::Callback<RAS_OpenGLRasterizer, double> callback(this, physics_controller, oglmatrix);
|
KX_RayCast::Callback<RAS_OpenGLRasterizer, float> callback(this, physics_controller, oglmatrix);
|
||||||
if (!KX_RayCast::RayTest(physics_environment, frompoint, topoint, callback))
|
if (!KX_RayCast::RayTest(physics_environment, frompoint, topoint, callback))
|
||||||
{
|
{
|
||||||
// couldn't find something to cast the shadow on...
|
// couldn't find something to cast the shadow on...
|
||||||
glMultMatrixd(oglmatrix);
|
glMultMatrixf(oglmatrix);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // we found the "ground", but the cast matrix doesn't take
|
{ // we found the "ground", but the cast matrix doesn't take
|
||||||
@@ -1415,7 +1415,7 @@ void RAS_OpenGLRasterizer::applyTransform(double* oglmatrix,int objectdrawmode )
|
|||||||
{
|
{
|
||||||
|
|
||||||
// 'normal' object
|
// 'normal' object
|
||||||
glMultMatrixd(oglmatrix);
|
glMultMatrixf(oglmatrix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -301,13 +301,13 @@ public:
|
|||||||
void RenderText2D(RAS_TEXT_RENDER_MODE mode, const char *text,
|
void RenderText2D(RAS_TEXT_RENDER_MODE mode, const char *text,
|
||||||
int xco, int yco, int width, int height);
|
int xco, int yco, int width, int height);
|
||||||
|
|
||||||
void applyTransform(double *oglmatrix, int objectdrawmode);
|
void applyTransform(float *oglmatrix, int objectdrawmode);
|
||||||
|
|
||||||
void PushMatrix();
|
void PushMatrix();
|
||||||
void PopMatrix();
|
void PopMatrix();
|
||||||
|
|
||||||
/// \see KX_RayCast
|
/// \see KX_RayCast
|
||||||
bool RayHit(struct KX_ClientObjectInfo *client, class KX_RayCast *result, double *oglmatrix);
|
bool RayHit(struct KX_ClientObjectInfo *client, class KX_RayCast *result, float *oglmatrix);
|
||||||
/// \see KX_RayCast
|
/// \see KX_RayCast
|
||||||
bool NeedRayCast(struct KX_ClientObjectInfo *, void *UNUSED(data)) { return true; }
|
bool NeedRayCast(struct KX_ClientObjectInfo *, void *UNUSED(data)) { return true; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user