KHR_LightsPunctual.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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 => KhronosExtensions.KhronosExtensionPath("KHR_lights_punctual", "glTF.KHR_lights_punctual.schema.json");
  10. private static string NodeSchemaUri => KhronosExtensions.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)> ReadSchema()
  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.LoadExtensionSchemaContext(RootSchemaUri);
  23. ctx.FindClass(ExtensionLightClassName)
  24. .GetField("color")
  25. .SetDataType(typeof(System.Numerics.Vector3), true)
  26. .SetDefaultValue("Vector3.One")
  27. .SetItemsRange(0);
  28. return ctx;
  29. }
  30. private static SchemaType.Context ProcessNode()
  31. {
  32. var ctx = SchemaProcessing.LoadExtensionSchemaContext(NodeSchemaUri);
  33. return ctx;
  34. }
  35. public override void PrepareTypes(CodeGen.CSharpEmitter newEmitter, SchemaType.Context ctx)
  36. {
  37. newEmitter.SetRuntimeName(ExtensionLightClassName, "PunctualLight");
  38. newEmitter.SetRuntimeName(ExtensionLightSpotClassName, "PunctualLightSpot");
  39. newEmitter.SetRuntimeName(ExtensionRootClassName, "_ModelPunctualLights");
  40. newEmitter.SetRuntimeName(ExtensionNodeClassName, "_NodePunctualLight");
  41. }
  42. }
  43. }