Я написал небольшой тестовый файл, чтобы увидеть, как рендеринг с помощью шейдера, и он работает хорошо.
Код: Выделить всё
import pygame
import moderngl
from array import array
# Initialiser Pygame et créer une fenêtre
pygame.init()
window = pygame.display.set_mode((800, 600), pygame.OPENGL | pygame.DOUBLEBUF)
display = pygame.Surface(window.get_size())
clock = pygame.time.Clock()
# Charger et redimensionner l'image
img = pygame.transform.scale(pygame.image.load("data/images/background.png").convert(), (400, 300))
img_rect = img.get_rect()
ctx = moderngl.create_context(standalone=False)
quad_buffer = ctx.buffer(data = array('f', [
-1.0, 1.0, 0.0, 0.0, # topleft
1.0, 1.0, 1.0, 0.0, # topright
-1.0, -1.0, 0.0, 1.0, # bottomleft
1.0, -1.0, 1.0, 1.0, # bottomright
]))
vert_shader = '''
#version 330 core
in vec2 vert;
in vec2 texcoord;
out vec2 uvs;
void main() {
uvs = texcoord;
gl_Position = vec4(vert, 0.0, 1.0);
}
'''
frag_shader = '''
#version 330 core
uniform sampler2D texture;
in vec2 uvs;
out vec4 fragColor;
void main() {
fragColor = vec4(texture(texture, uvs).rgb, 1.0);
}
'''
program = ctx.program(vertex_shader=vert_shader, fragment_shader=frag_shader)
render_object = ctx.vertex_array(program, [(quad_buffer, '2f 2f', 'vert', 'texcoord')])
def surface_to_texture(ctx, surface):
texture = ctx.texture(surface.get_size(), 4)
texture.filter = (moderngl.NEAREST, moderngl.NEAREST)
texture.swizzle = 'BGRA'
texture.write(surface.get_view('1'))
return texture
# Boucle principale
running = True
t = 0
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
t += 1
# Obtenir la position de la souris
mouse_x, mouse_y = pygame.mouse.get_pos()
# Mettre à jour la position de l'image
img_rect.center = (mouse_x, mouse_y)
# Dessiner l'image
display.fill((0, 0, 0)) # Effacer l'écran
display.blit(img, img_rect)
frame_texture = surface_to_texture(ctx, display)
frame_texture.use(0)
program['texture'] = 0
render_object.render(mode = moderngl.TRIANGLE_STRIP)
# Mettre à jour l'affichageS
pygame.display.flip()
frame_texture.release()
clock.tick(60)
# Fermer Pygame
pygame.quit()
Код: Выделить всё
def shader_init() -> tuple[mgl.Context, mgl.VertexArray, mgl.Program]:
ctx = mgl.create_context()
quad_buffer = ctx.buffer(data = array('f', [
-1.0, 1.0, 0.0, 0.0, # topleft
1.0, 1.0, 1.0, 0.0, # topright
-1.0, -1.0, 0.0, 1.0, # bottomleft
1.0, -1.0, 1.0, 1.0, # bottomright
]))
vert_shader = '''
#version 330 core
in vec2 vert;
in vec2 texcoord;
out vec2 uvs;
void main() {
uvs = texcoord;
gl_Position = vec4(vert, 0.0, 1.0);
}
'''
frag_shader = '''
#version 330 core
uniform sampler2D texture;
in vec2 uvs;
out vec4 fragColor;
void main() {
fragColor = vec4(texture(texture, uvs).rgb, 1.0);
}
'''
program = ctx.program(vertex_shader=vert_shader, fragment_shader=frag_shader)
render_object = ctx.vertex_array(program, [(quad_buffer, '2f 2f', 'vert', 'texcoord')])
return ctx, render_object, program
Код: Выделить всё
self.ctx, self.render_object, self.program = shader_init()Код: Выделить всё
ctx = mgl.context()Я пытаюсь изменить строку mgl.context() с помощью glversion, mode и автономных kwargs.
единственное, что устраняет ошибку, - это mgl.context(standalone = False), но на экране ничего не отображается.
Иначе я нашел другой пост, где у парня было то же самое проблема, и он наконец нашел решение. Он сказал
Я нашел решение своей проблемы. была какая-то проблема с переменными окружения, достаточно было удалить одну переменную, которой там быть не должно, и переустановить Moderngl. спасибо за попытку помочь.
Кто-то спрашивает имя переменной среды, и он отвечает
Я не помню полного имени, но оно похоже на OPENGL_CONTEXT_(вероятно)CREATE
Это была только не пользовательская переменная Windows (все переменные, которые я добавлял для всех пользователей)
Очевидно, что у меня нет переменных среды, имя которых могло бы быть связано, и я использую Windows 11.
Я пытаюсь удалить и переустановить, я сделать то же самое. Самое странное, что он хорошо работает с другим файлом, находящимся в той же папке.
Подробнее здесь: https://stackoverflow.com/questions/788 ... gl-context