Exemple #1
0
 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))