private byte[][] RenderLCM(byte[][] vpmFrame) { var frame_count = LCMBufferPlanes.Count; byte[][] outplanes; outplanes = new byte[frame_count][]; if (SwitchMode == SwitchMode.LayeredColorMask) { for (int i = 0; i < vpmFrame.Length; i++) { outplanes[i] = vpmFrame[i]; } for (int i = vpmFrame.Length; i < frame_count; i++) { outplanes[i] = LCMBufferPlanes[i]; } } if (SwitchMode == SwitchMode.MaskedReplace) { if (LCMBufferPlanes[0].Length == vpmFrame[0].Length * 4) { if (ScalerMode == ScalerMode.Doubler) { vpmFrame = FrameUtil.Scale2(Width, Height, vpmFrame); } else { vpmFrame = FrameUtil.Scale2x(Width, Height, vpmFrame); } } for (int i = 0; i < frame_count; i++) { if (i < vpmFrame.Length) { outplanes[i] = FrameUtil.CombinePlaneWithMask(LCMBufferPlanes[i], vpmFrame[i], ReplaceMask); } else { outplanes[i] = LCMBufferPlanes[i]; } } } return(outplanes); }