“ glCreateProgram和glGetError返回0”

时间:2019-06-11 12:01:17

标签: opengl-es android-ndk

我尝试在arm64-v8a手机上构建基准测试OpenGL的简单命令行应用程序。 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 :(得分:0)

您正在调用glGetError()以测试EGL函数的错误状态。您想改用eglGetError()glGetError()仅处理GL函数的错误状态。

答案 1 :(得分:0)

您忘记了致电eglMakeCurrent。告诉OpenGL当您调用$comb['Amount'] = $arr2['Amount'];函数时,哪个 context 和哪个 surfaces 受该函数影响是非常重要的。

要致电gl***,您必须先create a surface,您也忘记了。

我建议您从示例代码(例如Hello Triangle / Cube)开始,然后修改代码以适合您的需求。