internal void Render() { if (GetObjects == null) { TriangleTest(); } else { GL.PushMatrix(); SetupCamera(); foreach (LatipiumObject obj in GetObjects()) { Com.Latipium.Core.Tuple <object, object> data = obj.InvokeFunction <LatipiumObject>("Type") .InvokeFunction <LatipiumObject, Com.Latipium.Core.Tuple <object, object> >("GetRenderData", obj); if (data != null) { IObjectRenderer objectR = FindObjectRenderer(data); if (objectR == null) { continue; } IColorRenderer colorR = FindColorRenderer(data); GL.PushMatrix(); RenderObject(obj, data, objectR, colorR); GL.PopMatrix(); } } GL.PopMatrix(); } }
private void RenderObject(LatipiumObject obj, Com.Latipium.Core.Tuple <object, object> data, IObjectRenderer objectR, IColorRenderer colorR) { Com.Latipium.Core.Tuple <float, float, float> position = obj.InvokeFunction <Com.Latipium.Core.Tuple <float, float, float>, Com.Latipium.Core.Tuple <float, float, float> >("Position", null); float[] transform = obj.InvokeFunction <float[], float[]>("Transform", null); if (position != null) { GL.Translate(position.Object1, position.Object2, position.Object3); } if (transform != null) { GL.MultMatrix(transform); } int len = objectR.Start(data.Object1); if (colorR == null) { for (int i = 0; i < len; ++i) { objectR.Vertex(i); } } else { colorR.Start(data.Object2); for (int i = 0; i < len; ++i) { colorR.Color(i); objectR.Vertex(i); } } objectR.End(); }