static void Start(WebGLRenderingContext gl, TextureLoader textureLoader, ProgramManager programManager, Level level) { Action tick = () => Tick(gl, textureLoader, programManager, level); tick(); Global.SetInterval(tick, 200); }
public static void Main() { var canvas = Document.GetElementById <HTMLCanvasElement>("main"); var gl = WebGLHelpers.GetWebGLRenderingContext(canvas); if (gl == null) { throw new InvalidOperationException("Your browser doesn't support WebGL rendering contexts"); } Action onWindowLoadOrResize = () => { canvas.Width = Window.InnerWidth; canvas.Height = Window.InnerHeight; }; Window.OnLoad = (e) => onWindowLoadOrResize(); Window.OnResize = (e) => onWindowLoadOrResize(); var textureLoader = new TextureLoader(Set <TextureInfo> .Empty .Add(TextureInfo.Create(gl, "../Content/Images/sprites.png"))); /* Tuples of 'program ID', 'vertex shader ID' and 'fragment shader ID' */ var programManager = new ProgramManager(gl, Set <Tuple <string, string, string> > .Empty .Add(Tuple.Create("prog-image", "image-vert-shader", "image-frag-shader")) .Add(Tuple.Create("prog-line", "line-vert-shader", "line-frag-shader"))); var level = new Level(); textureLoader.AllLoaded += () => Start(gl, textureLoader, programManager, level); textureLoader.ProcessTextures(); }
public void Render(WebGLRenderingContext gl, TextureLoader textureLoader, ProgramManager programManager) { var tileSize = TileType.GetTileSize(); var tilesInWidth = gl.Canvas.Width / tileSize.X + 1; var tilesInHeight = gl.Canvas.Height / tileSize.Y + 1; for (var y = 0; y < tilesInHeight; y++) { for (var x = 0; x < tilesInWidth; x++) { mapData.GetTile(x, y).Render(gl, textureLoader, programManager, (int)(x * tileSize.X), (int)(y * tileSize.Y)); } } /* * var gridLineColour = new RGBAColour(0.1f, 1f, 0.5f, 1.0f); * * for (var i = 0; i <= Math.Max(gl.Canvas.Width, gl.Canvas.Height); i += 64) * { * if (i <= gl.Canvas.Height) * WebGLHelpers.DrawLine(gl, programManager.Programs["prog-line"].Program, * gridLineColour, * 0, i, gl.Canvas.Width, i); * * if (i <= gl.Canvas.Width) * WebGLHelpers.DrawLine(gl, programManager.Programs["prog-line"].Program, * gridLineColour, * i, 0, i, gl.Canvas.Height); * } */ }
static void Render(WebGLRenderingContext gl, TextureLoader textureLoader, ProgramManager programManager, Level level) { gl.Viewport(0, 0, gl.DrawingBufferWidth, gl.DrawingBufferHeight); gl.ClearColor(0, 0, 0, 1); gl.Clear(gl.COLOR_BUFFER_BIT); level.Render(gl, textureLoader, programManager); }
public override void Render(WebGLRenderingContext gl, TextureLoader textureLoader, ProgramManager programManager, int x, int y) { WebGLHelpers.DrawImage(gl, textureLoader.Textures.First(), programManager.Programs["prog-image"].Program, 64, 0, 64, 64, x, y, 64, 64); }
public virtual void Render(WebGLRenderingContext gl, TextureLoader textureLoader, ProgramManager programManager, int x, int y) { throw new NotImplementedException(); }
static void Tick(WebGLRenderingContext gl, TextureLoader textureLoader, ProgramManager programManager, Level level) { Update(level); Render(gl, textureLoader, programManager, level); }