Blender V4.5
gpu_py_shader.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include <Python.h>
12
13#ifndef __cplusplus
15#endif
16
17struct GPUShaderCreateInfo;
18struct GPUStageInterfaceInfo;
19
20/* Make sure that there is always a reference count for PyObjects of type String as the strings are
21 * passed by reference in the #GPUStageInterfaceInfo and #GPUShaderCreateInfo APIs. */
22#define USE_GPU_PY_REFERENCES
23
24/* `gpu_py_shader.cc` */
25
26extern PyTypeObject BPyGPUShader_Type;
27
28#define BPyGPUShader_Check(v) (Py_TYPE(v) == &BPyGPUShader_Type)
29
31 PyObject_VAR_HEAD
32 struct GPUShader *shader;
34};
35
36PyObject *BPyGPUShader_CreatePyObject(struct GPUShader *shader, bool is_builtin);
37PyObject *bpygpu_shader_init();
38
39/* gpu_py_shader_create_info.cc */
40
41extern const struct PyC_StringEnumItems pygpu_attrtype_items[];
42extern PyTypeObject BPyGPUShaderCreateInfo_Type;
43extern PyTypeObject BPyGPUStageInterfaceInfo_Type;
44
45#define BPyGPUShaderCreateInfo_Check(v) (Py_TYPE(v) == &BPyGPUShaderCreateInfo_Type)
46#define BPyGPUStageInterfaceInfo_Check(v) (Py_TYPE(v) == &BPyGPUStageInterfaceInfo_Type)
47
49 PyObject_VAR_HEAD
50 GPUStageInterfaceInfo *interface;
51#ifdef USE_GPU_PY_REFERENCES
52 /* Just to keep a user to prevent freeing buffers we're using. */
53 PyObject *references;
54#endif
55};
56
58 PyObject_VAR_HEAD
59 GPUShaderCreateInfo *info;
60#ifdef USE_GPU_PY_REFERENCES
61 /* Just to keep a user to prevent freeing buffers we're using. */
62 PyObject *vertex_source;
63 PyObject *fragment_source;
64 PyObject *compute_source;
65 PyObject *typedef_source;
66 PyObject *references;
67#endif
69};
70
71PyObject *BPyGPUStageInterfaceInfo_CreatePyObject(GPUStageInterfaceInfo *interface);
72PyObject *BPyGPUShaderCreateInfo_CreatePyObject(GPUShaderCreateInfo *info);
73bool bpygpu_shader_is_polyline(GPUShader *shader);
#define interface
PyTypeObject BPyGPUShader_Type
PyObject * BPyGPUShaderCreateInfo_CreatePyObject(GPUShaderCreateInfo *info)
bool bpygpu_shader_is_polyline(GPUShader *shader)
PyTypeObject BPyGPUStageInterfaceInfo_Type
const struct PyC_StringEnumItems pygpu_attrtype_items[]
PyObject * bpygpu_shader_init()
PyObject * BPyGPUStageInterfaceInfo_CreatePyObject(GPUStageInterfaceInfo *interface)
PyObject * BPyGPUShader_CreatePyObject(struct GPUShader *shader, bool is_builtin)
PyTypeObject BPyGPUShaderCreateInfo_Type
PyObject_VAR_HEAD GPUShaderCreateInfo * info
PyObject_VAR_HEAD struct GPUShader * shader
PyObject_VAR_HEAD GPUStageInterfaceInfo * interface