Beispiel #1
0
        private void SetParamAsVec4Debug(UniformBlock uniformBlock, MatlEnums.ParamId paramId)
        {
            // Convert parameters into colors for easier visualization.
            var name = "vec4Param";

            if (vec4ByParamId.ContainsKey(paramId))
            {
                var value = vec4ByParamId[paramId];
                uniformBlock.SetValue(name, value);
            }
            else if (boolByParamId.ContainsKey(paramId))
            {
                var value = boolByParamId[paramId];
                if (value)
                {
                    uniformBlock.SetValue(name, new Vector4(1, 0, 1, 0));
                }
                else
                {
                    uniformBlock.SetValue(name, new Vector4(0, 0, 1, 0));
                }
            }
            else if (floatByParamId.ContainsKey(paramId))
            {
                var value = floatByParamId[paramId];
                uniformBlock.SetValue(name, new Vector4(value, value, value, 0));
            }
            else
            {
                uniformBlock.SetValue(name, Vector4.Zero);
            }
        }
Beispiel #2
0
        private void SetFloat(UniformBlock uniformBlock, MatlEnums.ParamId paramId, float defaultValue)
        {
            var name = paramId.ToString();

            if (floatByParamId.ContainsKey(paramId))
            {
                var value = floatByParamId[paramId];
                uniformBlock.SetValue(name, value);
            }
            else
            {
                uniformBlock.SetValue(name, defaultValue);
            }
        }
Beispiel #3
0
        private void SetBool(UniformBlock uniformBlock, MatlEnums.ParamId paramId, bool defaultValue)
        {
            var name = paramId.ToString();

            if (boolByParamId.ContainsKey(paramId))
            {
                var value = boolByParamId[paramId];
                uniformBlock.SetValue(name, value ? 1 : 0);
            }
            else
            {
                uniformBlock.SetValue(name, defaultValue ? 1 : 0);
            }
        }
Beispiel #4
0
        private void AddFloat(UniformBlock genericMaterial, MatlEnums.ParamId paramId, float defaultValue)
        {
            var name = paramId.ToString();

            if (floatByParamId.ContainsKey(paramId))
            {
                var value = floatByParamId[paramId];
                genericMaterial.SetValue(name, value);
            }
            else
            {
                genericMaterial.SetValue(name, defaultValue);
            }
        }
Beispiel #5
0
        private void AddBool(UniformBlock genericMaterial, MatlEnums.ParamId paramId, bool defaultValue)
        {
            var name = paramId.ToString();

            if (boolByParamId.ContainsKey(paramId))
            {
                var value = boolByParamId[paramId];
                genericMaterial.SetValue(name, value ? 1 : 0);
            }
            else
            {
                genericMaterial.SetValue(name, defaultValue ? 1 : 0);
            }
        }
Beispiel #6
0
        private void AddFloat(UniformBlock genericMaterial, long paramId, float defaultValue)
        {
            var name = $"param{paramId.ToString("X")}";

            if (floatByParamId.ContainsKey(paramId))
            {
                var value = floatByParamId[paramId];
                genericMaterial.SetValue(name, value);
            }
            else
            {
                genericMaterial.SetValue(name, defaultValue);
            }
        }
Beispiel #7
0
        private void AddBool(UniformBlock genericMaterial, long paramId, bool defaultValue)
        {
            var name = $"param{paramId.ToString("X")}";

            if (boolByParamId.ContainsKey(paramId))
            {
                var value = boolByParamId[paramId];
                genericMaterial.SetValue(name, value ? 1 : 0);
            }
            else
            {
                genericMaterial.SetValue(name, defaultValue ? 1 : 0);
            }
        }
Beispiel #8
0
        private static void MatPropertyShaderUniform(UniformBlock uniformBlock, Nud.Material mat, string propertyName,
                                                     Vector4 defaultValue)
        {
            // Attempt to get the values from the material.
            var newValues = GetValues(mat, propertyName, defaultValue);

            string uniformName = propertyName.Replace("NU_", "");

            uniformBlock.SetValue(uniformName, new Vector4(newValues[0], newValues[1], newValues[2], newValues[3]));
        }
