HelloQuad.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using System.Linq.Expressions;
  2. using AtomicEngine;
  3. public class Program
  4. {
  5. public static void Main(string[] args)
  6. {
  7. Application.Run<HelloQuad>(args);
  8. }
  9. }
  10. public class HelloQuad : AppDelegate
  11. {
  12. // Scene reference kept here so it won't be collected by the GC
  13. Scene scene;
  14. Camera camera;
  15. Graphics graphics;
  16. Viewport viewport;
  17. Texture2D texture;
  18. VertexBuffer vertexBuffer;
  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. ShaderVariation pixelShader = graphics.GetShader(ShaderType.PS, "Basic", "DIFFMAP");
  40. ShaderVariation vertexShader = graphics.GetShader(ShaderType.VS, "Basic", "DIFFMAP");
  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. // We create a texture from literal data so this code is fully self-contained
  46. Image image = new Image();
  47. image.SetSize(16, 16, 3);
  48. Color z = Color.Yellow;
  49. Color M = Color.Blue;
  50. Color k = Color.Black;
  51. Color[,] imageData =
  52. {
  53. { k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k },
  54. { k,z,z,z,z,z,z,z,z,z,z,z,z,z,M,k },
  55. { k,z,z,z,z,z,z,M,M,z,z,z,z,z,z,k },
  56. { k,z,z,z,z,z,z,M,M,z,z,z,z,z,z,k },
  57. { k,z,z,z,z,z,M,z,z,M,z,z,z,z,z,k },
  58. { k,z,z,z,z,z,M,z,z,M,z,z,z,z,z,k },
  59. { k,z,z,z,z,M,z,z,z,z,M,z,z,z,z,k },
  60. { k,z,z,z,z,M,z,z,z,z,M,z,z,z,z,k },
  61. { k,z,z,z,M,z,z,z,z,z,z,M,z,z,z,k },
  62. { k,z,z,z,M,z,z,z,z,z,z,M,z,z,z,k },
  63. { k,z,z,M,M,M,M,M,M,M,M,M,M,z,z,k },
  64. { k,z,z,M,z,z,z,z,z,z,z,z,M,z,z,k },
  65. { k,z,M,z,z,z,z,z,z,z,z,z,z,M,z,k },
  66. { k,z,M,z,z,z,z,z,z,z,z,z,z,M,z,k },
  67. { k,z,z,z,z,z,z,z,z,z,z,z,z,z,z,k },
  68. { k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k },
  69. };
  70. for (int x = 0; x < 16; x++)
  71. {
  72. for (int y = 0; y < 16; y++)
  73. {
  74. image.SetPixel(x,15-y,imageData[y,x]);
  75. }
  76. }
  77. texture = new Texture2D();
  78. texture.SetData(image);
  79. vertexBuffer = new VertexBuffer();
  80. vertexBuffer.SetSize(6, Constants.MASK_POSITION | Constants.MASK_TEXCOORD1, true);
  81. }
  82. unsafe void Render()
  83. {
  84. System.IntPtr vertexData = vertexBuffer.Lock(0, 6, true);
  85. {
  86. float* vout = (float*)vertexData;
  87. *vout++ = 0;
  88. *vout++ = 0;
  89. *vout++ = 0;
  90. *vout++ = 0;
  91. *vout++ = 0;
  92. *vout++ = 0;
  93. *vout++ = 1;
  94. *vout++ = 0;
  95. *vout++ = 0;
  96. *vout++ = 1;
  97. *vout++ = 1;
  98. *vout++ = 1;
  99. *vout++ = 0;
  100. *vout++ = 1;
  101. *vout++ = 1;
  102. *vout++ = 0;
  103. *vout++ = 0;
  104. *vout++ = 0;
  105. *vout++ = 0;
  106. *vout++ = 0;
  107. *vout++ = 1;
  108. *vout++ = 1;
  109. *vout++ = 0;
  110. *vout++ = 1;
  111. *vout++ = 1;
  112. *vout++ = 1;
  113. *vout++ = 0;
  114. *vout++ = 0;
  115. *vout++ = 1;
  116. *vout++ = 0;
  117. }
  118. vertexBuffer.Unlock();
  119. graphics.Clear(0x1, Color.White);
  120. viewport.View.SetCameraShaderParameters(camera);
  121. graphics.SetTexture((uint)TextureUnit.TU_DIFFUSE, texture);
  122. graphics.SetVertexBuffer(vertexBuffer);
  123. graphics.Draw(PrimitiveType.TRIANGLE_LIST, 0, 6);
  124. }
  125. }