def _pointer_args(self, shader_name, arg_name, runtimes): ptrs = [] for m in self._materials: shader = getattr(m, shader_name) p = shader.get_ptrs() ptrs.append(p) args = [] for i in range(len(runtimes)): pa = PtrsArray() for v in ptrs: pa.append(v[i]) args.append(ArrayArg(arg_name, pa)) return args
def prepare_shaders(self, runtimes): for l in self._lights: l.prepare(runtimes) ptrs = [] for l in self._lights: p = l.shader.get_ptrs() ptrs.append(p) args = [] for i in range(len(runtimes)): pa = PtrsArray() for v in ptrs: pa.append(v[i]) args.append(ArrayArg('lgt_ptrs', pa)) aal = self.rad_shader._get_arg('lgt_ptrs') aal.resize(args) self.rad_shader.prepare(runtimes) self.nlights_shader.prepare(runtimes) self.env_shader.prepare(runtimes) ##### emission shader ptrs = [] for l in self._lights: if isinstance(l, AreaLight): p = l.emission_shader.get_ptrs() ptrs.append(p) args = [] for i in range(len(runtimes)): pa = PtrsArray() for v in ptrs: pa.append(v[i]) args.append(ArrayArg('lgt_ptrs', pa)) aal = self.emission_shader._get_arg('lgt_ptrs') aal.resize(args) self.emission_shader.prepare(runtimes) self.update_light_ids()