public static IMemoryReaderWriter getImageWriter(int address, int width, int bufferWidth, int pixelFormat) { int step = pspsharp.graphics.RE.IRenderingEngine_Fields.sizeOfTextureType[pixelFormat]; IMemoryReaderWriter imageWriter = MemoryReaderWriter.getMemoryReaderWriter(address, step); switch (pixelFormat) { case GeCommands.TPSM_PIXEL_STORAGE_MODE_16BIT_ABGR4444: imageWriter = new PixelFormat4444Encoder(imageWriter); break; case GeCommands.TPSM_PIXEL_STORAGE_MODE_16BIT_ABGR5551: imageWriter = new PixelFormat5551Encoder(imageWriter); break; case GeCommands.TPSM_PIXEL_STORAGE_MODE_16BIT_BGR5650: imageWriter = new PixelFormat565Encoder(imageWriter); break; case GeCommands.TPSM_PIXEL_STORAGE_MODE_32BIT_ABGR8888: // We can use directly the MemoryReaderWriter, no format convertion needed. break; case BaseRenderer.depthBufferPixelFormat: // We can use directly the MemoryReaderWriter, no format convertion needed. break; } if (bufferWidth > width) { imageWriter = new MemoryImageWriter(imageWriter, width, bufferWidth); } return(imageWriter); }
public override int ioRead(TPointer outputPointer, int outputLength) { int readLength = base.ioRead(outputPointer, outputLength); if (readLength > 0) { IMemoryReaderWriter memoryReaderWriter = MemoryReaderWriter.getMemoryReaderWriter(outputPointer.Address, readLength, 1); for (int i = 0; i < readLength; i++) { int value = memoryReaderWriter.readCurrent(); value ^= xor; memoryReaderWriter.writeNext(value); } memoryReaderWriter.flush(); } return(readLength); }