GlGenTextures продолжает возвращать 0 - PullRequest
7 голосов
/ 06 июня 2010

Я пытаюсь сгенерировать текстуры так:

#define checkImageWidth 64
#define checkImageHeight 64
static GLubyte checkImage[checkImageHeight][checkImageWidth][4];
static GLubyte otherImage[checkImageHeight][checkImageWidth][4];

static GLuint texName[2];

void makeCheckImages(void)
{
    int i, j, c;

    for (i = 0; i < checkImageHeight; i++) {
        for (j = 0; j < checkImageWidth; j++) {
            c = ((((i&0x8)==0)^((j&0x8))==0))*255;
            checkImage[i][j][0] = (GLubyte) c;
            checkImage[i][j][1] = (GLubyte) c;
            checkImage[i][j][2] = (GLubyte) c;
            checkImage[i][j][3] = (GLubyte) 255;
            c = ((((i&0x10)==0)^((j&0x10))==0))*255;
            otherImage[i][j][0] = (GLubyte) c;
            otherImage[i][j][1] = (GLubyte) 0;
            otherImage[i][j][2] = (GLubyte) 0;
            otherImage[i][j][3] = (GLubyte) 255;
        }
    }
}
void init(void)
{    
    glClearColor (1.0, 0.0, 0.0, 0.0);
    glShadeModel(GL_FLAT);
    glEnable(GL_DEPTH_TEST);

    makeCheckImages();
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

    glGenTextures(2, texName);
    glBindTexture(GL_TEXTURE_2D, texName[0]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
        GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
        GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth,
        checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,
        checkImage);

    glBindTexture(GL_TEXTURE_2D, texName[1]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
        GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
        GL_NEAREST);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);   
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, 
        checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 
        otherImage);
    glEnable(GL_TEXTURE_2D);

    engineGL.current.tex = texName[1];
}

Но когда я проверяю значения texName [0] и [1], они оба равны 0, я не понимаю почему, что я делаю неправильно. Спасибо.

Ответы [ 5 ]

20 голосов
/ 07 июня 2010

Возможно, вы вызываете glGenTextures перед созданием контекста OpenGL, и это приведет к ошибке GL. Не пытайтесь создавать текстуры до инициализации OpenGL.

14 голосов
/ 13 сентября 2014

У меня была эта проблема, и glGetError() возвращал 0.

В моем случае это было вызвано вызовом glGenTextures(...) в другом потоке, отличном от того, в котором был создан контекст GL (поскольку я загружал текстуры асинхронно). Вызывая его из основного потока после , асинхронная загрузка сделала glGenTextures(...), чтобы начать работать снова.

8 голосов
/ 06 июня 2010

Попробуйте позвонить glGetError. Он должен рассказать вам более подробно, что пошло не так. В общем случае, если функция OpenGL дает сбой, первое, что вы должны сделать, это спросить OpenGL, почему это не удалось. Он знает, потому что он только что попытался выполнить функцию.

Нам гораздо сложнее угадать, что могло пойти не так.

0 голосов
/ 09 февраля 2017

перед вызовом glGenTexture, ваш контекст opengl должен быть создан и XXXMakeCurrent'ed

0 голосов
/ 22 декабря 2014

В моем случае я «лениво загружал» свою текстуру, поэтому glGenTexture была внутри команды glBegin / glEnd!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...