void ShaderUniform::SetArray1(MemoryIntData data) { MEDUSA_ASSERT(mDataType == GraphicsUniformDataType::Int || mDataType == GraphicsUniformDataType::Bool, "ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&mIntData.IsContentEqual(data)); #endif Render::Instance().SetUniformArray1(mLocation, (uint)data.Size(), data.Data()); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mIntData = data; #endif }
void ShaderConstant::SetArray4( uint count,const float* data ) { MEDUSA_ASSERT(mDataType==GraphicsUniformDataType::FloatVec4,"ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&mFloatDataCount==count&&mFloatData==data); #endif Render::Instance().SetUniformArray4(mLocation,count,data); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mFloatDataCount=count; mFloatData=data; #endif }
void ShaderConstant::Set( const Point2F& pos ) { MEDUSA_ASSERT(mDataType==GraphicsUniformDataType::FloatVec2,"ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&Math::IsEqual(mFloatArray[0],pos.X)&&Math::IsEqual(mFloatArray[1],pos.Y)); #endif Render::Instance().SetUniform(mLocation,pos.X,pos.Y); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mFloatArray[0]=pos.X; mFloatArray[1]=pos.Y; #endif }
void ShaderConstant::Set( float x ) { MEDUSA_ASSERT(mDataType==GraphicsUniformDataType::Float,"ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&Math::IsEqual(mFloatArray[0],x)); #endif Render::Instance().SetUniform(mLocation,x); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mFloatArray[0]=x; #endif }
void ShaderUniform::SetMatrix2(MemoryFloatData data, bool isTransposed/*=false*/) { MEDUSA_ASSERT(mDataType == GraphicsUniformDataType::FloatMat2, "ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&mFloatData.IsContentEqual(data)&&mIsTransposed==isTransposed); #endif Render::Instance().SetUniformMatrix2(mLocation, (uint)data.Size() / sizeof(Matrix2), data.Data(), isTransposed); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mFloatData = data; mIsTransposed = isTransposed; #endif }
void ShaderConstant::Set( const Point3I& pos ) { MEDUSA_ASSERT(mDataType==GraphicsUniformDataType::IntVec3||mDataType==GraphicsUniformDataType::BoolVec3,"ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&mIntArray[0]==pos.X&&mIntArray[1]==pos.Y&&mIntArray[2]==pos.Z); #endif Render::Instance().SetUniform(mLocation,pos.X,pos.Y,pos.Z); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mIntArray[0]=pos.X; mIntArray[1]=pos.Y; mIntArray[2]=pos.Z; #endif }
void ShaderConstant::SetMatrix4( uint count,const float* data,bool isTransposed/*=false*/ ) { MEDUSA_ASSERT(mDataType==GraphicsUniformDataType::FloatMat4,"ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&mFloatDataCount==count&&mFloatData==data&&mIsTransposed==isTransposed); #endif Render::Instance().SetUniformMatrix4(mLocation,count,data,isTransposed); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mFloatDataCount=count; mFloatData=data; mIsTransposed=isTransposed; #endif }
void ShaderConstant::Set( const Color3F& color ) { MEDUSA_ASSERT(mDataType==GraphicsUniformDataType::FloatVec3,"ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&Math::IsEqual(mFloatArray[0],color.R)&&Math::IsEqual(mFloatArray[1],color.G)&&Math::IsEqual(mFloatArray[2],color.B)); #endif Render::Instance().SetUniform(mLocation,color.R,color.G,color.B); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mFloatArray[0]=color.R; mFloatArray[1]=color.G; mFloatArray[2]=color.B; #endif }
void ShaderConstant::Set( const Color4B& color ) { MEDUSA_ASSERT(mDataType==GraphicsUniformDataType::IntVec4||mDataType==GraphicsUniformDataType::BoolVec4,"ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&mIntArray[0]==(int)color.R&&mIntArray[1]==(int)color.G&&mIntArray[2]==(int)color.B&&mIntArray[3]==color.A); #endif Render::Instance().SetUniform(mLocation,color.R,color.G,color.B,color.A); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mIntArray[0]=color.R; mIntArray[1]=color.G; mIntArray[2]=color.B; mIntArray[3]=color.A; #endif }
void ShaderConstant::Set( int x ) { MEDUSA_ASSERT(mDataType==GraphicsUniformDataType::Bool ||mDataType==GraphicsUniformDataType::Int ||mDataType==GraphicsUniformDataType::Sampler2D ||mDataType==GraphicsUniformDataType::SamplerCube,"ErrorDataType"); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED RETURN_IF_TRUE(mIsAssigned&&mIntArray[0]==x); #endif Render::Instance().SetUniform(mLocation,x); MarkAssigned(); #ifdef MEDUSA_RENDER_STATE_CACHE_ENABLED mIntArray[0]=x; #endif }