Esempio n. 1
0
        [Test] public void CommentHandling()
        {
            ShaderSourceBuilder builder = new ShaderSourceBuilder();
            string mainShader           = new StringBuilder()
                                          .AppendLine("uniform vec4 sharedUniformA;")
                                          .AppendLine("uniform float sharedUniformB;")
                                          .AppendLine("uniform float sharedUniformC;")
                                          .AppendLine()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = sharedFunc(gl_Vertex);")
                                          .AppendLine("}")
                                          .ToString();
            string sharedShader = new StringBuilder()
                                  .AppendLine("uniform vec4 sharedUniformA;")
                                  .AppendLine("//uniform float sharedUniformB;")
                                  .AppendLine("/*")
                                  .AppendLine("uniform float sharedUniformC;")
                                  .AppendLine("*/")
                                  .AppendLine()
                                  .AppendLine("vec4 sharedFuncA(vec4 pos)")
                                  .AppendLine("{")
                                  .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                  .AppendLine("}")
                                  .ToString();
            string expectedResultShader = new StringBuilder()
                                          .AppendLine("#line 10000")
                                          .AppendLine("uniform vec4 sharedUniformA;")
                                          .AppendLine("//uniform float sharedUniformB;")
                                          .AppendLine("/*")
                                          .AppendLine("uniform float sharedUniformC;")
                                          .AppendLine("*/")
                                          .AppendLine()
                                          .AppendLine("vec4 sharedFuncA(vec4 pos)")
                                          .AppendLine("{")
                                          .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                          .AppendLine("}")
                                          .AppendLine()
                                          .AppendLine("#line 1")
                                          .AppendLine("// uniform vec4 sharedUniformA;")
                                          .AppendLine("uniform float sharedUniformB;")
                                          .AppendLine("uniform float sharedUniformC;")
                                          .AppendLine()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = sharedFunc(gl_Vertex);")
                                          .AppendLine("}")
                                          .ToString();

            builder.SetMainChunk(mainShader);
            builder.AddSharedChunk(sharedShader);

            string resultShader = builder.Build();

            Assert.AreEqual(expectedResultShader, resultShader);
        }
Esempio n. 2
0
        [Test] public void VersionDirective()
        {
            ShaderSourceBuilder builder = new ShaderSourceBuilder();
            string mainShader           = new StringBuilder()
                                          .AppendLine("#version 150")
                                          .AppendLine()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = sharedFunc(gl_Vertex);")
                                          .AppendLine("}")
                                          .ToString();
            string sharedShader = new StringBuilder()
                                  .AppendLine("#version 140")
                                  .AppendLine()
                                  .AppendLine("vec4 sharedFuncA(vec4 pos)")
                                  .AppendLine("{")
                                  .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                  .AppendLine("}")
                                  .ToString();
            string expectedResultShader = new StringBuilder()
                                          .AppendLine("#version 150")
                                          .AppendLine("#line 10000")
                                          .AppendLine("// #version 140")
                                          .AppendLine()
                                          .AppendLine("vec4 sharedFuncA(vec4 pos)")
                                          .AppendLine("{")
                                          .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                          .AppendLine("}")
                                          .AppendLine()
                                          .AppendLine("#line 1")
                                          .AppendLine("// #version 150")
                                          .AppendLine()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = sharedFunc(gl_Vertex);")
                                          .AppendLine("}")
                                          .ToString();

            builder.SetMainChunk(mainShader);
            builder.AddSharedChunk(sharedShader);

            string resultShader = builder.Build();

            Assert.AreEqual(expectedResultShader, resultShader);
        }
Esempio n. 3
0
        [Test] public void ConditionalSymbols()
        {
            ShaderSourceBuilder builder = new ShaderSourceBuilder();
            string mainShader           = new StringBuilder()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = sharedFunc(gl_Vertex);")
                                          .AppendLine("}")
                                          .ToString();
            string sharedShader = new StringBuilder()
                                  .AppendLine("vec4 sharedFuncA(vec4 pos)")
                                  .AppendLine("{")
                                  .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                  .AppendLine("}")
                                  .ToString();
            string expectedResultShader = new StringBuilder()
                                          .AppendLine("#line 20000")
                                          .AppendLine("#define CONDITION_B")
                                          .AppendLine("#define CONDITION_C")
                                          .AppendLine()
                                          .AppendLine("#line 10000")
                                          .AppendLine("vec4 sharedFuncA(vec4 pos)")
                                          .AppendLine("{")
                                          .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                          .AppendLine("}")
                                          .AppendLine()
                                          .AppendLine("#line 1")
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = sharedFunc(gl_Vertex);")
                                          .AppendLine("}")
                                          .ToString();

            builder.SetConditional("CONDITION_A", true);
            builder.SetConditional("CONDITION_B", true);
            builder.SetConditional("CONDITION_C", true);
            builder.SetConditional("CONDITION_A", false);
            builder.SetMainChunk(mainShader);
            builder.AddSharedChunk(sharedShader);

            string resultShader = builder.Build();

            Assert.AreEqual(expectedResultShader, resultShader);
        }
