Beispiel #1
0
        public void RenderTab()
        {
            if (gfxBuffer == null)
            {
                return;
            }

            gfxBuffer.Graphics.Clear(Color.White);

            if (tabControl.SelectedIndex >= 2 && tabControl.SelectedIndex <= 5)
            {
                using (var graphics = Graphics.FromImage(bgBmp.Bitmap))
                {
                    graphics.Clear(Color.Transparent);
                }
            }

            switch (tabControl.SelectedIndex)
            {
            case 0:
                int     vramBaseOffset = 0x00010000;
                Color[] palette        = gba.LcdController.Palettes.Palette1;

                // You have to supply the code to get the tiles palette
                Func <int, int> get4BitPaletteNumber = (int tileNumber) => {
                    Obj obj = TileHelpers.FindFirstSpriteThatUsesTile(tileNumber, gba.LcdController.Obj);
                    return(obj == null ? 0 : obj.Attributes.PaletteNumber * 16);
                };

                gfxBuffer.Graphics.Clear(Color.Transparent);
                using (var graphics = Graphics.FromImage(tiles0Bmp.Bitmap))
                {
                    graphics.Clear(Color.Transparent);
                }

                gba.DrawTiles(tiles0Bmp, gba.Memory.VRam, vramBaseOffset, palette, false, get4BitPaletteNumber);

                gfxBuffer.Graphics.DrawImage(tiles0Bmp.Bitmap, 0, 0, tiles0Bmp.Width * 2, tiles0Bmp.Height * 2);
                break;

            case 1:
                gba.LcdController.Palettes.DrawPalette(0, palette0Bmp.Bitmap);
                gba.LcdController.Palettes.DrawPalette(1, palette1Bmp.Bitmap);
                gfxBuffer.Graphics.DrawImage(palette0Bmp.Bitmap, 0, 0, palette0Bmp.Width, palette0Bmp.Height);
                gfxBuffer.Graphics.DrawImage(palette1Bmp.Bitmap, 0, palette0Bmp.Height + 80, palette1Bmp.Width, palette1Bmp.Height);
                break;

            case 2:
                gba.LcdController.Bg[0].RenderFull(bgBmp);
                GfxHelpers.DrawViewportBox(bgBmp.Bitmap, gba.LcdController.Bg[0].ScrollX, gba.LcdController.Bg[0].ScrollY, gba.LcdController.Bg[0].WidthInPixels(), gba.LcdController.Bg[0].HeightInPixels());
                gfxBuffer.Graphics.DrawImage(bgBmp.Bitmap, bgRenderRect, 0, 0, gba.LcdController.Bg[0].WidthInPixels(), gba.LcdController.Bg[0].HeightInPixels(), GraphicsUnit.Pixel);
                break;

            case 3:
                gba.LcdController.Bg[1].RenderFull(bgBmp);
                GfxHelpers.DrawViewportBox(bgBmp.Bitmap, gba.LcdController.Bg[1].ScrollX, gba.LcdController.Bg[1].ScrollY, gba.LcdController.Bg[1].WidthInPixels(), gba.LcdController.Bg[1].HeightInPixels());
                gfxBuffer.Graphics.DrawImage(bgBmp.Bitmap, bgRenderRect, 0, 0, gba.LcdController.Bg[1].WidthInPixels(), gba.LcdController.Bg[1].HeightInPixels(), GraphicsUnit.Pixel);
                break;

            case 4:
                gba.LcdController.Bg[2].RenderFull(bgBmp);
                GfxHelpers.DrawViewportBox(bgBmp.Bitmap, gba.LcdController.Bg[2].ScrollX, gba.LcdController.Bg[2].ScrollY, gba.LcdController.Bg[2].WidthInPixels(), gba.LcdController.Bg[2].HeightInPixels());
                gfxBuffer.Graphics.DrawImage(bgBmp.Bitmap, bgRenderRect, 0, 0, gba.LcdController.Bg[2].WidthInPixels(), gba.LcdController.Bg[2].HeightInPixels(), GraphicsUnit.Pixel);
                break;

            case 5:
                gba.LcdController.Bg[3].RenderFull(bgBmp);
                GfxHelpers.DrawViewportBox(bgBmp.Bitmap, gba.LcdController.Bg[3].ScrollX, gba.LcdController.Bg[3].ScrollY, gba.LcdController.Bg[3].WidthInPixels(), gba.LcdController.Bg[3].HeightInPixels());
                gfxBuffer.Graphics.DrawImage(bgBmp.Bitmap, bgRenderRect, 0, 0, gba.LcdController.Bg[3].WidthInPixels(), gba.LcdController.Bg[3].HeightInPixels(), GraphicsUnit.Pixel);
                break;
            }

            gfxBuffer.Render();
        }