Skip to content

Blender 2.93: Python API

Python 3.9

Python was upgraded to version 3.9.1.

GPU

The gpu module has been enhanced to cover more functionality that previously was only available through bgl. (4430e8a008, 6c6b1c015b)

The bgl module will be deprecated in Blender 3.0, in preparation of future Vulkan support. Add-ons should switch to using the gpu module, so that they will work with both OpenGL and Vulkan.

  • New state sub-module for changing drawing state.
  • New texture sub-module, including a function to create textures from image datablocks.
  • New GPUFrameBuffer
  • New GPUUniformBuf

Other Additions

  • New RenderEngine.bl_use_custom_freestyle option. By default this is disabled, and Freestyle rendering will be done by Eevee. If enabled, the render engine will be called to render the Freestyle geometry. (1428544528)
  • New to_curve method in Object ID. The method is analogous to to_mesh and can be used to get the splines representing a text object or to get the splines after spline modifiers are applied. (f2c0bbed1c)
  • New CurveMapping.reset_view method (3eb8307160).
  • New CurveProfile.reset_view method (7e3efac9a8).
  • New BlendFile.temp_data method, providing a context manager to temporarily load blend file data without linking/appending it into the current file (9e09214979).
  • User Interface: Add support for bl_description and python doc-strings for panel classes. (8971018eb6)

Other Changes

  • UTF8 is now the default encoding on all platforms, matching the behavior of running python -X utf8. See PEP-540 (df135b74fc).
  • The deform parameter of the Bmesh from_object method is now deprecated, always assumed to be True, and will be removed in version 3.0. (4b0871af87)
  • The intermediate representation of bpy.props, typically defined in a classes annotations before registration is now using a new type bpy.props._PropertyDeferred. While this is not considered part of the stable API, some scripts depended on this (c44c611c6d)
  • bpy.ops.mesh.primitive_grid_add the resulting subdivision levels has been changed by n+1 (4d3cdb32d3).
  • Remove support for non-annotation properties in classes as this was only enabled while porting scripts to 2.8x API (afa5da9ce0)

Scripts that dynamically generate types will need to be updated, see the following example for reference:

Before (2.92 or older)

import bpy
settings_class = type(
    "TestClass",
    (bpy.types.PropertyGroup,), {
        "test": bpy.props.StringProperty(default="test"),
    },
)
bpy.utils.register_class(settings_class)
bpy.types.WindowManager.example = bpy.props.PointerProperty(type=settings_class)
print(bpy.context.window_manager.example.test)

After (2.93 and newer)

import bpy
settings_class = type(
    "TestClass",
    (bpy.types.PropertyGroup,), {
        "__annotations__": {
            "test": bpy.props.StringProperty(default="test"),
        },
    },
)
bpy.utils.register_class(settings_class)
bpy.types.WindowManager.example = bpy.props.PointerProperty(type=settings_class)
print(bpy.context.window_manager.example.test)