33 PyErr_SetString(PyExc_ReferenceError,
35 "GPU uniform buffer was freed, no further access is valid");
38 "GPU uniform buffer: internal error");
45#define BPYGPU_UNIFORMBUF_CHECK_OBJ(bpygpu) \
47 if (UNLIKELY(pygpu_uniformbuffer_valid_check(bpygpu) == -1)) { \
65 GPUUniformBuf *ubo =
nullptr;
66 PyObject *pybuffer_obj;
67 char err_out[256] =
"unknown error. See console";
69 static const char *_keywords[] = {
"data",
nullptr};
70 static _PyArg_Parser _parser = {
73 ":GPUUniformBuf.__new__",
77 if (!_PyArg_ParseTupleAndKeywordsFast(args, kwds, &_parser, &pybuffer_obj)) {
82 STRNCPY(err_out,
"No active GPU context found");
86 if (PyObject_GetBuffer(pybuffer_obj, &pybuffer, PyBUF_SIMPLE) == -1) {
91 if ((pybuffer.len % 16) != 0) {
92 STRNCPY(err_out,
"UBO is not padded to size of vec4");
97 PyBuffer_Release(&pybuffer);
100 if (ubo ==
nullptr) {
101 PyErr_Format(PyExc_RuntimeError,
"GPUUniformBuf.__new__(...) failed with '%s'", err_out);
110 pygpu_uniformbuffer_update_doc,
111 ".. method:: update(data)\n"
113 " Update the data of the uniform buffer object.\n");
119 if (PyObject_GetBuffer(obj, &pybuffer, PyBUF_SIMPLE) == -1) {
125 PyBuffer_Release(&pybuffer);
129#ifdef BPYGPU_USE_GPUOBJ_FREE_METHOD
132 pygpu_uniformbuffer_free_doc,
133 ".. method::free()\n"
135 " Free the uniform buffer object.\n"
136 " The uniform buffer object will no longer be accessible.\n");
152 Py_TYPE(
self)->tp_free((PyObject *)
self);
156 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr}
161#ifdef BPYGPU_USE_GPUOBJ_FREE_METHOD
162 {
"free", (PyCFunction)pygpu_uniformbuffer_free, METH_NOARGS, pygpu_uniformbuffer_free_doc},
164 {
nullptr,
nullptr, 0,
nullptr},
169 pygpu_uniformbuffer__tp_doc,
170 ".. class:: GPUUniformBuf(data)\n"
172 " This object gives access to off uniform buffers.\n"
174 " :arg data: Data to fill the buffer.\n"
175 " :type data: object exposing buffer interface\n");
177 PyVarObject_HEAD_INIT(
nullptr, 0)
197 pygpu_uniformbuffer__tp_doc,
241 return (PyObject *)
self;
246#undef BPYGPU_UNIFORMBUF_CHECK_OBJ
#define STRNCPY(dst, src)
GPUContext * GPU_context_active_get()
#define BPYGPU_IS_INIT_OR_ERROR_OBJ
#define BPYGPU_USE_GPUOBJ_FREE_METHOD
header-only compatibility defines.
#define PY_ARG_PARSER_HEAD_COMPAT()