"glCreateProgram и glGetError возвращают 0" - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь построить простое приложение командной строки для тестирования OpenGL на телефоне arm64-v8a.glCreateProgram возвращает 0 и glGetError, что также кажется неправильным, потому что какая-то ошибка должна была произойти, если glCreateProgram не возвращает положительное целое число (по крайней мере, согласно https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glCreateProgram.xhtml).

Может быть, моя инициализация неверна?

bool init() {
    EGLDisplay display(eglGetDisplay(EGL_DEFAULT_DISPLAY));
    bool is_initialized;
    if (!eglInitialize(display, nullptr, nullptr)) {
        return false;
    }
    check_err();
    static const EGLint attributes[] = {EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE};
    EGLContext context(eglCreateContext(display, EGL_NO_CONTEXT, EGL_NO_CONTEXT, attributes));
    if (auto error = glGetError()) {
        std::cout << error << endl;
        return false;
    }
    //   eglBindApi();
    return true;
}

int main() {
    if (!init()) {
        cout << "init error" << endl;
        return 1;
    }
    program = glCreateProgram();
    cout << program << " " << glGetError() << endl;

}

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Вы забыли позвонить eglMakeCurrent.Эта функция очень важна, чтобы сообщить OpenGL, что когда вы вызываете функцию gl***, на какую context и какие поверхности влияет эта функция.

позвоните eglMakeCurrent, вам нужно сначала создать поверхность , которую вы также забыли.

Я предлагаю вам начать с примера кода (например, Hello Triangle / Cube) и изменить код наудовлетворить ваши потребности.

0 голосов
/ 11 июня 2019

Вы звоните glGetError(), чтобы проверить состояние ошибки ваших функций EGL. Вы хотите использовать eglGetError() вместо этого; glGetError() обрабатывает только состояния ошибок для функций GL.

...