コード例 #1
0
        static void Start(WebGLRenderingContext gl, TextureLoader textureLoader, ProgramManager programManager, Level level)
        {
            Action tick = () => Tick(gl, textureLoader, programManager, level);

            tick();
            Global.SetInterval(tick, 200);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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);
             * }
             */
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: Water.cs プロジェクト: Porl91/BridgeGame
 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);
 }
コード例 #6
0
ファイル: TileType.cs プロジェクト: Porl91/BridgeGame
 public virtual void Render(WebGLRenderingContext gl, TextureLoader textureLoader, ProgramManager programManager, int x, int y)
 {
     throw new NotImplementedException();
 }
コード例 #7
0
 static void Tick(WebGLRenderingContext gl, TextureLoader textureLoader, ProgramManager programManager, Level level)
 {
     Update(level);
     Render(gl, textureLoader, programManager, level);
 }