HelloTriangle.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using AtomicEngine;
  2. public class Program
  3. {
  4. public static void Main(string[] args)
  5. {
  6. Application.Run<Game>(args);
  7. }
  8. }
  9. public class Game : AppDelegate
  10. {
  11. // Scene reference kept here so it won't be collected by the GC
  12. Scene scene;
  13. Camera camera;
  14. Graphics graphics;
  15. Viewport viewport;
  16. VertexBuffer vertexBuffer;
  17. ShaderVariation pixelShader;
  18. ShaderVariation vertexShader;
  19. public override void Start()
  20. {
  21. Renderer renderer = AtomicNET.GetSubsystem<Renderer>();
  22. graphics = AtomicNET.GetSubsystem<Graphics>();
  23. viewport = renderer.GetViewport(0);
  24. scene = new Scene();
  25. scene.CreateComponent<Octree>();
  26. viewport.Scene = scene;
  27. camera = scene.CreateChild("Camera").CreateComponent<Camera>();
  28. camera.Node.Position = new Vector3(0.5f, 0.5f, 0.0f);
  29. camera.Orthographic = true;
  30. camera.OrthoSize = 1.5f;
  31. viewport.Camera = camera;
  32. // We create a XML from string so this code is fully self-contained
  33. XMLFile xml = new XMLFile();
  34. xml.FromString("<renderpath><command type=\"sendevent\"/></renderpath>");
  35. RenderPath renderpath = new RenderPath();
  36. renderpath.Append(xml);
  37. viewport.SetRenderPath(renderpath);
  38. SubscribeToEvent("RenderPathEvent", (u, e) => { Render(); });
  39. pixelShader = graphics.GetShader(ShaderType.PS, "Basic", "VERTEXCOLOR");
  40. vertexShader = graphics.GetShader(ShaderType.VS, "Basic", "VERTEXCOLOR");
  41. graphics.SetShaders(vertexShader, pixelShader);
  42. graphics.SetShaderParameter(ShaderParams.VSP_MODEL, Matrix3x4.IDENTITY);
  43. graphics.SetShaderParameter(ShaderParams.PSP_MATDIFFCOLOR, Color.White);
  44. graphics.SetCullMode(CullMode.CULL_NONE);
  45. vertexBuffer = new VertexBuffer();
  46. vertexBuffer.SetSize(3, Constants.MASK_POSITION | Constants.MASK_COLOR, true);
  47. }
  48. unsafe void Render()
  49. {
  50. System.IntPtr vertexData = vertexBuffer.Lock(0, 3, true);
  51. {
  52. float* vout = (float*)vertexData;
  53. vout[0] = 0;
  54. vout[1] = 0;
  55. vout[2] = 0;
  56. *(uint*)(vout+3) = 0xFFFF0000;
  57. vout[4] = 1;
  58. vout[5] = 0;
  59. vout[6] = 0;
  60. *(uint*)(vout+7) = 0xFF00FF00;
  61. vout[8] = 0.5f;
  62. vout[9] = 1;
  63. vout[10] = 0;
  64. *(uint*)(vout+11) = 0xFF0000FF;
  65. }
  66. vertexBuffer.Unlock();
  67. graphics.Clear(0x1, Color.White);
  68. viewport.View.SetCameraShaderParameters(camera);
  69. graphics.SetVertexBuffer(vertexBuffer);
  70. graphics.Draw(PrimitiveType.TRIANGLE_LIST, 0, 3);
  71. }
  72. }