New Cross-Platform 2D Framebuffer

Cross Platform Framebuffer

BRL-CAD displays its raytracing output as it is generated by using a framebuffer. Currently BRL-CAD has specific framebuffers for X11 Opengl (ogl), Windows OpenGL (wgl), and raw X11 (X), in addition to a variety of more special purpose and experimental framebuffers. A single, high performance, cross platform framebuffer is of interest to BRL-CAD.

This task, rather than being specific to Qt or OGRE, would invite suggestions for a cross platform framebuffer implementation - either utilizing existing, license compatible open source code or writing from scratch. A possible candidate would be the pxCore library: http://code.google.com/p/pxcore/

Distinct from the Qt framebuffer, a custom solution would ideally be implemented in such a way that it can be embedded into a Tk window and be a "drop in replacement" for existing graphical framebuffers on multiple platforms.

  1. Review current framebuffer code and related code (in particular, isst) to identify features needed for a framebuffer
  2. Identify approach (pxCore, all custom code, etc)
  3. Implement working code, including:
    • per-scan-line drawing - display update should not have to wait for a completed raytrace
    • good drawing performance - a fast raytrace should display quickly, not have to wait for framebuffer drawing to catch up
    • keyboard and mouse input (there is some)
  4. Can start development with reading in lines from a pix file instead of hooking in the raytracer in order to optimize display performance, but should progress to using the raytracer.
  5. Testing (ideally cross platform) - load a .g model, raytrace it and display the results. Ideally integrated into MGED.

A good proposal for this task will need to spell out a fair number of specifics and should do some homework - "research and implement framebuffer code" would be a weak submission. The X11 framebuffer (if_X24.c) would be good code to review when developing a proposal for this task.

Requirements:

  • Familiarity with C and C++
  • (optional) Familiarity with cross platform graphical drawing APIs and issues

Difficulty: low/medium