pyGPU: Port 'StageInterfaceInfo' and 'ShaderCreateInfo' types
In order to allow GLSL Cross Compilation across platforms, expose in Python the `GPUShaderCreateInfo` strategy as detailed in https://wiki.blender.org/wiki/EEVEE_%26_Viewport/GPU_Module/GLSL_Cross_Compilation The new features can be listed as follows: ``` >>> gpu.types.GPUShaderCreateInfo. define( fragment_out( fragment_source( push_constant( sampler( typedef_source( uniform_buf( vertex_in( vertex_out( vertex_source( >>> gpu.types.GPUStageInterfaceInfo. flat( name no_perspective( smooth( >>> gpu.shader.create_from_info( ``` Reviewed By: fclem, campbellbarton Differential Revision: https://developer.blender.org/D14497
This commit is contained in:
@@ -831,6 +831,38 @@ static PyObject *pygpu_shader_code_from_builtin(BPyGPUShader *UNUSED(self), PyOb
|
||||
return r_dict;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(pygpu_shader_create_from_info_doc,
|
||||
".. function:: create_from_info(shader_info)\n"
|
||||
"\n"
|
||||
" Create shader from a GPUShaderCreateInfo.\n"
|
||||
"\n"
|
||||
" :param shader_info: GPUShaderCreateInfo\n"
|
||||
" :type shader_info: :class:`bpy.types.GPUShaderCreateInfo`\n"
|
||||
" :return: Shader object corresponding to the given name.\n"
|
||||
" :rtype: :class:`bpy.types.GPUShader`\n");
|
||||
static PyObject *pygpu_shader_create_from_info(BPyGPUShader *UNUSED(self),
|
||||
BPyGPUShaderCreateInfo *o)
|
||||
{
|
||||
if (!BPyGPUShaderCreateInfo_Check(o)) {
|
||||
PyErr_Format(PyExc_TypeError, "Expected a GPUShaderCreateInfo, got %s", Py_TYPE(o)->tp_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char error[128];
|
||||
if (!GPU_shader_create_info_check_error(o->info, error)) {
|
||||
PyErr_SetString(PyExc_Exception, error);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GPUShader *shader = GPU_shader_create_from_info(o->info);
|
||||
if (!shader) {
|
||||
PyErr_SetString(PyExc_Exception, "Shader Compile Error, see console for more details");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return BPyGPUShader_CreatePyObject(shader, false);
|
||||
}
|
||||
|
||||
static struct PyMethodDef pygpu_shader_module__tp_methods[] = {
|
||||
{"unbind", (PyCFunction)pygpu_shader_unbind, METH_NOARGS, pygpu_shader_unbind_doc},
|
||||
{"from_builtin",
|
||||
@@ -841,6 +873,10 @@ static struct PyMethodDef pygpu_shader_module__tp_methods[] = {
|
||||
(PyCFunction)pygpu_shader_code_from_builtin,
|
||||
METH_O,
|
||||
pygpu_shader_code_from_builtin_doc},
|
||||
{"create_from_info",
|
||||
(PyCFunction)pygpu_shader_create_from_info,
|
||||
METH_O,
|
||||
pygpu_shader_create_from_info_doc},
|
||||
{NULL, NULL, 0, NULL},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user