Blender V5.0
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
17namespace blender::gpu {
18class Shader;
19} // namespace blender::gpu
20
21struct GPUShaderCreateInfo;
22struct GPUStageInterfaceInfo;
23
24/* Make sure that there is always a reference count for PyObjects of type String as the strings are
25 * passed by reference in the #GPUStageInterfaceInfo and #GPUShaderCreateInfo APIs. */
26#define USE_GPU_PY_REFERENCES
27
28/* `gpu_py_shader.cc` */
29
30extern PyTypeObject BPyGPUShader_Type;
31
32#define BPyGPUShader_Check(v) (Py_TYPE(v) == &BPyGPUShader_Type)
33
35 PyObject_VAR_HEAD
38};
39
40[[nodiscard]] PyObject *BPyGPUShader_CreatePyObject(blender::gpu::Shader *shader, bool is_builtin);
41[[nodiscard]] PyObject *bpygpu_shader_init();
42
43/* gpu_py_shader_create_info.cc */
44
45extern const struct PyC_StringEnumItems pygpu_attrtype_items[];
46extern PyTypeObject BPyGPUShaderCreateInfo_Type;
47extern PyTypeObject BPyGPUStageInterfaceInfo_Type;
48
49#define BPyGPUShaderCreateInfo_Check(v) (Py_TYPE(v) == &BPyGPUShaderCreateInfo_Type)
50#define BPyGPUStageInterfaceInfo_Check(v) (Py_TYPE(v) == &BPyGPUStageInterfaceInfo_Type)
51
53 PyObject_VAR_HEAD
54 GPUStageInterfaceInfo *interface;
55#ifdef USE_GPU_PY_REFERENCES
56 /* Just to keep a user to prevent freeing buffers we're using. */
57 PyObject *references;
58#endif
59};
60
62 PyObject_VAR_HEAD
63 GPUShaderCreateInfo *info;
64#ifdef USE_GPU_PY_REFERENCES
65 /* Just to keep a user to prevent freeing buffers we're using. */
66 PyObject *vertex_source;
67 PyObject *fragment_source;
68 PyObject *compute_source;
69 PyObject *typedef_source;
70 PyObject *references;
71#endif
73};
74
75[[nodiscard]] PyObject *BPyGPUStageInterfaceInfo_CreatePyObject(GPUStageInterfaceInfo *interface);
76[[nodiscard]] PyObject *BPyGPUShaderCreateInfo_CreatePyObject(GPUShaderCreateInfo *info);
77[[nodiscard]] bool bpygpu_shader_is_polyline(blender::gpu::Shader *shader);
PyTypeObject BPyGPUShader_Type
PyObject * BPyGPUShaderCreateInfo_CreatePyObject(GPUShaderCreateInfo *info)
bool bpygpu_shader_is_polyline(blender::gpu::Shader *shader)
PyTypeObject BPyGPUStageInterfaceInfo_Type
const struct PyC_StringEnumItems pygpu_attrtype_items[]
PyObject * bpygpu_shader_init()
PyObject * BPyGPUStageInterfaceInfo_CreatePyObject(GPUStageInterfaceInfo *interface)
PyObject * BPyGPUShader_CreatePyObject(blender::gpu::Shader *shader, bool is_builtin)
PyTypeObject BPyGPUShaderCreateInfo_Type
#define interface
PyObject_VAR_HEAD GPUShaderCreateInfo * info
PyObject_VAR_HEAD blender::gpu::Shader * shader
PyObject_VAR_HEAD GPUStageInterfaceInfo * interface