Beispiel #9
0
        private void SetVec4(UniformBlock uniformBlock, MatlEnums.ParamId paramId, Vector4 defaultValue, bool isDebug = false)
        {
            // Convert parameters into colors for easier visualization.
            var name = paramId.ToString();

            if (isDebug)
            {
                name = "vec4Param";
            }

            if (Vec4ParamsMaterialAnimation.ContainsKey(paramId))
            {
                var value = Vec4ParamsMaterialAnimation[paramId];
                uniformBlock.SetValue(name, value);
            }
            else if (vec4ByParamId.ContainsKey(paramId))
            {
                var value = vec4ByParamId[paramId];
                uniformBlock.SetValue(name, value);
            }
            else if (boolByParamId.ContainsKey(paramId))
            {
                var value = boolByParamId[paramId];
                if (value)
                {
                    uniformBlock.SetValue(name, new Vector4(1, 0, 1, 0));
                }
                else
                {
                    uniformBlock.SetValue(name, new Vector4(0, 0, 1, 0));
                }
            }
            else if (floatByParamId.ContainsKey(paramId))
            {
                var value = floatByParamId[paramId];
                uniformBlock.SetValue(name, new Vector4(value, value, value, 0));
            }
            else
            {
                uniformBlock.SetValue(name, defaultValue);
            }
        }
Beispiel #10
0
        private void SetMaterialParams(UniformBlock uniformBlock)
        {
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector0, Vector4.Zero);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector3, Vector4.One);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector6, new Vector4(1, 1, 0, 0));
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector8, Vector4.One);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector11, Vector4.Zero);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector13, Vector4.One);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector14, Vector4.One);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector18, Vector4.One);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector30, Vector4.Zero);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector31, new Vector4(1, 1, 0, 0));
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector32, new Vector4(1, 1, 0, 0));
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector44, Vector4.Zero);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector45, Vector4.Zero);
            SetVec4(uniformBlock, MatlEnums.ParamId.CustomVector47, Vector4.Zero);

            SetBool(uniformBlock, MatlEnums.ParamId.CustomBoolean1, false);
            SetBool(uniformBlock, MatlEnums.ParamId.CustomBoolean2, true);
            SetBool(uniformBlock, MatlEnums.ParamId.CustomBoolean3, true);
            SetBool(uniformBlock, MatlEnums.ParamId.CustomBoolean4, true);
            SetBool(uniformBlock, MatlEnums.ParamId.CustomBoolean5, false);
            SetBool(uniformBlock, MatlEnums.ParamId.CustomBoolean6, false);
            SetBool(uniformBlock, MatlEnums.ParamId.CustomBoolean9, false);
            SetBool(uniformBlock, MatlEnums.ParamId.CustomBoolean11, true);

            SetFloat(uniformBlock, MatlEnums.ParamId.CustomFloat1, 0.0f);
            SetFloat(uniformBlock, MatlEnums.ParamId.CustomFloat4, 0.0f);
            SetFloat(uniformBlock, MatlEnums.ParamId.CustomFloat8, 0.0f);
            SetFloat(uniformBlock, MatlEnums.ParamId.CustomFloat10, 0.0f);
            SetFloat(uniformBlock, MatlEnums.ParamId.CustomFloat19, 0.0f);

            uniformBlock.SetValue("hasCustomVector11", vec4ByParamId.ContainsKey(MatlEnums.ParamId.CustomVector11));
            uniformBlock.SetValue("hasCustomVector44", vec4ByParamId.ContainsKey(MatlEnums.ParamId.CustomVector44));
            uniformBlock.SetValue("hasCustomVector47", vec4ByParamId.ContainsKey(MatlEnums.ParamId.CustomVector47));
            uniformBlock.SetValue("hasCustomFloat10", floatByParamId.ContainsKey(MatlEnums.ParamId.CustomFloat10));
            uniformBlock.SetValue("hasCustomBoolean1", boolByParamId.ContainsKey(MatlEnums.ParamId.CustomBoolean1));

            uniformBlock.SetValue("hasColMap", HasCol);
            uniformBlock.SetValue("hasCol2Map", HasCol2);
            uniformBlock.SetValue("hasInkNorMap", HasInkNorMap);
            uniformBlock.SetValue("hasDifCubeMap", HasDifCube);
            uniformBlock.SetValue("hasDiffuse", HasDiffuse);
            uniformBlock.SetValue("hasDiffuse2", HasDiffuse2);
            uniformBlock.SetValue("hasDiffuse3", HasDiffuse3);

            // HACK: There's probably a better way to handle blending emission and base color maps.
            var hasDiffuseMaps = HasCol || HasCol2 || HasDiffuse || HasDiffuse2 || HasDiffuse3;
            var hasEmiMaps     = HasEmi || HasEmi2;

            uniformBlock.SetValue("emissionOverride", hasEmiMaps && !hasDiffuseMaps);
        }
