diff --git a/source/blender/python/intern/CMakeLists.txt b/source/blender/python/intern/CMakeLists.txt index 3ea3f760951..8d2661f8c6f 100644 --- a/source/blender/python/intern/CMakeLists.txt +++ b/source/blender/python/intern/CMakeLists.txt @@ -48,6 +48,7 @@ set(SRC gpu.c gpu_offscreen.c gpu_py_matrix.c + gpu_py_select.c bpy.c bpy_app.c bpy_app_alembic.c diff --git a/source/blender/python/intern/gpu.c b/source/blender/python/intern/gpu.c index be2c6b3caab..d3453c94450 100644 --- a/source/blender/python/intern/gpu.c +++ b/source/blender/python/intern/gpu.c @@ -338,6 +338,10 @@ PyObject *GPU_initPython(void) PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), submodule); Py_INCREF(submodule); + PyModule_AddObject(module, "select", (submodule = BPyInit_gpu_select())); + PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), submodule); + Py_INCREF(submodule); + PyDict_SetItem(PyImport_GetModuleDict(), PyModule_GetNameObject(module), module); return module; } diff --git a/source/blender/python/intern/gpu.h b/source/blender/python/intern/gpu.h index c6fc5e41c47..92841db9027 100644 --- a/source/blender/python/intern/gpu.h +++ b/source/blender/python/intern/gpu.h @@ -38,5 +38,6 @@ PyObject *GPU_initPython(void); PyObject *BPyInit_gpu_offscreen(void); PyObject *BPyInit_gpu_matrix(void); +PyObject *BPyInit_gpu_select(void); #endif /* __GPU_H__ */ diff --git a/source/blender/python/intern/gpu_py_select.c b/source/blender/python/intern/gpu_py_select.c new file mode 100644 index 00000000000..f570c4cdae2 --- /dev/null +++ b/source/blender/python/intern/gpu_py_select.c @@ -0,0 +1,92 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/python/intern/gpu_py_select.c + * \ingroup pythonintern + * + * This file defines the gpu.select API. + * + * \note Currently only used for manipulator selection, + * will need to add begin/end and a way to access the hits. + */ + +#include + +#include "BLI_utildefines.h" + +#include "../generic/py_capi_utils.h" + +#include "gpu.h" + +#include "GPU_select.h" + +/* -------------------------------------------------------------------- */ +/** \name Methods + * \{ */ + +PyDoc_STRVAR(pygpu_select_load_id_doc, +"load_id(id)\n" +"\n" +" Set the selection ID.\n" +"\n" +" :param id: Number (32-bit unsigned int).\n" +" :type select: int\n" +); +static PyObject *pygpu_select_load_id(PyObject *UNUSED(self), PyObject *value) +{ + uint id; + if ((id = PyC_Long_AsU32(value)) == (uint)-1) { + return NULL; + } + GPU_select_load_id(id); + Py_RETURN_NONE; +} +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Module + * \{ */ + +static struct PyMethodDef BPy_GPU_select_methods[] = { + /* Manage Stack */ + {"load_id", (PyCFunction)pygpu_select_load_id, METH_O, pygpu_select_load_id_doc}, + {NULL, NULL, 0, NULL} +}; + +PyDoc_STRVAR(BPy_GPU_select_doc, +"This module provides access to selection." +); +static PyModuleDef BPy_GPU_select_module_def = { + PyModuleDef_HEAD_INIT, + .m_name = "gpu.select", + .m_doc = BPy_GPU_select_doc, + .m_methods = BPy_GPU_select_methods, +}; + +PyObject *BPyInit_gpu_select(void) +{ + PyObject *submodule; + + submodule = PyModule_Create(&BPy_GPU_select_module_def); + + return submodule; +} + +/** \} */