private void Update() { if (ppu == null) { return; } if (paletteImages != null) { var palette = manager.Palette; var palettes = new byte[paletteTextures.Length][]; var width = paletteTextures[0].width; var height = paletteTextures[0].height; var bufferLength = width * height; for (int i = 0; i < paletteTextures.Length; i++) { FillPaletteBuffer(i); palettes[i] = paletteBuffer; for (int j = 0; j < bufferLength; j++) { paletteBuffers[i][j] = palette[palettes[i][j]]; } var nativePaletteTexture = paletteTextures[i].GetRawTextureData <Color32>(); var nativePaletteBuffer = new NativeArray <Color32>(paletteBuffers[i], Allocator.Temp); nativePaletteBuffer.CopyTo(nativePaletteTexture); nativePaletteBuffer.Dispose(); paletteTextures[i].Apply(false); } } if (patternImages != null) { var palette = manager.Palette; var patternTables = new byte[patternTextures.Length][, ]; var width = patternTextures[0].width; var height = patternTextures[0].height; var bufferLength = width * height; for (int i = 0; i < patternTextures.Length; i++) { FillPatternBuffer(i); patternTables[i] = patternBuffer; for (int j = 0; j < bufferLength; j++) { patternBuffers[i][j] = palette[patternTables[i][j % width, height - j / width - 1]]; } var nativePatternTexture = patternTextures[i].GetRawTextureData <Color32>(); var nativePatternBuffer = new NativeArray <Color32>(patternBuffers[i], Allocator.Temp); nativePatternBuffer.CopyTo(nativePatternTexture); nativePatternBuffer.Dispose(); patternTextures[i].Apply(false); } } if (oamText != null) { oamBuilder.Clear(); for (int i = 0; i < 64; i++) { var oamSprite = ppu.GetOamSprite(i); oamBuilder.Append($"{i,2} X:{oamSprite.x,3} Y:{oamSprite.y,3} I:{(byte)oamSprite.tileIndex:X2} A:{(byte)oamSprite.attributes:X2}\n"); } oamText.text = oamBuilder.ToString(); } if (framesText != null) { framesText.text = $"Frames:{ppu.TotalFrames}"; } }