mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 13:36:25 +00:00
Fix Blender 4.4 crashing on Mac (decorators issues) #6461
This commit is contained in:
@@ -131,6 +131,9 @@ class AggregateDecorator:
|
|||||||
return shader
|
return shader
|
||||||
|
|
||||||
def draw_custom_batch(self, coords, color):
|
def draw_custom_batch(self, coords, color):
|
||||||
|
indices = None
|
||||||
|
if not tool.Blender.validate_shader_batch_data(coords, indices):
|
||||||
|
return
|
||||||
shader = self.dotted_line_shader()
|
shader = self.dotted_line_shader()
|
||||||
|
|
||||||
arc_lengths = [0]
|
arc_lengths = [0]
|
||||||
@@ -141,6 +144,7 @@ class AggregateDecorator:
|
|||||||
shader,
|
shader,
|
||||||
"LINE_STRIP",
|
"LINE_STRIP",
|
||||||
{"position": coords, "arcLength": arc_lengths},
|
{"position": coords, "arcLength": arc_lengths},
|
||||||
|
indices=indices,
|
||||||
)
|
)
|
||||||
|
|
||||||
matrix = bpy.context.region_data.perspective_matrix
|
matrix = bpy.context.region_data.perspective_matrix
|
||||||
@@ -150,6 +154,8 @@ class AggregateDecorator:
|
|||||||
batch.draw(shader)
|
batch.draw(shader)
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -243,6 +249,8 @@ class AggregateModeDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ class BoundaryDecorator:
|
|||||||
cls.installed = None
|
cls.installed = None
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ class ClashDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -318,6 +318,8 @@ class BaseDecorator:
|
|||||||
color: tuple[float, float, float, float],
|
color: tuple[float, float, float, float],
|
||||||
indices: Optional[list[tuple[int, int]]] = None,
|
indices: Optional[list[tuple[int, int]]] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.base_shader
|
shader = self.line_shader if shader_type == "LINES" else self.base_shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -1699,6 +1701,8 @@ class CutDecorator:
|
|||||||
self.draw_batch("POINTS", selected_vertices, selected_elements_color)
|
self.draw_batch("POINTS", selected_vertices, selected_elements_color)
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -414,6 +414,8 @@ class ExtrusionGuidesGizmo(CustomGizmo, types.Gizmo):
|
|||||||
shader_wrapper = ExtrusionGuidesShader()
|
shader_wrapper = ExtrusionGuidesShader()
|
||||||
verts = [Vector((0, 0, 0)), Vector((0, 0, 1))]
|
verts = [Vector((0, 0, 0)), Vector((0, 0, 1))]
|
||||||
verts, edges = shader_wrapper.process_geometry(verts)
|
verts, edges = shader_wrapper.process_geometry(verts)
|
||||||
|
if not tool.Blender.validate_shader_batch_data(verts, edges):
|
||||||
|
verts, edges = [], []
|
||||||
self.custom_shape = shader_wrapper, shader_wrapper.batch(
|
self.custom_shape = shader_wrapper, shader_wrapper.batch(
|
||||||
pos=verts,
|
pos=verts,
|
||||||
indices=edges,
|
indices=edges,
|
||||||
|
|||||||
@@ -128,6 +128,8 @@ class ItemDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ class GeoreferenceDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
props = tool.Georeference.get_georeference_props()
|
props = tool.Georeference.get_georeference_props()
|
||||||
self.scale = props.visualization_scale
|
self.scale = props.visualization_scale
|
||||||
content_pos = [v * self.scale for v in content_pos]
|
content_pos = [v * self.scale for v in content_pos]
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ class SolarDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -72,6 +72,8 @@ class ProfileDecorator:
|
|||||||
cls.installed = None
|
cls.installed = None
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -405,6 +407,8 @@ class PolylineDecorator:
|
|||||||
return {"verts": verts, "edges": edges, "tris": tris}
|
return {"verts": verts, "edges": edges, "tris": tris}
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -815,6 +819,8 @@ class ProductDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -882,6 +888,8 @@ class WallAxisDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -946,6 +954,8 @@ class SlabDirectionDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -1001,6 +1011,8 @@ class FaceAreaDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -896,6 +896,8 @@ class DecorationsHandler:
|
|||||||
cls.installed = None
|
cls.installed = None
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -131,6 +131,10 @@ class NestDecorator:
|
|||||||
return shader
|
return shader
|
||||||
|
|
||||||
def draw_custom_batch(self, coords, color):
|
def draw_custom_batch(self, coords, color):
|
||||||
|
indices = None
|
||||||
|
if not tool.Blender.validate_shader_batch_data(coords, indices):
|
||||||
|
return
|
||||||
|
|
||||||
shader = self.dotted_line_shader()
|
shader = self.dotted_line_shader()
|
||||||
|
|
||||||
arc_lengths = [0]
|
arc_lengths = [0]
|
||||||
@@ -141,6 +145,7 @@ class NestDecorator:
|
|||||||
shader,
|
shader,
|
||||||
"LINE_STRIP",
|
"LINE_STRIP",
|
||||||
{"position": coords, "arcLength": arc_lengths},
|
{"position": coords, "arcLength": arc_lengths},
|
||||||
|
indices=indices,
|
||||||
)
|
)
|
||||||
|
|
||||||
matrix = bpy.context.region_data.perspective_matrix
|
matrix = bpy.context.region_data.perspective_matrix
|
||||||
@@ -150,6 +155,8 @@ class NestDecorator:
|
|||||||
batch.draw(shader)
|
batch.draw(shader)
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -243,6 +250,8 @@ class NestModeDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -68,6 +68,8 @@ class ProjectDecorator:
|
|||||||
cls.installed = None
|
cls.installed = None
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -137,6 +139,8 @@ class ClippingPlaneDecorator:
|
|||||||
cls.installed = None
|
cls.installed = None
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
@@ -242,6 +246,8 @@ class MeasureDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ class GridDecorator:
|
|||||||
cls.is_installed = False
|
cls.is_installed = False
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import numpy as np
|
|||||||
import bpy
|
import bpy
|
||||||
import gpu
|
import gpu
|
||||||
import blf
|
import blf
|
||||||
|
import bonsai.tool as tool
|
||||||
from bpy.types import SpaceView3D
|
from bpy.types import SpaceView3D
|
||||||
from gpu_extras.batch import batch_for_shader
|
from gpu_extras.batch import batch_for_shader
|
||||||
from typing import Iterable, Union
|
from typing import Iterable, Union
|
||||||
@@ -86,6 +87,8 @@ class LoadsDecorator:
|
|||||||
shader = info["shader"]
|
shader = info["shader"]
|
||||||
args = info["args"]
|
args = info["args"]
|
||||||
indices = info["indices"]
|
indices = info["indices"]
|
||||||
|
if not tool.Blender.validate_shader_batch_data(args["coord"], indices):
|
||||||
|
continue
|
||||||
batch = batch_for_shader(shader, "TRIS", args, indices=indices)
|
batch = batch_for_shader(shader, "TRIS", args, indices=indices)
|
||||||
matrix = bpy.context.region_data.perspective_matrix
|
matrix = bpy.context.region_data.perspective_matrix
|
||||||
shader.bind()
|
shader.bind()
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ class SystemDecorator:
|
|||||||
cls.installed = None
|
cls.installed = None
|
||||||
|
|
||||||
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
def draw_batch(self, shader_type, content_pos, color, indices=None):
|
||||||
|
if not tool.Blender.validate_shader_batch_data(content_pos, indices):
|
||||||
|
return
|
||||||
shader = self.line_shader if shader_type == "LINES" else self.shader
|
shader = self.line_shader if shader_type == "LINES" else self.shader
|
||||||
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices)
|
||||||
shader.uniform_float("color", color)
|
shader.uniform_float("color", color)
|
||||||
|
|||||||
@@ -1668,3 +1668,21 @@ class Blender(bonsai.core.tool.Blender):
|
|||||||
unit_scale = 0.3048
|
unit_scale = 0.3048
|
||||||
|
|
||||||
return unit_scale
|
return unit_scale
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def validate_shader_batch_data(cls, pos: Any, indices: Optional[Any]) -> bool:
|
||||||
|
"""Validate shader batch data.
|
||||||
|
|
||||||
|
If method returns ``False``, then drawing for this batch should be skipped.
|
||||||
|
Should be used always before running ``batch.draw(shader)``
|
||||||
|
|
||||||
|
Important because in Blender 4.4.0 on Mac passing an empty list
|
||||||
|
as ``indices`` is causing a crash.
|
||||||
|
|
||||||
|
See https://projects.blender.org/blender/blender/issues/136831
|
||||||
|
"""
|
||||||
|
# Checking `pos` is not critical but we keep it
|
||||||
|
# to ensure batch data is always validated to avoid crashes.
|
||||||
|
if len(pos) == 0 or (indices is not None and len(indices) == 0):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|||||||
Reference in New Issue
Block a user