-
-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy pathtextures_bunnymark_more_pythonic.py
More file actions
110 lines (82 loc) · 4.28 KB
/
textures_bunnymark_more_pythonic.py
File metadata and controls
110 lines (82 loc) · 4.28 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# Dont use C data structures when we can avoid it. Makes Pypy slightly faster.
from raylib import *
import random
MAX_BUNNIES = 500000
# This is the maximum amount of elements (quads) per batch
# NOTE: This value is defined in [rlgl] module and can be changed there
MAX_BATCH_ELEMENTS = 8192
class Bunny:
def __init__(self):
self.position_x = 0.0
self.position_y = 0.0
self.speed_x = 0.0
self.speed_y = 0.0
self.color_r = 0
self.color_g = 0
self.color_b = 0
self.color_a = 0
# // Initialization
# //--------------------------------------------------------------------------------------
screenWidth = 1920;
screenHeight = 1080;
InitWindow(screenWidth, screenHeight, b"raylib [textures] example - bunnymark")
# // Load bunny texture
texBunny = LoadTexture(b"resources/wabbit_alpha.png")
bunnies = []
for i in range(0, MAX_BUNNIES):
bunnies.append(Bunny())
bunniesCount = 0; # Bunnies counter
SetTargetFPS(60); # Set our game to run at 60 frames-per-second
#//--------------------------------------------------------------------------------------
#// Main game loop
while not WindowShouldClose(): #// Detect window close button or ESC key
#// Update
#//----------------------------------------------------------------------------------
if IsMouseButtonDown(MOUSE_BUTTON_LEFT):
#// Create more bunnies
for i in range(0, 100):
if bunniesCount < MAX_BUNNIES:
bunnies[bunniesCount].position_x = GetMousePosition().x
bunnies[bunniesCount].position_y = GetMousePosition().y
bunnies[bunniesCount].speed_x = random.randint(-250, 250)/60.0
bunnies[bunniesCount].speed_y = random.randint(-250, 250)/60.0
bunnies[bunniesCount].color_r = random.randint(50,240)
bunnies[bunniesCount].color_g = random.randint(80, 240)
bunnies[bunniesCount].color_b = random.randint(100, 240)
bunnies[bunniesCount].color_a = 255
bunniesCount+=1
# // Update bunnies
for i in range(0, bunniesCount):
bunnies[i].position_x += bunnies[i].speed_x
bunnies[i].position_y += bunnies[i].speed_y
if ((bunnies[i].position_x + texBunny.width/2) > GetScreenWidth()) or ((bunnies[i].position_x + texBunny.width/2) < 0):
bunnies[i].speed_x *= -1
if ((bunnies[i].position_y + texBunny.height/2) > GetScreenHeight()) or ((bunnies[i].position_y + texBunny.height/2 - 40) < 0):
bunnies[i].speed_y *= -1
# //----------------------------------------------------------------------------------
#
# // Draw
# //----------------------------------------------------------------------------------
BeginDrawing()
ClearBackground(RAYWHITE)
for i in range(0, bunniesCount):
# // NOTE: When internal batch buffer limit is reached (MAX_BATCH_ELEMENTS),
# // a draw call is launched and buffer starts being filled again;
# // before issuing a draw call, updated vertex data from internal CPU buffer is send to GPU...
# // Process of sending data is costly and it could happen that GPU data has not been completely
# // processed for drawing while new data is tried to be sent (updating current in-use buffers)
# // it could generates a stall and consequently a frame drop, limiting the number of drawn bunnies
DrawTexture(texBunny, int(bunnies[i].position_x), int(bunnies[i].position_y), (bunnies[i].color_r,bunnies[i].color_g,bunnies[i].color_b,bunnies[i].color_a))
DrawRectangle(0, 0, screenWidth, 40, BLACK)
text = f"bunnies {bunniesCount}"
DrawText(text.encode('utf-8'), 120, 20, 20, GREEN)
text = f"batched draw calls: { 1 + int(bunniesCount/MAX_BATCH_ELEMENTS)}"
DrawText(text.encode('utf-8'), 320, 20, 20, MAROON)
DrawFPS(10, 20)
EndDrawing()
#//----------------------------------------------------------------------------------
#// De-Initialization
#//--------------------------------------------------------------------------------------
UnloadTexture(texBunny); #Unload bunny texture
CloseWindow() # Close window and OpenGL context
#//--------------------------------------------------------------------------------------