I need a version of the [MSDN Desktop Duplication API demo code] that, instead of just re-rendering from its GPU buffer back onto the screen, downloads the buffer to the CPU and makes it accessible to some C# code for further processing.
I'll accept bids against just that functionality. It should be easy for anyone who knows DirectX. (I don't.)
I'd also like a solution that would:
1. Conserve GPU -> CPU bandwidth by offering the choice of downsampling color to 256 colors OR 4-bit-per-pixel greyscale on the GPU before moving it to the CPU,
2. Conserve GPU -> CPU bandwidth by only downloading dirty rects and rect-move info on each frame,
3. Allow the C# code to lower the frame rate if it wants to,
4. Use double buffering to avoid stalls, and
5. Let the C# code know the coordinates of the pointer for each frame (the coordinates are already known in the MSDN sample; just pass them to C#).
Let me know in your bid which of the five above OPTIONAL features your bid includes. Once I accept your bid those features will be required from your solution.
I'm flexible regarding how the C# code will get its data. The MSDN code is in C++. Maybe the best solution is a mixed C++/.NET assembly; maybe it's an unmanaged C++ DLL and a managed C# app that loads + invokes the C++; maybe it's all C# and we use SlimDX. Let me know in your bid what you think the best strategy is, though we may agree to change it once things get going.
Finally, I'm open to doing a hybrid fixed + hourly arrangement. You would bid for the basic C# GPU -> CPU piece, and if I accept your bid and that goes well, we could switch to an hourly rate for the other features. If you'd like to do this, state so explicitly in your bid, and include your hourly rate. Either way there may be other related work that we could do on an hourly basis after this project.