Esempio n. 4
0
        [Test] public void FieldParsingComposition()
        {
            ShaderSourceBuilder builder = new ShaderSourceBuilder();
            string mainShader           = new StringBuilder()
                                          .AppendLine("#pragma duality editorType ColorRgba")
                                          .AppendLine("uniform vec4 mainColor;")
                                          .AppendLine()
                                          .AppendLine("in vec3 vertexPos;")
                                          .AppendLine()
                                          .AppendLine("out vec4 programColor;")
                                          .AppendLine()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = vec4(0.0, 0.0, 0.0, 1.0);")
                                          .AppendLine("  programColor = vec4(1.0, 0.0, 0.0, 0.0);")
                                          .AppendLine("}")
                                          .ToString();
            string sharedShader = new StringBuilder()
                                  .AppendLine("// Some comment")
                                  .AppendLine("// Another comment")
                                  .AppendLine("# version 130")
                                  .AppendLine()
                                  .AppendLine("uniform mat4 _viewMatrix;")
                                  .AppendLine("uniform mat4 _projectionMatrix")
                                  .AppendLine("uniform mat4 _viewProjectionMatrix")
                                  .ToString();

            builder.SetMainChunk(mainShader);
            builder.AddSharedChunk(sharedShader);

            string resultShader = builder.Build();

            // Make sure all fields are there as expected
            Assert.AreEqual("_viewMatrix", builder.Fields[0].Name);
            Assert.AreEqual("_projectionMatrix", builder.Fields[1].Name);
            Assert.AreEqual("_viewProjectionMatrix", builder.Fields[2].Name);
            Assert.AreEqual("mainColor", builder.Fields[3].Name);
            Assert.AreEqual("vertexPos", builder.Fields[4].Name);
        }
Esempio n. 5
0
        [Test] public void VariableMetadata()
        {
            ShaderSourceBuilder builder = new ShaderSourceBuilder();
            string mainShader           = new StringBuilder()
                                          .AppendLine("#pragma duality editorType ColorRgba")
                                          .AppendLine("#pragma duality description \"Test mainUniform Desc\"")
                                          .AppendLine("uniform vec4 mainUniform;")
                                          .AppendLine()
                                          .AppendLine("#pragma duality editorType Single")
                                          .AppendLine("#pragma duality description \"Test sharedUniform Desc\"")
                                          .AppendLine("// Some comment")
                                          .AppendLine("uniform float sharedUniform;")
                                          .AppendLine()
                                          .AppendLine("#pragma duality editorType ColorRgba")
                                          .AppendLine()
                                          .AppendLine("#pragma duality description \"Test mainAttribute Desc\"")
                                          .AppendLine()
                                          .AppendLine("in vec4 mainAttribute;")
                                          .AppendLine()
                                          .AppendLine("#pragma duality editorType Single")
                                          .AppendLine("#pragma duality description \"Test sharedAttribute Desc\"")
                                          .AppendLine()
                                          .AppendLine("in vec4 sharedAttribute;")
                                          .AppendLine()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = vec4(0.0, 0.0, 0.0, 1.0);")
                                          .AppendLine("}")
                                          .ToString();
            string sharedShader = new StringBuilder()
                                  .AppendLine("#pragma duality editorType Single")
                                  .AppendLine("#pragma duality description \"Test sharedUniform Desc\"")
                                  .AppendLine("uniform float sharedUniform;")
                                  .AppendLine()
                                  .AppendLine("#pragma duality editorType Single")
                                  .AppendLine("#pragma duality description \"Test sharedAttribute Desc\"")
                                  .AppendLine("in vec4 sharedAttribute;")
                                  .AppendLine()
                                  .AppendLine("vec4 sharedFuncA(vec4 pos) { return pos; }")
                                  .ToString();
            string expectedResultShader = new StringBuilder()
                                          .AppendLine("#line 10000")
                                          .AppendLine("// #pragma duality editorType Single")
                                          .AppendLine("// #pragma duality description \"Test sharedUniform Desc\"")
                                          .AppendLine("uniform float sharedUniform;")
                                          .AppendLine()
                                          .AppendLine("// #pragma duality editorType Single")
                                          .AppendLine("// #pragma duality description \"Test sharedAttribute Desc\"")
                                          .AppendLine("in vec4 sharedAttribute;")
                                          .AppendLine()
                                          .AppendLine("vec4 sharedFuncA(vec4 pos) { return pos; }")
                                          .AppendLine()
                                          .AppendLine("#line 1")
                                          .AppendLine("// #pragma duality editorType ColorRgba")
                                          .AppendLine("// #pragma duality description \"Test mainUniform Desc\"")
                                          .AppendLine("uniform vec4 mainUniform;")
                                          .AppendLine()
                                          .AppendLine("// #pragma duality editorType Single")
                                          .AppendLine("// #pragma duality description \"Test sharedUniform Desc\"")
                                          .AppendLine("// Some comment")
                                          .AppendLine("// uniform float sharedUniform;")
                                          .AppendLine()
                                          .AppendLine("// #pragma duality editorType ColorRgba")
                                          .AppendLine()
                                          .AppendLine("// #pragma duality description \"Test mainAttribute Desc\"")
                                          .AppendLine()
                                          .AppendLine("in vec4 mainAttribute;")
                                          .AppendLine()
                                          .AppendLine("// #pragma duality editorType Single")
                                          .AppendLine("// #pragma duality description \"Test sharedAttribute Desc\"")
                                          .AppendLine()
                                          .AppendLine("// in vec4 sharedAttribute;")
                                          .AppendLine()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = vec4(0.0, 0.0, 0.0, 1.0);")
                                          .AppendLine("}")
                                          .ToString();

            builder.SetMainChunk(mainShader);
            builder.AddSharedChunk(sharedShader);

            string resultShader = builder.Build();

            Assert.AreEqual(expectedResultShader, resultShader);
        }
