Рендер ModernGL возвращает ошибку GL_INVALID_ENUM? - PullRequest
1 голос
/ 29 апреля 2020

Я написал этот код GPU в C, используя GLES и EGL, и он работал нормально. Сейчас я пытаюсь перенести этот код графического процессора на python с использованием ModernGL, за исключением того, что сразу после вызова функции рендеринга ctx возвращает ошибку GL_INVALID_ENUM. Я использую NanoPi M1 Plus с Mali400 GPU, который поддерживает только OpenGL версии 120.

КОД GPU:

import moderngl
import numpy as np

ctx = moderngl.create_context(standalone=True,
    backend='egl'
    ) 
prog = ctx.program(
            vertex_shader='''
                        #version 120
                        attribute vec4 vPosition;
                        void main() {
                            gl_Position = vPosition;
                        }
                        ''',
            fragment_shader='''
                            #version 120
                            uniform float Aarr[1000];

                            void main() {
                                int my_index = int(gl_FragCoord[0]);
                                float ex = exp(-Aarr[my_index]);
                                float result = 1 / (1.0 + ex);
                                gl_FragColor = vec4(result, 0.0, 0.0, 1.0);
                            }
                            ''',
        )

vertices = np.array([
                    -1.0, -1.0, 1.0,
                    -1.0, 1.0, 1.0,
                    1.0, 1.0, 1.0,
                    -1.0, -1.0, 1.0,
                    1.0, 1.0, 1.0,
                    1.0, -1.0, 1.0
                    ],
                    dtype='f4',
                )

vbo = ctx.buffer(vertices)
vao = ctx.simple_vertex_array(prog, vbo, 'vPosition')

A_vec = prog['Aarr']
A_vec.write(np.random.uniform(-256,256,[1000]).astype('f4'))
fbo = ctx.simple_framebuffer((1000, 2), components=4)
fbo.use()
fbo.clear(0.0, 0.0, 0.0, 1.0)
vao.render()
print("Error after render: ",ctx.error)

Вывод:

libGL error: MESA-LOADER: malformed or no PCI ID
libGL error: unable to load driver: mali_drm_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: mali_drm
Error after render:  GL_INVALID_ENUM

Любая помощь будет очень признателен, так как это требуется для моего проекта последнего года.

1 Ответ

1 голос
/ 29 апреля 2020

Mali400 GPU, который поддерживает только OpenGL версии 120

Он вообще не поддерживает OpenGL; он поддерживает OpenGL ES 1.1 и 2.0.

...