I just realized that my laptop's GPU has been a SM3.0 capable one all along. I have learnt about using programmable graphics pipeline this year itself. I am drooling at the thought of running vertex and pixel shaders (I am going to call fragment shaders as pixel shaders only) of my own. OK it is not a top of the line GPU, but hey, better than none.
When I first learnt graphics programming, it was using the lowly Turbo C++'s graphis capabilities. Then I moved onto OpenGL 1.1. I wrote a demo using display lists and stuff but then it seemed that it was more than enough for anything that I might need.
Then I discovered the joys of programmble graphics pipeline. It appeared to combine the power of Turbo C++'s low level and highly flexible power with the SGI's grpahics pipeline's inherent advantages.
Now, my Geforce 6150 (I never said it was top of the line) is ready to serve me in my pursuit of crazy shaders. Of course, I'll start small and then I plan to move the control into Python and leave the hevy lifting to C.
This also appears to be a great place to move into multithreading. Raw pthreads from C seems unwise. I would prefer to orchestrate the entire stuff from Python. Atleast the loading/storing of textures is anticipated to be simple enough. This also is a place where multithreading can help hide latencies.
Now I found the DevIL library for loading it seems very nice. Though I don't know if it is thread-safe. I hate it when I open docs for some library, only to find that it is not threadsafe. It is essential for concurrency that the libraries be threadsafe.