【问题标题】:"glGenTextures" returns 1282 error when using 4.2 OpenGL使用 4.2 OpenGL 时“glGenTextures”返回 1282 错误
【发布时间】:2019-04-26 11:38:14
【问题描述】:

我正在使用默认函数 glGenTextures 创建 OpenGL 纹理。当 OpenGL 版本设置为 3.0 时一切正常,但是当我用 4.2 覆盖它时 glGenTextures 开始抛出错误 #1282(无效操作)。我做错了什么?

这是我测试过的代码段:

#include "GL/freeglut.h"
#include "GL/gl.h"

#define MAJOR_GL_VERSION 3
#define MINOR_GL_VERSION 0

int w = 200;
int h = 200;
const char* title = "title";

int main(int argc, char const *argv[])
{
    puts("Overriding default OpenGL version...");

    glutInitContextVersion(MAJOR_GL_VERSION, MINOR_GL_VERSION);
    glutInitContextProfile(GLUT_CORE_PROFILE);

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA);
    glutInitWindowSize(w, h);
    glutCreateWindow(title);

    printf("Using OpenGL Version: %s\n=========\n", (char*)glGetString(GL_VERSION));

    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, w, h, 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);

    glEnable(GL_TEXTURE_2D);
    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_SMOOTH);
    glEnable( GL_ALPHA_TEST );
    glEnable( GL_BLEND );

    GLenum error;
    GLuint id = 0;

    glGenTextures(1, &id);
    if((error = glGetError()) != GL_NO_ERROR || id == 0)
    {
        printf("Gl error: %s (errno %i)\n", gluErrorString(error), error);
        return 0;
    }

    while (1) { }

    return 0;
}

【问题讨论】:

    标签: c linux opengl freeglut


    【解决方案1】:

    错误可能不会发生在您期望它发生的行中。 glGenTextures 之前的一些方法很有可能是问题所在。这两行都不是

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, w, h, 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    
    glShadeModel(GL_SMOOTH);
    

    在 OpenGL 核心配置文件中是允许的。 Profiles 是在 OpenGL 3.2 中引入的,因此 Core Profile 请求在请求 3.0 上下文时没有任何效果。但是在 3.2+ 中,您将获得一个核心配置文件,其中删除了很多东西。

    您可以删除上面提到的行并将其替换为与 Core-Profile 兼容的代码。或者,您可以明确请求兼容性配置文件(glutInitContextProfile(GLUT_COMPATIBILITY_PROFILE),当您想坚持使用固定功能管道时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多