Fix #104061: RenderEngine Python example does not work in background mode
And add example of how to use bl_use_gpu_context.
This commit is contained in:
parent
7e9b580546
commit
1fec22e350
@ -5,8 +5,6 @@ Simple Render Engine
|
||||
|
||||
import bpy
|
||||
import array
|
||||
import gpu
|
||||
from gpu_extras.presets import draw_texture_2d
|
||||
|
||||
|
||||
class CustomRenderEngine(bpy.types.RenderEngine):
|
||||
@ -95,6 +93,10 @@ class CustomRenderEngine(bpy.types.RenderEngine):
|
||||
# Blender will draw overlays for selection and editing on top of the
|
||||
# rendered image automatically.
|
||||
def view_draw(self, context, depsgraph):
|
||||
# Lazily import GPU module, so that the render engine works in
|
||||
# background mode where the GPU module can't be imported by default.
|
||||
import gpu
|
||||
|
||||
region = context.region
|
||||
scene = depsgraph.scene
|
||||
|
||||
@ -116,6 +118,8 @@ class CustomRenderEngine(bpy.types.RenderEngine):
|
||||
|
||||
class CustomDrawData:
|
||||
def __init__(self, dimensions):
|
||||
import gpu
|
||||
|
||||
# Generate dummy float image buffer
|
||||
self.dimensions = dimensions
|
||||
width, height = dimensions
|
||||
@ -134,6 +138,7 @@ class CustomDrawData:
|
||||
del self.texture
|
||||
|
||||
def draw(self):
|
||||
from gpu_extras.presets import draw_texture_2d
|
||||
draw_texture_2d(self.texture, (0, 0), self.texture.width, self.texture.height)
|
||||
|
||||
|
36
doc/python_api/examples/bpy.types.RenderEngine.2.py
Normal file
36
doc/python_api/examples/bpy.types.RenderEngine.2.py
Normal file
@ -0,0 +1,36 @@
|
||||
"""
|
||||
GPU Render Engine
|
||||
+++++++++++++++++
|
||||
"""
|
||||
|
||||
import bpy
|
||||
|
||||
|
||||
class CustomGPURenderEngine(bpy.types.RenderEngine):
|
||||
bl_idname = "CUSTOM_GPU"
|
||||
bl_label = "Custom GPU"
|
||||
|
||||
# Request a GPU context to be created and activated for the render method.
|
||||
# This may be used either to perform the rendering itself, or to allocate
|
||||
# and fill a texture for more efficient drawing.
|
||||
bl_use_gpu_context = True
|
||||
|
||||
def render(self, depsgraph):
|
||||
# Lazily import GPU module, since GPU context is only created on demand
|
||||
# for rendering and does not exist on register.
|
||||
import gpu
|
||||
|
||||
# Perform rendering task.
|
||||
pass
|
||||
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(CustomGPURenderEngine)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(CustomGPURenderEngine)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
Loading…
Reference in New Issue
Block a user