public LevelGrid(float size) { this.Size = size; var bitmap = (Bitmap) Image.FromFile(LocalIo.Resources.GetFile("level.bmp").Uri); var (width, height) = (bitmap.Width, bitmap.Height); var boolGrid = new FinSparseGrid<bool>(bitmap.Width, bitmap.Height, false) { ShouldThrowExceptions = false, }; for (var y = 0; y < height; ++y) { for (var x = 0; x < width; ++x) { var color = bitmap.GetPixel(x, y); if (color.R == 0) { boolGrid[x, y] = true; } } } this.tiles_ = new FinSparseGrid<LevelTileTypes>( bitmap.Width, bitmap.Height, LevelTileTypes.EMPTY) { ShouldThrowExceptions = false, }; foreach (var node in boolGrid) { if (!node.Value) { continue; } var (c, r) = (node.C, node.R); var tile = LevelTileTypes.EMPTY; var isFloor = !boolGrid[c, r - 1]; if (isFloor) { tile |= LevelTileTypes.FLOOR; } var isCeiling = !boolGrid[c, r + 1]; if (isCeiling) { tile |= LevelTileTypes.CEILING; } var isLeftWall = !boolGrid[c - 1, r]; if (isLeftWall) { tile |= LevelTileTypes.LEFT_WALL; } var isRightWall = !boolGrid[c + 1, r]; if (isRightWall) { tile |= LevelTileTypes.RIGHT_WALL; } this.tiles_[c, r] = tile; } boolGrid.Clear(); }
public void SetAllPixels(IFinGrid <FinColor> rgbaGrid) { /*TexturesOpenTk.ConvertRgbaGridToUintArray_( * rgbaGrid, * ref this.pixelData_); * * GL.BindBuffer(BufferTarget.PixelPackBuffer, this.bufferId_); * GL.ReadPixels(0, * 0, * this.width_, * this.height_, * PixelFormat.AbgrExt, * PixelType.UnsignedByte, * this.pixelData_); * GL.BindBuffer(BufferTarget.PixelPackBuffer, 0);*/ TexturesOpenTk.ConvertRgbaGridToUintArray_( rgbaGrid, ref this.pixelData_, this.width_, this.height_); GL.BindTexture(TextureTarget.Texture2D, this.textureId_); //GL.BindTexture(BufferTarget.PixelUnpackBuffer, this.pixelData_); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, this.width_, this.height_, 0, PixelFormat.AbgrExt, PixelType.UnsignedByte, this.pixelData_); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Clamp); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Clamp); //GL.BindTexture(BufferTarget.PixelUnpackBuffer, 0); GL.BindTexture(TextureTarget.Texture2D, 0); }
private static void ConvertRgbaGridToUintArray_( IFinGrid <FinColor> rgbaGrid, ref uint[] uintArray, int width, int height ) { for (var y = 0; y < height; ++y) { for (var x = 0; x < width; ++x) { var i = y * width + x; var rgba = rgbaGrid[x, y]; uintArray[i] = rgba.I; } } }
public ImageData(ImageType imageType, IFinGrid <FinColor> pixels) { this.imageType = imageType; this.pixels = pixels; }