Ext.KHR_LightsPunctual.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using SharpGLTF.SchemaReflection;
  5. namespace SharpGLTF
  6. {
  7. class LightsPunctualExtension : SchemaProcessor
  8. {
  9. private static string RootSchemaUri => Constants.KhronosExtensionPath("KHR_lights_punctual", "glTF.KHR_lights_punctual.schema.json");
  10. private static string NodeSchemaUri => Constants.KhronosExtensionPath("KHR_lights_punctual", "node.KHR_lights_punctual.schema.json");
  11. private const string ExtensionRootClassName = "KHR_lights_punctual glTF Document Extension";
  12. private const string ExtensionNodeClassName = "KHR_lights_punctual glTF Node Extension";
  13. private const string ExtensionLightClassName = "KHR_lights_punctual Light Properties";
  14. private const string ExtensionLightSpotClassName = "KHR_lights_punctual Light Spot Properties";
  15. public override IEnumerable<(string, SchemaType.Context)> Process()
  16. {
  17. yield return ("ext.ModelLightsPunctual.g", ProcessModel());
  18. yield return ("ext.NodeLightsPunctual.g", ProcessNode());
  19. }
  20. private static SchemaType.Context ProcessModel()
  21. {
  22. var ctx = SchemaProcessing.LoadSchemaContext(RootSchemaUri);
  23. ctx.IgnoredByCodeEmitter("glTF Property");
  24. ctx.IgnoredByCodeEmitter("glTF Child of Root Property");
  25. ctx.FindClass(ExtensionLightClassName)
  26. .GetField("color")
  27. .SetDataType(typeof(System.Numerics.Vector3), true)
  28. .SetDefaultValue("Vector3.One")
  29. .SetItemsRange(0);
  30. return ctx;
  31. }
  32. private static SchemaType.Context ProcessNode()
  33. {
  34. var ctx = SchemaProcessing.LoadSchemaContext(NodeSchemaUri);
  35. ctx.IgnoredByCodeEmitter("glTF Property");
  36. ctx.IgnoredByCodeEmitter("glTF Child of Root Property");
  37. return ctx;
  38. }
  39. public override void PrepareTypes(CodeGen.CSharpEmitter newEmitter, SchemaType.Context ctx)
  40. {
  41. newEmitter.SetRuntimeName(ExtensionLightClassName, "PunctualLight");
  42. newEmitter.SetRuntimeName(ExtensionLightSpotClassName, "PunctualLightSpot");
  43. newEmitter.SetRuntimeName(ExtensionRootClassName, "_ModelPunctualLights");
  44. newEmitter.SetRuntimeName(ExtensionNodeClassName, "_NodePunctualLight");
  45. }
  46. }
  47. }