Не может обнаружить контекст OpenGL [дубликат]Python

Программы на Python
Anonymous
Не может обнаружить контекст OpenGL [дубликат]

Сообщение Anonymous »

У меня есть игра в pygame. Я пытаюсь оптимизировать частоту кадров и использовать шейдерный рендеринг для использования графического процессора для оптимизации.
Я написал небольшой тестовый файл, чтобы увидеть, как рендеринг с помощью шейдера, и он работает хорошо.

Код: Выделить всё

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()

Когда я делаю то же самое в своей игре, что бы я ни делал, когда я использую «mgl.create_context()», у меня возникает ошибка «невозможно обнаружить контекст OpenGL».вот код игры

Код: Выделить всё

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

Вернуться в «Python»