- property sensor was converting floating point values to text then back to float - for floating point properties.

- IntValue's GetNumber() was convert int -> float -> double.
- BL_Shader was using STR_String rather then char*, where most callers had a char*, use a char* to avoid STR_String conversion-and-alloc on shader access.
This commit is contained in:
Campbell Barton
2012-11-10 22:32:15 +00:00
parent 1ca4670267
commit 67b74f96da
4 changed files with 43 additions and 37 deletions

View File

@@ -286,7 +286,7 @@ cInt CIntValue::GetInt()
double CIntValue::GetNumber() double CIntValue::GetNumber()
{ {
return (float) m_int; return (double) m_int;
} }

View File

@@ -126,7 +126,6 @@ bool SCA_PropertySensor::Evaluate()
bool SCA_PropertySensor::CheckPropertyCondition() bool SCA_PropertySensor::CheckPropertyCondition()
{ {
m_recentresult=false; m_recentresult=false;
bool result=false; bool result=false;
bool reverse = false; bool reverse = false;
@@ -174,7 +173,7 @@ bool SCA_PropertySensor::CheckPropertyCondition()
case KX_PROPSENSOR_EXPRESSION: case KX_PROPSENSOR_EXPRESSION:
{ {
/* #if 0
if (m_rightexpr) if (m_rightexpr)
{ {
CValue* resultval = m_rightexpr->Calculate(); CValue* resultval = m_rightexpr->Calculate();
@@ -189,7 +188,7 @@ bool SCA_PropertySensor::CheckPropertyCondition()
result = resultval->GetNumber() != 0; result = resultval->GetNumber() != 0;
} }
} }
*/ #endif
break; break;
} }
case KX_PROPSENSOR_INTERVAL: case KX_PROPSENSOR_INTERVAL:
@@ -197,7 +196,16 @@ bool SCA_PropertySensor::CheckPropertyCondition()
CValue* orgprop = GetParent()->FindIdentifier(m_checkpropname); CValue* orgprop = GetParent()->FindIdentifier(m_checkpropname);
if (!orgprop->IsError()) if (!orgprop->IsError())
{ {
float val = orgprop->GetText().ToFloat(), min = m_checkpropval.ToFloat(), max = m_checkpropmaxval.ToFloat(); const float min = m_checkpropval.ToFloat();
const float max = m_checkpropmaxval.ToFloat();
float val;
if (dynamic_cast<CStringValue *>(orgprop) == NULL) {
val = orgprop->GetNumber();
}
else {
val = orgprop->GetText().ToFloat();
}
result = (min <= val) && (val <= max); result = (min <= val) && (val <= max);
} }

View File

@@ -571,31 +571,29 @@ void BL_Shader::Update( const RAS_MeshSlot & ms, RAS_IRasterizer* rasty )
} }
int BL_Shader::GetAttribLocation(const STR_String& name) int BL_Shader::GetAttribLocation(const char *name)
{ {
if (GLEW_ARB_fragment_shader && if (GLEW_ARB_fragment_shader &&
GLEW_ARB_vertex_shader && GLEW_ARB_vertex_shader &&
GLEW_ARB_shader_objects GLEW_ARB_shader_objects)
)
{ {
return glGetAttribLocationARB(mShader, name.ReadPtr()); return glGetAttribLocationARB(mShader, name);
} }
return -1; return -1;
} }
void BL_Shader::BindAttribute(const STR_String& attr, int loc) void BL_Shader::BindAttribute(const char *attr, int loc)
{ {
if (GLEW_ARB_fragment_shader && if (GLEW_ARB_fragment_shader &&
GLEW_ARB_vertex_shader && GLEW_ARB_vertex_shader &&
GLEW_ARB_shader_objects GLEW_ARB_shader_objects )
)
{ {
glBindAttribLocationARB(mShader, loc, attr.ReadPtr()); glBindAttribLocationARB(mShader, loc, attr);
} }
} }
int BL_Shader::GetUniformLocation(const STR_String& name) int BL_Shader::GetUniformLocation(const char *name)
{ {
if ( GLEW_ARB_fragment_shader && if ( GLEW_ARB_fragment_shader &&
GLEW_ARB_vertex_shader && GLEW_ARB_vertex_shader &&
@@ -603,9 +601,9 @@ int BL_Shader::GetUniformLocation(const STR_String& name)
) )
{ {
MT_assert(mShader!=0); MT_assert(mShader!=0);
int location = glGetUniformLocationARB(mShader, name.ReadPtr()); int location = glGetUniformLocationARB(mShader, name);
if (location == -1) if (location == -1)
spit("Invalid uniform value: " << name.ReadPtr() << "."); spit("Invalid uniform value: " << name << ".");
return location; return location;
} }
@@ -900,7 +898,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSampler, "setSampler(name, index)" )
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
int index=-1; int index=-1;
if (PyArg_ParseTuple(args, "si:setSampler", &uniform, &index)) if (PyArg_ParseTuple(args, "si:setSampler", &uniform, &index))
{ {
@@ -941,7 +939,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1f, "setUniform1f(name, fx)" )
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
float value=0; float value=0;
if (PyArg_ParseTuple(args, "sf:setUniform1f", &uniform, &value )) if (PyArg_ParseTuple(args, "sf:setUniform1f", &uniform, &value ))
{ {
@@ -965,7 +963,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2f, "setUniform2f(name, fx, fy)")
if (mError) { if (mError) {
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
float array[2] = {0, 0}; float array[2] = {0, 0};
if (PyArg_ParseTuple(args, "sff:setUniform2f", &uniform, &array[0],&array[1] )) if (PyArg_ParseTuple(args, "sff:setUniform2f", &uniform, &array[0],&array[1] ))
{ {
@@ -989,7 +987,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3f, "setUniform3f(name, fx,fy,fz) ")
if (mError) { if (mError) {
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
float array[3] = {0, 0, 0}; float array[3] = {0, 0, 0};
if (PyArg_ParseTuple(args, "sfff:setUniform3f", &uniform, &array[0],&array[1],&array[2])) if (PyArg_ParseTuple(args, "sfff:setUniform3f", &uniform, &array[0],&array[1],&array[2]))
{ {
@@ -1014,7 +1012,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4f, "setUniform4f(name, fx,fy,fz, fw) "
if (mError) { if (mError) {
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
float array[4] = {0, 0, 0, 0}; float array[4] = {0, 0, 0, 0};
if (PyArg_ParseTuple(args, "sffff:setUniform4f", &uniform, &array[0],&array[1],&array[2], &array[3])) if (PyArg_ParseTuple(args, "sffff:setUniform4f", &uniform, &array[0],&array[1],&array[2], &array[3]))
{ {
@@ -1038,7 +1036,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" )
if (mError) { if (mError) {
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
int value=0; int value=0;
if (PyArg_ParseTuple(args, "si:setUniform1i", &uniform, &value )) if (PyArg_ParseTuple(args, "si:setUniform1i", &uniform, &value ))
{ {
@@ -1062,7 +1060,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2i, "setUniform2i(name, ix, iy)")
if (mError) { if (mError) {
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
int array[2] = {0, 0}; int array[2] = {0, 0};
if (PyArg_ParseTuple(args, "sii:setUniform2i", &uniform, &array[0],&array[1] )) if (PyArg_ParseTuple(args, "sii:setUniform2i", &uniform, &array[0],&array[1] ))
{ {
@@ -1087,7 +1085,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3i, "setUniform3i(name, ix,iy,iz) ")
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
int array[3] = {0, 0, 0}; int array[3] = {0, 0, 0};
if (PyArg_ParseTuple(args, "siii:setUniform3i", &uniform, &array[0],&array[1],&array[2])) if (PyArg_ParseTuple(args, "siii:setUniform3i", &uniform, &array[0],&array[1],&array[2]))
{ {
@@ -1110,7 +1108,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4i, "setUniform4i(name, ix,iy,iz, iw) "
if (mError) { if (mError) {
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
int array[4] = {0, 0, 0, 0}; int array[4] = {0, 0, 0, 0};
if (PyArg_ParseTuple(args, "siiii:setUniform4i", &uniform, &array[0],&array[1],&array[2], &array[3] )) if (PyArg_ParseTuple(args, "siiii:setUniform4i", &uniform, &array[0],&array[1],&array[2], &array[3] ))
{ {
@@ -1296,7 +1294,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4,
0,0,0,1 0,0,0,1
}; };
const char *uniform=""; const char *uniform;
PyObject *matrix=0; PyObject *matrix=0;
int transp=0; // python use column major by default, so no transpose.... int transp=0; // python use column major by default, so no transpose....
@@ -1342,7 +1340,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3,
0,0,1, 0,0,1,
}; };
const char *uniform=""; const char *uniform;
PyObject *matrix=0; PyObject *matrix=0;
int transp=0; // python use column major by default, so no transpose.... int transp=0; // python use column major by default, so no transpose....
if (!PyArg_ParseTuple(args, "sO|i:setUniformMatrix3",&uniform, &matrix,&transp)) if (!PyArg_ParseTuple(args, "sO|i:setUniformMatrix3",&uniform, &matrix,&transp))
@@ -1404,7 +1402,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformDef, "setUniformDef(name, enum)" )
Py_RETURN_NONE; Py_RETURN_NONE;
} }
const char *uniform=""; const char *uniform;
int nloc=0; int nloc=0;
if (PyArg_ParseTuple(args, "si:setUniformDef", &uniform, &nloc)) if (PyArg_ParseTuple(args, "si:setUniformDef", &uniform, &nloc))
{ {

View File

@@ -205,9 +205,9 @@ public:
void SetUniformfv(int location,int type, float *param, int size,bool transpose=false); void SetUniformfv(int location,int type, float *param, int size,bool transpose=false);
void SetUniformiv(int location,int type, int *param, int size,bool transpose=false); void SetUniformiv(int location,int type, int *param, int size,bool transpose=false);
int GetAttribLocation(const STR_String& name); int GetAttribLocation(const char *name);
void BindAttribute(const STR_String& attr, int loc); void BindAttribute(const char *attr, int loc);
int GetUniformLocation(const STR_String& name); int GetUniformLocation(const char *name);
void SetUniform(int uniform, const MT_Tuple2& vec); void SetUniform(int uniform, const MT_Tuple2& vec);
void SetUniform(int uniform, const MT_Tuple3& vec); void SetUniform(int uniform, const MT_Tuple3& vec);