/// <inheritdoc/> public override void Visit(ConstantBuffer constantBuffer) { // Flatten the constant buffers if (constantBuffer.Members.Count > 0) { if (GenerateUniformBlocks) { if (constantBuffer.Register != null) { var layoutQualifier = constantBuffer.Qualifiers.OfType <LayoutQualifier>().FirstOrDefault(); if (layoutQualifier == null) { layoutQualifier = new SiliconStudio.Shaders.Ast.Glsl.LayoutQualifier(); constantBuffer.Qualifiers |= layoutQualifier; } layoutQualifier.Layouts.Insert(0, new LayoutKeyValue("binding", constantBuffer.Register.Register)); } Write(constantBuffer.Qualifiers, true); Write("uniform").Write(" ").Write(constantBuffer.Name).WriteSpace().Write("{").WriteLine(); Indent(); VisitList(constantBuffer.Members); } else { Write("// Begin cbuffer ").Write(constantBuffer.Name).WriteLine(); foreach (var member in constantBuffer.Members) { // Prefix each variable with "uniform " if (member is Variable) { Write("uniform"); Write(" "); } VisitDynamic(member); } } if (GenerateUniformBlocks) { Outdent(); Write("};").WriteLine(); } else { Write("// End buffer ").Write(constantBuffer.Name).WriteLine(); } } }
/// <inheritdoc/> public override void Visit(ConstantBuffer constantBuffer) { // Flatten the constant buffers if (constantBuffer.Members.Count > 0) { if (GenerateUniformBlocks) { if (constantBuffer.Register != null) { var layoutQualifier = constantBuffer.Qualifiers.OfType<LayoutQualifier>().FirstOrDefault(); if (layoutQualifier == null) { layoutQualifier = new SiliconStudio.Shaders.Ast.Glsl.LayoutQualifier(); constantBuffer.Qualifiers |= layoutQualifier; } layoutQualifier.Layouts.Insert(0, new LayoutKeyValue("binding", constantBuffer.Register.Register)); } Write(constantBuffer.Qualifiers, true); Write("uniform").Write(" ").Write(constantBuffer.Name).WriteSpace().Write("{").WriteLine(); Indent(); VisitList(constantBuffer.Members); } else { Write("// Begin cbuffer ").Write(constantBuffer.Name).WriteLine(); foreach (var member in constantBuffer.Members) { // Prefix each variable with "uniform " if (member is Variable) { Write("uniform"); Write(" "); } VisitDynamic(member); } } if (GenerateUniformBlocks) { Outdent(); Write("};").WriteLine(); } else { Write("// End buffer ").Write(constantBuffer.Name).WriteLine(); } } }