HelloQuad.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using AtomicEngine;
  2. public class Program
  3. {
  4. public static void Main(string[] args)
  5. {
  6. Application.Run<HelloQuad>(args);
  7. }
  8. }
  9. public class HelloQuad : 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. Texture2D texture;
  17. VertexBuffer vertexBuffer;
  18. public override void Start()
  19. {
  20. Renderer renderer = AtomicNET.GetSubsystem<Renderer>();
  21. graphics = AtomicNET.GetSubsystem<Graphics>();
  22. viewport = renderer.GetViewport(0);
  23. scene = new Scene();
  24. scene.CreateComponent<Octree>();
  25. viewport.Scene = scene;
  26. camera = scene.CreateChild("Camera").CreateComponent<Camera>();
  27. camera.Node.Position = new Vector3(0.5f, 0.5f, 0.0f);
  28. camera.Orthographic = true;
  29. camera.OrthoSize = 1.5f;
  30. viewport.Camera = camera;
  31. // We create a XML from string so this code is fully self-contained
  32. XMLFile xml = new XMLFile();
  33. xml.FromString("<renderpath><command type=\"sendevent\"/></renderpath>");
  34. RenderPath renderpath = new RenderPath();
  35. renderpath.Append(xml);
  36. viewport.SetRenderPath(renderpath);
  37. SubscribeToEvent("RenderPathEvent", (u, e) => { Render(); });
  38. ShaderVariation pixelShader = graphics.GetShader(ShaderType.PS, "Basic", "DIFFMAP");
  39. ShaderVariation vertexShader = graphics.GetShader(ShaderType.VS, "Basic", "DIFFMAP");
  40. graphics.SetShaders(vertexShader, pixelShader);
  41. graphics.SetShaderParameter(ShaderParams.VSP_MODEL, Matrix3x4.IDENTITY);
  42. graphics.SetShaderParameter(ShaderParams.PSP_MATDIFFCOLOR, Color.White);
  43. graphics.SetCullMode(CullMode.CULL_NONE);
  44. // We create a texture from literal data so this code is fully self-contained
  45. Image image = new Image();
  46. image.SetSize(16, 16, 3);
  47. Color z = Color.Yellow;
  48. Color M = Color.Blue;
  49. Color k = Color.Black;
  50. Color[,] imageData =
  51. {
  52. { k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k },
  53. { k,z,z,z,z,z,z,z,z,z,z,z,z,z,M,k },
  54. { k,z,z,z,z,z,z,M,M,z,z,z,z,z,z,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,M,z,z,M,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,M,z,z,z,z,M,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,M,z,z,z,z,z,z,M,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,M,M,M,M,M,M,M,M,M,M,z,z,k },
  63. { k,z,z,M,z,z,z,z,z,z,z,z,M,z,z,k },
  64. { k,z,M,z,z,z,z,z,z,z,z,z,z,M,z,k },
  65. { k,z,M,z,z,z,z,z,z,z,z,z,z,M,z,k },
  66. { k,z,z,z,z,z,z,z,z,z,z,z,z,z,z,k },
  67. { k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k },
  68. };
  69. for (int x = 0; x < 16; x++)
  70. {
  71. for (int y = 0; y < 16; y++)
  72. {
  73. image.SetPixel(x,15-y,imageData[y,x]);
  74. }
  75. }
  76. texture = new Texture2D();
  77. texture.SetData(image);
  78. vertexBuffer = new VertexBuffer();
  79. vertexBuffer.SetSize(6, Constants.MASK_POSITION | Constants.MASK_TEXCOORD1, true);
  80. }
  81. unsafe void Render()
  82. {
  83. System.IntPtr vertexData = vertexBuffer.Lock(0, 6, true);
  84. {
  85. float* vout = (float*)vertexData;
  86. *vout++ = 0;
  87. *vout++ = 0;
  88. *vout++ = 0;
  89. *vout++ = 0;
  90. *vout++ = 0;
  91. *vout++ = 0;
  92. *vout++ = 1;
  93. *vout++ = 0;
  94. *vout++ = 0;
  95. *vout++ = 1;
  96. *vout++ = 1;
  97. *vout++ = 1;
  98. *vout++ = 0;
  99. *vout++ = 1;
  100. *vout++ = 1;
  101. *vout++ = 0;
  102. *vout++ = 0;
  103. *vout++ = 0;
  104. *vout++ = 0;
  105. *vout++ = 0;
  106. *vout++ = 1;
  107. *vout++ = 1;
  108. *vout++ = 0;
  109. *vout++ = 1;
  110. *vout++ = 1;
  111. *vout++ = 1;
  112. *vout++ = 0;
  113. *vout++ = 0;
  114. *vout++ = 1;
  115. *vout++ = 0;
  116. }
  117. vertexBuffer.Unlock();
  118. graphics.Clear(0x1, Color.White);
  119. viewport.View.SetCameraShaderParameters(camera);
  120. graphics.SetTexture((uint)TextureUnit.TU_DIFFUSE, texture);
  121. graphics.SetVertexBuffer(vertexBuffer);
  122. graphics.Draw(PrimitiveType.TRIANGLE_LIST, 0, 6);
  123. }
  124. }