public static void Init() { sceneShaped = false; GL1.GenVertexArray(1, out VAOId); GL1.BindVertexArray(VAOId); GL1.GenBuffer(1, ref VBOId); GL1.GenBuffer(1, ref VBOId2); GL1.BindBuffer(0x8892, VBOId); ShaderProgram = new ShaderProgram("shaders\\vertex.glsl", "shaders\\fragment.glsl"); ShaderProgram.Use(); matrixLocation = GL1.GetUniformLocation(ShaderProgram.ProgramID, "MVP"); GL1.ClearColor(0.5f, 0, 1, 0); GL1.Clear(0x00000100 | 0x00004000); }
public static void DrawWorld(World w, Rectangle view, params Unit[] u) { GL1.DrawBuffer(0x0405); GL1.Clear(0x00000100 | 0x00004000); var mat = Matrix4.CreateOrthographicOffCenter((float)view.Left, (float)view.Right, (float)view.Bottom, (float)view.Top, -1, 1); GL1.UniformMatrix4(matrixLocation, 1, false, ref mat); if (!sceneShaped) { _poses = new Vector3[w.Field.Height * w.Field.Height * 2 * 3]; _colors = new Vector3[w.Field.Height * w.Field.Height * 2 * 3]; } var visionmap = new bool[w.Field.Width, w.Field.Height]; foreach (var unit in u) { var tmp = w.Vision.VisionField(unit); for (var i = 0; i < w.Field.Width; i++) { for (var j = 0; j < w.Field.Height; j++) { visionmap[i, j] = visionmap[i, j] || tmp[i, j]; } } } if (!sceneShaped) { for (var i = 0; i < w.Field.Width; i++) { for (var j = 0; j < w.Field.Height; j++) { ShapeTile(i, j, w.Field[i, j].Passable); } } DrawArray(_poses, _colors, PrimitiveType.Triangles); sceneShaped = true; } var cVisible = new Vector3(0, 0, 1); var cDefault = new Vector3(1, 1, 1); var cPlayer = new Vector3(0, 1, 0); var cEnemy = new Vector3(1, 0, 0); Parallel.For(0, w.Field.Width, i => { for (var j = 0; j < w.Field.Height; j++) { if (visionmap[i, j]) { if (w.Field[i, j].Unit != null) { UpdateTile(6 * (i * w.Field.Height + j), w.Field[i, j].Passable, ref cEnemy, ref cVisible); } else { UpdateTile(6 * (i * w.Field.Height + j), w.Field[i, j].Passable, ref cDefault, ref cVisible); } } else { UpdateTile(6 * (i * w.Field.Height + j), w.Field[i, j].Passable, ref cDefault, ref cDefault); } } }); foreach (var unit in u) { UpdateTile(6 * (unit.Position.X * w.Field.Height + unit.Position.Y), true, ref cPlayer, ref cVisible); } DrawArray(null, _colors, PrimitiveType.Triangles); }