-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrender.py
More file actions
88 lines (68 loc) · 2.93 KB
/
render.py
File metadata and controls
88 lines (68 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
"""Simple example for using sdl2 directly."""
import os
os.environ["PATH"] += ";dll"
import sys
import ctypes
from sdl2 import *
from sdl2.sdlimage import *
from sdl2.sdlmixer import *
from sdl2.sdlttf import *
import random
__all__ = ['Window', 'Person', 'Renderer', 'Sprite', 'SpriteFactory']
class Window:
def __init__(self, title, size):
self.title = title
self.width, self.height = size
SDL_Init(SDL_INIT_EVERYTHING)
SDL_EnableScreenSaver()
SDL_setenv(SDL_HINT_RENDER_SCALE_QUALITY, 'linear'.encode("utf-8"), 1)
# SDL_StopTextInput()
self.window = SDL_CreateWindow(title.encode("utf8"),
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
self.width, self.height, SDL_WINDOW_SHOWN)
SDL_SetWindowOpacity(self.window, 1)
SDL_StartTextInput()
SDL_SetTextInputRect(SDL_Rect(0, 0, 100, 60))
class Renderer:
def __init__(self, window: Window):
self.window = window
self.renderer = SDL_CreateRenderer(window.window, -1, 0)
def save(self, file):
surface = SDL_GetWindowSurface(self.window.window)
SDL_RenderReadPixels(self.renderer, ctypes.byref(surface.contents.clip_rect), ctypes.c_uint32(0),
ctypes.cast(surface.contents.pixels, ctypes.c_void_p),
ctypes.c_int(surface.contents.pitch))
SDL_SaveBMP(surface, file.encode("utf8"))
class Sprite:
def __init__(self, renderer, texture):
self.texture = IMG_LoadTexture(renderer.renderer, texture.encode("utf8"))
self.renderer = renderer
w = ctypes.c_long()
h = ctypes.c_long()
SDL_QueryTexture(self.texture, None, None, ctypes.byref(w), ctypes.byref(h))
self.w = w
self.h = h
def update(self):
SDL_SetTextureBlendMode(self.texture, SDL_BLENDMODE_BLEND)
SDL_SetTextureAlphaMod(self.texture, random.randint(170, 200))
# SDL_SetTextureAlphaMod(self.texture, 50)
def render(self, x=0, y=0, flip=False):
# self.update()
# SDL_RenderSetViewport(self.renderer.renderer, SDL_Rect(0, 0, 100, 100))
a = SDL_FLIP_NONE
if flip:
a = SDL_FLIP_HORIZONTAL
SDL_RenderCopyEx(self.renderer.renderer, self.texture, SDL_Rect(0, 0, self.w, self.h),
SDL_Rect(x, y, self.w, self.h), 0, None, a)
# SDL_RenderSetViewport(self.renderer.renderer, None)
# SDL_RenderCopyEx(self.renderer.renderer, self.texture, SDL_Rect(0, 0, self.w, self.h),
# SDL_Rect(x, y, self.w, self.h), random.randint(1, 90), None, SDL_FLIP_NONE)
# SDL_RenderPresent(self.renderer.renderer)
class SpriteFactory:
def __init__(self, renderer):
self.renderer = renderer
def create(self, texture):
return Sprite(self.renderer, texture)
class Person:
pass