Пример #1
0
        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);
        }
Пример #2
0
        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);
        }