Да, некрокомпиляция, но просто интересно стало (у друга такой же рендер под Вин, а я уже собрал Blender 2.79b под новый питон .. пересобирать всё (python, boost, blender + deps, lux) сильно не хочется, а превьюшки материала были бы полезны .... Они делаются через pylux который по умолчанию не собирается на новом Питоне, ругаясь на pyobject в недрах Lux-16/python/pycontext.h
Лукс брал отсюда:
https://github.com/LuxRender/Lux/releases До этого естественно сам LuxRender-1.6 и все его зависимости ....
Собрать-то я его собрал (на boost-1.69), но вот именно с питонобиндингами проблема ..
я пробовал тупо заменить pyContex на pyContext_lux, но что-то я запутался, и всё равно он на одну строчку ругался, а когда я её закомментировал - файлы so получались загружаемые, но превьюхи всё равно не было ;} Ну и Блендер на выходе намертво вис ...
class pyContext_lux
{
public:
pyContext_lux(std::string _name)
{
//System wide init
boost::call_once(&luxInit, luxInitFlag);
//Here we create a new context
name = _name;
createNewContext(_name);
// LOG(LUX_INFO,LUX_NOERROR)<<"Created new context : '"<<name<<"'";
}
~pyContext_lux()
{
//destroy threads
BOOST_FOREACH(boost::thread *t,pyLuxWorldEndThreads)
{
delete(t);
}
pyLuxWorldEndThreads.clear();
// Close any active net connections
boost::python::list server_list( getRenderingServersStatus() );
for(boost::python::ssize_t n=0; n<boost::python::len(server_list); n++)
{
RenderingServerInfo RSI = boost::python::extract<RenderingServerInfo>(server_list[n]);
context->RemoveServer( RSI );
}
// free the context
delete context;
context = NULL;
}
и ниже
void motionInstance(const char *name, float startTime, float endTime, const char *toTransform)
{
checkActiveContext();
context->MotionInstance(std::string(name), startTime, endTime, std::string(toTransform));
}
void worldEnd() //launch luxWorldEnd() into a thread
{
checkActiveContext();
//pyLuxWorldEndThreads.push_back(new boost::thread( boost::bind(&PyContext::pyWorldEnd, this) ));
}
void loadFLM(const char* name)
{
checkActiveContext();
context->LoadFLM(std::string(name));
}
Вот эту строчку //pyLuxWorldEndThreads.push_back(new boost::thread( boost::bind(&PyContext::pyWorldEnd, this) )); я и закомментировал .... иначе вообще не собиралось....
Может кто подскажет, что делать?