On 23.08.2013 15:05, Bram de Greve wrote: > This surely looks interesting. I've been looking for something like this > for my own little toy-raytracer (liar.bramz.net). > For this you implemented a C extension module that's loaded in Blender > as part of your add-on?
Yes, pylux is a binary python module (called "pylux"). It's implemented almost exclusively using Boost.Python, the only direct Python C stuff is the buffer things I added now. The source code is available under the GPL license here: https://bitbucket.org/luxrender/lux/src/tip/python?at=default The buffer specific code is here: https://bitbucket.org/luxrender/lux/src/0c11e6bf3765c26d16039cb8c4dd59a6886d6013/python/pycontext.h?at=default#cl-234 This object wraps the buffer stuff, and is used in PyContex::blenderCombinedDepthBuffers(). The Blender python plugin code is here: https://bitbucket.org/luxrender/luxblend25/src/9beea7f187d76b432c15505e322ccc556cb37a6b/src/luxrender/outputs/__init__.py?at=default#cl-115 In essence it's just result = render_engine.begin_result(0, 0, xres, yres) pb, zb = pylux.blenderCombinedDepthBuffers() # get buffer objects result.layers.foreach_set("rect", pb) # rgba pixels result.layers[0].passes.foreach_set("rect", zb) # zbuffer render_engine.end_result(result) So far we only support this for a single layer with a single pass. Please note that this was the very first time I've done anything Python C api stuff, and also the very first time I've done anything non-trivial with Boost.Python (I did not write the initial pylux code), so there's probably some silly stuff in there :) Just ask if you have any questions. Cheers - Asbjørn _______________________________________________ Bf-python mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-python
