def make_buffer(self, width, height, texture_format): self.width = width self.height = height self.root = NodePath("root") props = FrameBufferProperties() props.set_srgb_color(False) if texture_format == Texture.F_rgb: props.set_float_color(False) props.set_rgba_bits(8, 8, 8, 0) elif texture_format == Texture.F_rgba: props.set_float_color(False) props.set_rgba_bits(8, 8, 8, 8) elif texture_format == Texture.F_r32: props.set_float_color(True) props.set_rgba_bits(32, 0, 0, 0) elif texture_format == Texture.F_rgb32: props.set_float_color(True) props.set_rgba_bits(32, 32, 32, 0) elif texture_format == Texture.F_rgba32: props.set_float_color(True) props.set_rgba_bits(32, 32, 32, 32) self.buffer = base.win.make_texture_buffer("generatorBuffer", width, height, to_ram=True, fbp=props) #print(self.buffer.get_fb_properties(), self.buffer.get_texture()) self.buffer.setOneShot(True) #the camera for the buffer cam = base.makeCamera(win=self.buffer) cam.reparent_to(self.root) cam.set_pos(width / 2, height / 2, 100) cam.set_p(-90) lens = OrthographicLens() lens.set_film_size(width, height) cam.node().set_lens(lens) #plane with the texture cm = CardMaker("plane") cm.set_frame(0, width, 0, height) x_margin = 1.0 / width / 2.0 y_margin = 1.0 / height / 2.0 cm.set_uv_range((-x_margin, -y_margin), (1 + x_margin, 1 + y_margin)) self.quad = self.root.attach_new_node(cm.generate()) self.quad.look_at(0, 0, -1) taskMgr.add(self.check_generation, 'check_generation', sort=-10000) taskMgr.add(self.callback, 'callback', sort=-9999) print("Created offscreen buffer, size: %dx%d" % (width, height), "format:", Texture.formatFormat(texture_format))