Esempio n. 6
0
        [Test] public void Composition()
        {
            ShaderSourceBuilder builder = new ShaderSourceBuilder();
            string mainShader           = new StringBuilder()
                                          .AppendLine("uniform vec4 mainUniformA;")
                                          .AppendLine("uniform float mainUniformB;")
                                          .AppendLine("uniform vec4 sharedUniformA;")
                                          .AppendLine()
                                          .AppendLine("attribute vec4 mainAttributeA;")
                                          .AppendLine("attribute vec4 sharedAttributeA;")
                                          .AppendLine("in float mainAttributeB;")
                                          .AppendLine()
                                          .AppendLine("varying vec4 sharedVaryingA;")
                                          .AppendLine("varying vec4 mainVaryingA;")
                                          .AppendLine("out float mainVaryingB;")
                                          .AppendLine()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = sharedFunc(gl_Vertex);")
                                          .AppendLine("}")
                                          .ToString();
            string sharedShaderA = new StringBuilder()
                                   .AppendLine("uniform vec4 sharedUniformA;")
                                   .AppendLine("attribute vec4 sharedAttributeA;")
                                   .AppendLine("varying vec4 sharedVaryingA;")
                                   .AppendLine()
                                   .AppendLine("vec4 sharedFuncA(vec4 pos)")
                                   .AppendLine("{")
                                   .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                   .AppendLine("}")
                                   .ToString();
            string sharedShaderB = new StringBuilder()
                                   .AppendLine("uniform float sharedUniformB;")
                                   .AppendLine("in float sharedAttributeB;")
                                   .AppendLine("out float sharedVaryingB;")
                                   .AppendLine()
                                   .AppendLine("vec4 sharedFuncB(vec4 pos)")
                                   .AppendLine("{")
                                   .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                   .AppendLine("}")
                                   .ToString();
            string expectedResultShader = new StringBuilder()
                                          .AppendLine("#line 10000")
                                          .AppendLine("uniform vec4 sharedUniformA;")
                                          .AppendLine("attribute vec4 sharedAttributeA;")
                                          .AppendLine("varying vec4 sharedVaryingA;")
                                          .AppendLine()
                                          .AppendLine("vec4 sharedFuncA(vec4 pos)")
                                          .AppendLine("{")
                                          .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                          .AppendLine("}")
                                          .AppendLine()
                                          .AppendLine("#line 20000")
                                          .AppendLine("uniform float sharedUniformB;")
                                          .AppendLine("in float sharedAttributeB;")
                                          .AppendLine("out float sharedVaryingB;")
                                          .AppendLine()
                                          .AppendLine("vec4 sharedFuncB(vec4 pos)")
                                          .AppendLine("{")
                                          .AppendLine("  return pos + vec4(1.0, 0.0, 0.0, 0.0);")
                                          .AppendLine("}")
                                          .AppendLine()
                                          .AppendLine("#line 1")
                                          .AppendLine("uniform vec4 mainUniformA;")
                                          .AppendLine("uniform float mainUniformB;")
                                          .AppendLine("// uniform vec4 sharedUniformA;")
                                          .AppendLine()
                                          .AppendLine("attribute vec4 mainAttributeA;")
                                          .AppendLine("// attribute vec4 sharedAttributeA;")
                                          .AppendLine("in float mainAttributeB;")
                                          .AppendLine()
                                          .AppendLine("// varying vec4 sharedVaryingA;")
                                          .AppendLine("varying vec4 mainVaryingA;")
                                          .AppendLine("out float mainVaryingB;")
                                          .AppendLine()
                                          .AppendLine("void main()")
                                          .AppendLine("{")
                                          .AppendLine("  gl_Position = sharedFunc(gl_Vertex);")
                                          .AppendLine("}")
                                          .ToString();

            builder.SetMainChunk(mainShader);
            builder.AddSharedChunk(sharedShaderA);
            builder.AddSharedChunk(sharedShaderB);

            string resultShader = builder.Build();

            Assert.AreEqual(expectedResultShader, resultShader);
        }