From 1cf15ef2bd4fcea98ef74f3eed885754dfbee46a Mon Sep 17 00:00:00 2001 From: Hannes Date: Fri, 22 May 2026 23:19:32 +0200 Subject: [PATCH] first commit --- gpu.py | 327 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 327 insertions(+) create mode 100644 gpu.py diff --git a/gpu.py b/gpu.py new file mode 100644 index 0000000..b20c52b --- /dev/null +++ b/gpu.py @@ -0,0 +1,327 @@ +import random +from PIL import Image +import math + +n0 = [ + [1,1,1], + [1,0,1], + [1,0,1], + [1,0,1], + [1,1,1] +] + +n1 = [ + [0,1,0], + [1,1,0], + [0,1,0], + [0,1,0], + [1,1,1] +] + +n2 = [ + [1,1,1], + [0,0,1], + [1,1,1], + [1,0,0], + [1,1,1] +] + +n3 = [ + [1,1,1], + [0,0,1], + [1,1,1], + [0,0,1], + [1,1,1] +] + +n4 = [ + [1,0,1], + [1,0,1], + [1,1,1], + [0,0,1], + [0,0,1] +] + +n5 = [ + [1,1,1], + [1,0,0], + [1,1,1], + [0,0,1], + [1,1,1] +] + +n6 = [ + [1,1,1], + [1,0,0], + [1,1,1], + [1,0,1], + [1,1,1] +] + +n7 = [ + [1,1,1], + [0,0,1], + [0,0,1], + [0,0,1], + [0,0,1] +] + +n8 = [ + [1,1,1], + [1,0,1], + [1,1,1], + [1,0,1], + [1,1,1] +] + +n9 = [ + [1,1,1], + [1,0,1], + [1,1,1], + [0,0,1], + [1,1,1] +] + +aa = [ + [1,1,1], + [1,0,1], + [1,1,1], + [1,0,1] +] + +ab = [ + [1,1,0], + [1,1,1], + [1,0,1], + [1,1,1] +] + +ac = [ + [1,1,1], + [1,0,0], + [1,0,0], + [1,1,1] +] + +class color: + def __init__(self, red: int, green: int, blue: int, alpha: int = 255) -> None: + self.r = red + self.g = green + self.b = blue + def get(self) -> tuple[int, int, int]: + return (self.r, self.g, self.b) + def multiply(self, other) -> tuple[int, int, int]: + r = other[0] + g = other[1] + b = other[2] + # if self.r: + # new_r = (self.r + r) >> 1 + # else: + # new_r = self.r + # if self.g: + # new_g = (self.g + g) >> 1 + # else: + # new_g = self.g + # if self.b: + # new_b = (self.b + b) >> 1 + # else: + # new_b = self.b + # return (new_r, new_g, new_b) + return (((self.r * r) >> 8), ((self.g * g) >> 8), ((self.b * b)>>8)) + def shiftr(self, n): + return ((self.r >> n), (self.g >> n), (self.b >>n)) + def mask(self, n): + return ((self.r & n), (self.g & n), (self.b & n)) + +class coord: + def __init__(self, x, y, width, height) -> None: + self.x = x + self.y = y + self.width = width + self.height = height + +def make_next_board(): + next_board = [ + [0, 0, 0, 0], + [0, 0, 0, 0], + [0, 1, 0, 0], + [1, 1, 1, 0], + ] + return next_board + +def make_board(): + board_height = 20 + board_width = 10 + + board = [] + + for _ in range(2): + line = [] + + for _ in range(board_width): + line.append(0) + + board.append(line) + + for _ in range(board_height - 2): + line = [] + + for _ in range(board_width): + line.append(random.randint(0, 5)) + + board.append(line) + + return board_height, board_width, board + +def make_sprite(): + sprite = Image.open("img/bitmap.png") + + sprite_pixels = sprite.load() + + sprite_width, sprite_height = sprite.size + + return sprite_pixels, sprite_width, sprite_height + +# red = color(255, 0, 0, 255) +# blue = color(0, 0, 255, 255) +# green = color(0, 255, 0, 255) +# purple = color(160, 32, 240, 255) +# orange = color(255, 165, 0, 255) +black = color(0, 0, 0, 255) +white = color(255, 255, 255, 255) + +# colors = [black, red, blue, green, purple, orange] + +# colors2 = [ +# black, # white-ish opposite of black +# color(0, 192, 192, 255), # cyan opposite of red +# color(192, 192, 0, 255), # yellow opposite of blue +# color(192, 0, 192, 255), # magenta opposite of green +# color(192, 192, 64, 255), # yellow-green opposite of purple +# color(0, 128, 255, 255), # sky blue opposite of orange +# ] + +red = color(255, 0, 0, 255) +cyan = color(0, 255, 255, 255) + +blue = color(0, 0, 255, 255) +yellow = color(255, 255, 0, 255) + +green = color(0, 255, 0, 255) +magenta = color(255, 0, 255, 255) + +orange = color(255, 128, 0, 255) +sky_blue = color(0, 128, 255, 255) + +purple = color(160, 32, 240, 255) +lime = color(64, 255, 64, 255) + +colors = [ + black, + red, + blue, + green, + orange, + purple +] + +colors2 = [ + black, + cyan, + yellow, + magenta, + sky_blue, + lime +] + +next_board = make_next_board() +nb1 = coord(88, 96, 128, 128) +nb2 = coord(1064, 96, 128, 128) + +board_height, board_width, board = make_board() +b1 = coord(304, 40, 320, height=640) +board2_height, board2_width, board2 = make_board() +b2 = coord(656, 40, 320, height=640) + +sprite_pixels, sprite_width, sprite_height = make_sprite() + +width = 1280 +height = 720 + +img = Image.new("RGB", (width, height)) + +pixels = img.load() + +for y in range(height): + for x in range(width): + ####################### player 1 + ### Board + if x>=b1.x and x=b1.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) + xs = xd&0x1F + ys = yd&0x1F + if (xs == 31) or (ys==31): + if (xs == 0) or (ys == 0): + pixels[x, y] = colors[board[yd>>5][xd>>5]].shiftr(1) + else: + pixels[x, y] = colors[board[yd>>5][xd>>5]].shiftr(2) + elif (not xs) or (not ys): + pixels[x, y] = colors[board[yd>>5][xd>>5]].get() + else: + pixels[x, y] = colors[board[yd>>5][xd>>5]].mask(0xFFFFFFC0) + ### Next Piece + elif x>=nb1.x and x=nb1.y and y>5][xd>>5]].shiftr(1) + else: + pixels[x, y] = colors[next_board[yd>>5][xd>>5]].shiftr(2) + elif (not xs) or (not ys): + pixels[x, y] = colors[next_board[yd>>5][xd>>5]].get() + else: + pixels[x, y] = colors[next_board[yd>>5][xd>>5]].mask(0xFFFFFFC0) + ####################### player 2 + ### Board + elif x>=b2.x and x=b2.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) + ### Next Piece + elif x>=nb2.x and x=nb2.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) + # ####################### player 2 + # ### Board + # elif x>=b2.x and x=b2.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) + # ### Next Piece + # elif x>=nb2.x and x=nb2.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) + ####################### BG + else: + pixels[x, y] = ((x+y)>>3,0,0) +offset = 0 + +numbers = [n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, aa, ab, ac] +for num in numbers: + for y in range(len(num)*4): + for x in range(len(num[y>>2])*4): + if num[y>>2][x>>2]: + pixels[x+offset, y] = white.get() + else: + pixels[x+offset, y] = black.get() + offset += 15 + +img.save("output/alpha.png") +img.show()