Implement radians/degrees conversion functions

This commit is contained in:
baldurk
2020-04-15 15:11:52 +01:00
parent c3a5d99bc0
commit d76e944799
2 changed files with 39 additions and 0 deletions
@@ -167,6 +167,33 @@ ShaderVariable Fract(ThreadState &state, const rdcarray<Id> &params)
return var;
}
static const float piOver180 = 3.14159265358979323846f / 180.0f;
static const float piUnder180 = 180.0f / 3.14159265358979323846f;
ShaderVariable Radians(ThreadState &state, const rdcarray<Id> &params)
{
CHECK_PARAMS(1);
ShaderVariable var = state.GetSrc(params[0]);
for(uint32_t c = 0; c < var.columns; c++)
var.value.fv[c] = var.value.fv[c] * piOver180;
return var;
}
ShaderVariable Degrees(ThreadState &state, const rdcarray<Id> &params)
{
CHECK_PARAMS(1);
ShaderVariable var = state.GetSrc(params[0]);
for(uint32_t c = 0; c < var.columns; c++)
var.value.fv[c] = var.value.fv[c] * piUnder180;
return var;
}
ShaderVariable Pow(ThreadState &state, const rdcarray<Id> &params)
{
CHECK_PARAMS(2);
@@ -518,6 +545,8 @@ void ConfigureGLSLStd450(ExtInstDispatcher &extinst)
EXT(Floor);
EXT(Ceil);
EXT(Fract);
EXT(Radians);
EXT(Degrees);
EXT(Pow);
EXT(Determinant);
EXT(MatrixInverse);
@@ -571,6 +571,16 @@ void main()
Color = vec4(float(sign(onei*2)), float(sign(negi*2)), float(sign(0)), 1.0f);
break;
}
case 69:
{
Color = vec4(degrees(negone*2.4f), degrees(posone*2.4f), degrees(zerof), degrees(posone*34.56f));
break;
}
case 70:
{
Color = vec4(radians(negone*164.2f), radians(posone*164.2f), radians(zerof), radians(posone*3456.78f));
break;
}
default: break;
}
}