Beispiel #11
0
        private void SetMaterialParams(UniformBlock uniformBlock)
        {
            SetVectors(uniformBlock);
            SetBooleans(uniformBlock);
            SetFloats(uniformBlock);

            uniformBlock.SetValue("hasCustomVector11", vec4ByParamId.ContainsKey(MatlEnums.ParamId.CustomVector11));
            uniformBlock.SetValue("hasCustomVector44", vec4ByParamId.ContainsKey(MatlEnums.ParamId.CustomVector44));
            uniformBlock.SetValue("hasCustomVector47", vec4ByParamId.ContainsKey(MatlEnums.ParamId.CustomVector47));
            uniformBlock.SetValue("hasCustomFloat10", floatByParamId.ContainsKey(MatlEnums.ParamId.CustomFloat10));
            uniformBlock.SetValue("hasCustomFloat19", floatByParamId.ContainsKey(MatlEnums.ParamId.CustomFloat19));
            uniformBlock.SetValue("hasCustomBoolean1", boolByParamId.ContainsKey(MatlEnums.ParamId.CustomBoolean1));

            uniformBlock.SetValue("hasColMap", HasCol);
            uniformBlock.SetValue("hasCol2Map", HasCol2);
            uniformBlock.SetValue("hasInkNorMap", HasInkNorMap);
            uniformBlock.SetValue("hasDifCubeMap", HasDifCube);
            uniformBlock.SetValue("hasDiffuse", HasDiffuse);
            uniformBlock.SetValue("hasDiffuse2", HasDiffuse2);
            uniformBlock.SetValue("hasDiffuse3", HasDiffuse3);

            // Validate shaders, materials, and attributes.
            uniformBlock.SetValue("isValidShaderLabel", IsValidShaderLabel);
            uniformBlock.SetValue("hasColorSet1", HasColorSet1);
            uniformBlock.SetValue("hasColorSet2", HasColorSet2);
            uniformBlock.SetValue("hasColorSet3", HasColorSet3);
            uniformBlock.SetValue("hasColorSet4", HasColorSet4);
            uniformBlock.SetValue("hasColorSet5", HasColorSet5);
            uniformBlock.SetValue("hasColorSet6", HasColorSet6);
            uniformBlock.SetValue("hasColorSet7", HasColorSet7);

            // HACK: There's probably a better way to handle blending emission and base color maps.
            var hasDiffuseMaps = HasCol || HasCol2 || HasDiffuse || HasDiffuse2 || HasDiffuse3;
            var hasEmiMaps     = HasEmi || HasEmi2;

            uniformBlock.SetValue("emissionOverride", hasEmiMaps && !hasDiffuseMaps);
        }
Beispiel #12
0
        public void InvalidName()
        {
            var uniformBlock = new UniformBlock(shader, "UniformBlockA");

            Assert.IsFalse(uniformBlock.SetValue("ಠ_ಠ", 1.5f));
        }
Beispiel #13
0
        public void ValidNameSmallerThanType()
        {
            var uniformBlock = new UniformBlock(shader, "UniformBlockA");

            Assert.IsTrue(uniformBlock.SetValue("blockAFloat", (byte)128));
        }
Beispiel #14
0
 public void ValidNameLargerThanBlock()
 {
     var uniformBlock = new UniformBlock(shader, "UniformBlockA");
     var e            = Assert.ThrowsException <ArgumentOutOfRangeException>(() =>
                                                                             uniformBlock.SetValue("blockAFloat", new TestStruct()));
 }
Beispiel #15
0
        public void ValidName()
        {
            var uniformBlock = new UniformBlock(shader, "UniformBlockA");

            Assert.IsTrue(uniformBlock.SetValue("blockAFloat", 1.5f));
        }