LINUX.ORG.RU

Luxrender 1.6 и новый Python 3.7.2


0

1

Да, некрокомпиляция, но просто интересно стало (у друга такой же рендер под Вин, а я уже собрал 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) )); я и закомментировал .... иначе вообще не собиралось....

Может кто подскажет, что делать?

может быть как-то возможно запустить этот pylux не со встроенным в блендер питоном, а с внешним? какие-нибудь переменные окружения ему задать или либы подменить. но я так понял там через boost::python сделано, который, скорее всего, тоже с того времени сильно менялся, так что его тоже надо брать соответствующий.

или может при сборке указать, чтобы оно искало либы конкретных версий?

а править исходники может быть очень затратным делом.

anonymous ()
Ответ на: комментарий от anonymous

может быть как-то возможно запустить этот pylux не со встроенным в блендер питоном, а с внешним?

Так я вроде и линковал с внешним - без опции для линковщика -lpython3.7 оно не собиралось :} А блендер при сборке вроде сам в себя питон (системный) втянул ....

Andrew-R ★★★ ()