How can I force Windows to use the dedicated GPU for my pygame game?
I'm using pygame._sdl2.video to render, and when I change the GPU to the dedicated video option in Windows graphics settings, the performance increases by 40%. How I can do it in the code?
And how can I optimize the font rendering? I'm creating the Texture from the surface in every frame
There's my code:
import pygame
from pygame._sdl2.video import Window as SdlWindow, Renderer, Texture, Image
import random
import math
pygame.init()
screen_size = [900, 900]
screen = SdlWindow(title='Sdl2 Test', size=screen_size)
renderer = Renderer(screen)
image = pygame.transform.scale(pygame.image.load('sdl2_image.png'), (75, 48))
image = Texture.from_surface(renderer, image)
font = pygame.font.SysFont('Arial', 50)
spriteGroup = pygame.sprite.Group()
clock = pygame.time.Clock()
while True:
clock.tick(60)
keys = pygame.key.get_pressed()
mouse_x, mouse_y = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
renderer.clear()
if len(spriteGroup) < 5000:
for i in range(0, 8):
rect = image.get_rect()
rect.x = 450
rect.y = 450
sprite = pygame.sprite.Sprite(spriteGroup)
sprite.rect = rect
sprite.image = Image(image)
sprite.angle = random.uniform(-3.14, 3.14)
sprite.x = sprite.rect.x
sprite.y = sprite.rect.y
for sprite in spriteGroup:
sprite.x += math.cos(sprite.angle)
sprite.y += math.sin(sprite.angle)
if sprite.x < 0 or sprite.x > screen_size[0] - sprite.rect.size[0]:
sprite.angle = math.pi - sprite.angle
if sprite.y < 0 or sprite.y > screen_size[1] - sprite.rect.size[1]:
sprite.angle = -sprite.angle
sprite.image.angle += 1
sprite.rect.x = int(sprite.x)
sprite.rect.y = int(sprite.y)
spriteGroup.draw(renderer)
font_surface = Image(Texture.from_surface(renderer, font.render(str(round(clock.get_fps())), True, (0, 0, 255))))
rect = font_surface.get_rect()
font_surface.draw(rect, rect)
font_surface = Image(Texture.from_surface(renderer, font.render(str(len(spriteGroup)), True, (0, 0, 255))))
rect = font_surface.get_rect()
font_surface.draw(rect, (0, 900 - rect[3], rect[2], rect[3]))
renderer.present()