Graphics Pipeline Overview
- Receive PDU - Graphics update arrives from server
- Decode - Decompress and decode using appropriate codec
- Update Image - Apply decoded pixels to framebuffer
- Render - Display the updated framebuffer
Supported Codecs
IronRDP supports these graphics codecs (defined inironrdp-graphics):
- Uncompressed Bitmap - Raw pixel data
- RLE (Run-Length Encoding) - Interleaved RLE compression
- RDP 6.0 Bitmap Compression - Advanced RDP compression
- RemoteFX (RFX) - Microsoft’s advanced codec with DWT
- ZGFX - Bulk compression for graphics
Image Buffer Management
Creating a Decoded Image
Pixel Formats
Accessing Image Data
Processing Graphics Updates
Active Stage Integration
TheActiveStage automatically handles graphics decoding:
Manual Graphics Decoding
For advanced scenarios, decode graphics manually:RemoteFX Decoding
RemoteFX uses wavelet-based compression for high-quality graphics:Enabling RemoteFX on Windows Server
Run these PowerShell commands and reboot:gpedit.msc):
- Enable:
Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/RemoteFX for Windows Server 2008 R2/Configure RemoteFX - Enable:
Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Enable RemoteFX encoding for RemoteFX clients designed for Windows Server 2008 R2 SP1 - Reboot
Compression Types
Configuring Client Compression
Rendering Backends
Software Rendering (softbuffer)
IronRDP’sironrdp-client uses softbuffer for portable software rendering:
GPU Rendering (custom)
For GPU-accelerated rendering, upload the decoded image to a texture:HTML5 Canvas (WebAssembly)
For web clients, render to HTML5 Canvas:Optimizing Graphics Performance
Dirty Rectangle Tracking
Only redraw changed regions:Frame Rate Limiting
Double Buffering
Color Space Conversion
Server-side Graphics
When building an RDP server, generate graphics updates:Troubleshooting
Graphics Not Updating
- Check
ActiveStageOutput::GraphicsUpdateis being handled - Verify image buffer is being rendered after updates
- Enable logging:
IRONRDP_LOG=trace
Color Corruption
- Verify pixel format matches between decoder and renderer
- Check byte order (RGB vs BGR)
- Ensure stride is calculated correctly
Performance Issues
- Use appropriate compression level
- Implement dirty rectangle tracking
- Limit frame rate to display refresh rate
- Consider GPU acceleration for large resolutions
Next Steps
- Building a Client - Integrate graphics rendering
- Building a Server - Generate graphics updates
- WebAssembly - Render in web browsers

