Hello Blender Hack: bpy.app.ocio.supportedの値を変更してみる
はじめに
Blenderにごく簡単な修正をして、修正が反映されるのを確認する実験をしてみます。 修正自体は、何も面白くないですが、BlenderのHackingの第一歩としては意義があると思います。
使用したコード
master (af940c68cbed7e840d6ae58f2645ff12ed6abffb) 2.93.0を使用しました。
修正前の挙動の確認
Blenderの組み込みPythonシェルで以下を評価するとTrue
が返りました。
>>> bpy.app.ocio.supported True
挙動に対応するコード
source/blender/python/intern/bpy_app_ocio.c
にbpy.app.ocio
をセットするコードが見つかりました。
ローカル変数pos
をインクリメントしながら、プロパティを順番にセットしているようです。
SetObjItem(PyBool_FromLong(1));
でbpy.app.ocio.supported
がTrue
を返すように実装していそうです。
static PyObject *make_ocio_info(void) { PyObject *ocio_info; int pos = 0; #ifdef WITH_OCIO int curversion; #endif ocio_info = PyStructSequence_New(&BlenderAppOCIOType); if (ocio_info == NULL) { return NULL; } #ifndef WITH_OCIO # define SetStrItem(str) PyStructSequence_SET_ITEM(ocio_info, pos++, PyUnicode_FromString(str)) #endif #define SetObjItem(obj) PyStructSequence_SET_ITEM(ocio_info, pos++, obj) #ifdef WITH_OCIO curversion = OCIO_getVersionHex(); SetObjItem(PyBool_FromLong(1)); SetObjItem( PyC_Tuple_Pack_I32(curversion >> 24, (curversion >> 16) % 256, (curversion >> 8) % 256)); SetObjItem(PyUnicode_FromFormat( "%2d, %2d, %2d", curversion >> 24, (curversion >> 16) % 256, (curversion >> 8) % 256)); #else SetObjItem(PyBool_FromLong(0)); SetObjItem(PyC_Tuple_Pack_I32(0, 0, 0)); SetStrItem("Unknown"); #endif if (PyErr_Occurred()) { Py_CLEAR(ocio_info); return NULL; } #undef SetStrItem #undef SetObjItem return ocio_info; }
コードの修正
そこで以下のように修正します。0
をセットすることでFalse
を返すようになるのではと考えました。
% git diff diff --git a/source/blender/python/intern/bpy_app_ocio.c b/source/blender/python/intern/bpy_app_ocio.c index 3a36e90018f..125f03e2a52 100644 --- a/source/blender/python/intern/bpy_app_ocio.c +++ b/source/blender/python/intern/bpy_app_ocio.c @@ -70,7 +70,7 @@ static PyObject *make_ocio_info(void) #ifdef WITH_OCIO curversion = OCIO_getVersionHex(); - SetObjItem(PyBool_FromLong(1)); + SetObjItem(PyBool_FromLong(0)); SetObjItem( PyC_Tuple_Pack_I32(curversion >> 24, (curversion >> 16) % 256, (curversion >> 8) % 256)); SetObjItem(PyUnicode_FromFormat(
修正結果の確認
修正後、Xcodeでビルドと実行します。
Blender組み込みのPythonシェルで確認すると、予想通りbpy.app.ocio.supported
がFalse
を返すようになりました。