def test_am5_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fb = fbs[0] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, white) pykms.draw_rect(fb, 200, 200, 100, 100, red) pykms.draw_rect(fb, fb.width - 300, 200, 100, 100, green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, cyan) pykms.draw_rect(fb, 100, 100, 500, 500, purple) set_props( crtc, { "trans-key-mode": 2, "trans-key": purple.rgb888, "background": 0, "alpha_blender": 0, }) plane = 0 for i in range(0, 2): print("set crtc {}, plane {}, fb {}".format(crtc.id, planes[i].id, fbs[i].id)) plane = planes[i] fb = fbs[i] set_props( plane, { "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zorder": 3 if i == 1 else 0, }) time.sleep(1)
def test_am5_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fb = fbs[0] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, white) pykms.draw_rect(fb, 200, 200, 100, 100, red) pykms.draw_rect(fb, fb.width - 300, 200, 100, 100, green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, cyan) pykms.draw_rect(fb, 100, 100, 500, 500, purple) set_props(crtc, { "trans-key-mode": 2, "trans-key": purple.rgb888, "background": 0, "alpha_blender": 0, }) plane = 0 for i in range(0,2): print("set crtc {}, plane {}, fb {}".format(crtc.id, planes[i].id, fbs[i].id)) plane = planes[i] fb = fbs[i] set_props(plane, { "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zorder": 3 if i == 1 else 0, }) time.sleep(1)
def test_am4_alpha_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fb = fbs[0] pykms.draw_rect(fb, 0, 0, w, h, purple) pykms.draw_rect(fb, 200, 100, 50, 200, red) pykms.draw_rect(fb, w - 200 - 50, 100, 50, 200, green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, blue) pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, purple) fb = fbs[2] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, cyan) pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, purple) set_props(crtc, { "trans-key-mode": 1, "trans-key": purple.rgb888, "background": 0, "alpha_blender": 1, }) time.sleep(1) plane = planes[0] fb = fbs[0] set_props(plane, { "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": w, "CRTC_H": h, }) time.sleep(1) plane = planes[1] fb = fbs[1] set_props(plane, { "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": 0, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, }) time.sleep(1) plane = planes[2] fb = fbs[2] set_props(plane, { "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": w - fb.width, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, })
if len(planes) != 3: print("Need 3 planes!") exit(1) disable_planes(card) w = mode.hdisplay h = mode.vdisplay fbs = [] for i in range(len(planes)): fbs.append(pykms.DumbFramebuffer(card, w, h, "AR24")) pykms.draw_rect(fbs[0], 50, 50, 200, 200, pykms.RGB(128, 255, 0, 0)) pykms.draw_rect(fbs[1], 150, 50, 200, 200, pykms.RGB(128, 0, 255, 0)) pykms.draw_rect(fbs[2], 50, 150, 200, 200, pykms.RGB(128, 0, 0, 255)) set_props(crtc, { "trans-key-mode": 0, "trans-key": 0, "background": 0, "alpha_blender": 1, }) for i in range(len(planes)): plane = planes[i] fb = fbs[i] print("set crtc {}, plane {}, fb {}".format(crtc.id, p.id, fbs[i].id))
def test_am5_trans_dest(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fb = fbs[0] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.purple) pykms.draw_rect(fb, 100, 100, 100, 200, pykms.green) pykms.draw_rect(fb, 300, 100, 100, 200, pykms.red) pykms.draw_rect(fb, 500, 100, 100, 200, pykms.white) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_rect(fb, 250, 100, 200, 200, pykms.yellow) crtc.set_props({ "trans-key-mode": 1, "trans-key": pykms.purple.rgb888, "background": 0, "alpha_blender": 0, }) plane = 0 for i in range(0, 2): print("set crtc {}, plane {}, fb {}".format(crtc.id, planes[i].id, fbs[i].id)) plane = planes[i] fb = fbs[i] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zorder": i, }) time.sleep(1)
def test_am4_alpha_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fb = fbs[0] pykms.draw_rect(fb, 0, 0, w, h, pykms.purple) pykms.draw_rect(fb, 200, 100, 50, 200, pykms.red) pykms.draw_rect(fb, w - 200 - 50, 100, 50, 200, pykms.green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.blue) pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, pykms.purple) fb = fbs[2] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, pykms.purple) crtc.set_props({ "trans-key-mode": 1, "trans-key": pykms.purple.rgb888, "background": 0, "alpha_blender": 1, }) time.sleep(1) plane = planes[0] fb = fbs[0] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": w, "CRTC_H": h, }) time.sleep(1) plane = planes[1] fb = fbs[1] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": 0, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, }) time.sleep(1) plane = planes[2] fb = fbs[2] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": w - fb.width, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, })
def move_stripe(self): if self.first_run: self.new_color() self.first_run = False fb = self.fbs[self.draw_buf] old_box_y = self.old_pos_y self.old_pos_y = self.pos_y change_speed = 0 self.pos_y = int(self.pos_y + (self.dir_y * self.speed_y)) if self.pos_y < 0: self.pos_y = 0 change_speed = 1 self.dir_y = 1 elif self.pos_y > (self.fbY - self.bar_size): self.pos_y = self.fbY - self.bar_size change_speed = 1 self.dir_y = -1 if change_speed == 1: self.new_color() self.speed_y = random.randrange(1, 10, 1) # Erease the old box if old_box_y >= 0: pykms.draw_rect(fb, 0, old_box_y, self.fbX, self.bar_size, black) pos_y = self.pos_y pykms.draw_rect(fb, 0, pos_y, self.fbX, 5, self.color3) pos_y += 5 pykms.draw_rect(fb, 0, pos_y, self.fbX, 10, self.color2) pos_y += 10 pykms.draw_rect(fb, 0, pos_y, self.fbX, 15, self.color) pos_y += 15 pykms.draw_rect(fb, 0, pos_y, self.fbX, 10, self.color2) pos_y += 10 pykms.draw_rect(fb, 0, pos_y, self.fbX, 5, self.color3)
def test_am5_trans_dest(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fb = fbs[0] stepX = fb.width // 7 stepY = fb.height // 5; pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.purple) pykms.draw_rect(fb, stepX, stepY, stepX, fb.height - (stepY * 2), pykms.green) pykms.draw_rect(fb, stepX * 3, stepY, stepX, fb.height - (stepY * 2), pykms.red) pykms.draw_rect(fb, stepX * 5, stepY, stepX, fb.height - (stepY * 2), pykms.white) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_circle(fb, (stepX * 3) + (stepX // 2), fb.height // 2, (fb.height // 2) - stepY, pykms.yellow) crtc.set_props({ "trans-key-mode": 1, "trans-key": pykms.purple.rgb888, "background": 0, "alpha_blender": 0, }) print("Purple bg. Green, red, white boxes.") plane = planes[0] fb = fbs[0] z = 0 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") print("Cyan bg. Green, red, white boxes. Yellow circle behind the red box.") plane = planes[1] fb = fbs[1] z = 1 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n")
def test_am4_alpha_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fb = fbs[0] halfX = fb.width // 2 stepX = (fb.width // 2) // 5; stepY = fb.height // 5; pykms.draw_rect(fb, 0, 0, w, h, pykms.purple) pykms.draw_rect(fb, stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.red) pykms.draw_rect(fb, halfX + stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.blue) pykms.draw_rect(fb, stepX, stepY, fb.width - (stepX * 2), fb.height - (stepY * 2), pykms.purple) fb = fbs[2] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_rect(fb, stepX, stepY, fb.width - (stepX * 2), fb.height - (stepY * 2), pykms.purple) crtc.set_props({ "trans-key-mode": 1, "trans-key": pykms.purple.rgb888, "background": 0x666666, "alpha_blender": 1, }) print("grey background") input("press enter\n") plane = planes[0] fb = fbs[0] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": w, "CRTC_H": h, }) print("grey background, red and green boxes") input("press enter\n") plane = planes[1] fb = fbs[1] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": 0, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, }) print("left side: blue bg, purple box, red box inside purple. right side: unchanged") input("press enter\n") plane = planes[2] fb = fbs[2] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": w - fb.width, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, }) print("left side: unchanged. right side: cyan bg, purple box, green box inside purple.") input("press enter\n")
def test_am4_normal_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fb = fbs[0] halfX = fb.width // 2 stepX = (fb.width // 2) // 5; stepY = fb.height // 5; pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.white) pykms.draw_rect(fb, stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.red) pykms.draw_rect(fb, halfX + stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_rect(fb, stepX, stepY, fb.width - (stepX * 2), fb.height - (stepY * 2), pykms.purple) crtc.set_props({ "trans-key-mode": 2, "trans-key": pykms.purple.rgb888, "background": 0, "alpha_blender": 0, }) print("White bg. Red and green boxes.") plane = planes[0] fb = fbs[0] z = 0 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") print("Cyan bg. Big white box, containing red and green boxes.") plane = planes[1] fb = fbs[1] z = 2 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n")
rootplane = res.reserve_primary_plane(crtc, pykms.PixelFormat.XRGB8888) rootplane_list.append(rootplane) card.disable_planes() print('Using the following connectors:') for i in range(2): print(' {}: {} ({}x{})'.format(conn_list[i].idx, conn_list[i].fullname, mode_list[i].hdisplay, mode_list[i].vdisplay)) colors.append(pykms.red) colors.append(pykms.green) for i in range(2): pykms.draw_rect(fb_list[i], 0, 0, src_w, src_h, colors[i]) for i in range(2): req = pykms.AtomicReq(card) modeb = mode_list[i].to_blob(card) req.add(conn_list[i], 'CRTC_ID', crtc_list[i].id) req.add(crtc_list[i], {'ACTIVE': 1, 'MODE_ID': modeb.id}) req.add( rootplane_list[i], { 'FB_ID': fb_list[i].id, 'CRTC_ID': crtc_list[i].id, 'SRC_W': src_w << 16, 'SRC_H': src_h << 16, 'CRTC_W': src_w, 'CRTC_H': src_h })
if len(planes) != 3: print("Need 3 planes!") exit(1) disable_planes(card) w = mode.hdisplay h = mode.vdisplay fbs=[] for i in range(len(planes)): fbs.append(pykms.DumbFramebuffer(card, w, h, "AR24")) pykms.draw_rect(fbs[0], 50, 50, 200, 200, pykms.RGB(128, 255, 0, 0)) pykms.draw_rect(fbs[1], 150, 50, 200, 200, pykms.RGB(128, 0, 255, 0)) pykms.draw_rect(fbs[2], 50, 150, 200, 200, pykms.RGB(128, 0, 0, 255)) set_props(crtc, { "trans-key-mode": 0, "trans-key": 0, "background": 0, "alpha_blender": 1, }) for i in range(len(planes)): plane = planes[i] fb = fbs[i]
def test_am4_normal_trans_dst(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w * 2 // 3, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w * 2 // 3, h, "XR24")) fb = fbs[0] pykms.draw_rect(fb, 0, 0, w, h, purple) pykms.draw_rect(fb, 100, 50, 50, 200, green) pykms.draw_rect(fb, 200, 50, 50, 200, red) pykms.draw_rect(fb, 300, 50, 50, 200, white) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, blue) fb = fbs[2] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, cyan) set_props( crtc, { "trans-key-mode": 1, "trans-key": purple.rgb888, "background": 0, "alpha_blender": 0, }) time.sleep(1) plane = planes[0] fb = fbs[0] set_props( plane, { "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": w, "CRTC_H": h, }) time.sleep(1) plane = planes[1] fb = fbs[1] set_props( plane, { "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": 0, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, }) time.sleep(1) plane = planes[2] fb = fbs[2] set_props( plane, { "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": w // 3, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, })
return result card = pykms.Card() res = pykms.ResourceManager(card) conn = res.reserve_connector() crtc = res.reserve_crtc(conn) mode = conn.get_default_mode() plane = res.reserve_generic_plane(crtc) card.disable_planes() crtc.set_mode(conn, mode) fb = pykms.DumbFramebuffer(card, 256, 256, "AR24") pykms.draw_rect(fb, 0, 0, 256, 256, pykms.RGB(255, 255, 0, 0)) print("set crtc {}, plane {}, fb {}".format(crtc.id, plane.id, fb.id)) size = 50 x = 100 y = 100 while True: plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": size << 16, "SRC_Y": size << 16, "SRC_W": (fb.width - size) << 16, "SRC_H": (fb.height - size) << 16,