opengl отображает белое поле вместо текстуры

У меня есть текстура, которую я показываю, используя следующее:

    glEnable (GL_BLEND);
glEnable(GL_TEXTURE_2D);
        glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
        glGenTextures(1, tex);
    glBindTexture (GL_TEXTURE_2D, *tex);
        glBegin (GL_QUADS);
        glTexCoord2f (tx, ty);
        glVertex2f (sx, sy);
        glTexCoord2f (tw, ty);
        glVertex2f (sx + sxmax, sy);
        glTexCoord2f (tw, th);
         glVertex2f (sx + sxmax, sy + symax);
        glTexCoord2f (tx, th);
       glVertex2f (sx, sy + symax);
        glEnd();
        glDisable (GL_TEXTURE_2D);
        glDisable (GL_BLEND);

Я загружаю текстуру, используя следующее:

    GLuint GetTexture(string Filename)
    {
        GLuint tex_ID;

        tex_ID = SOIL_load_OGL_texture(
                     Filename.c_str(),
                     SOIL_LOAD_AUTO,
                     SOIL_CREATE_NEW_ID,
                     SOIL_FLAG_POWER_OF_TWO
                     | SOIL_FLAG_MIPMAPS
                     | SOIL_FLAG_MULTIPLY_ALPHA
                     | SOIL_FLAG_COMPRESS_TO_DXT
                     | SOIL_FLAG_DDS_LOAD_DIRECT
                     | SOIL_FLAG_INVERT_Y
                 );

        if( tex_ID > 0 )
        {

            glEnable( GL_TEXTURE_2D );

            glBindTexture( GL_TEXTURE_2D, tex_ID );

            return tex_ID;
        }
        else
        {
            cout<<"Texture failed to load"<<SOIL_last_result()<<Filename<<endl;
            return 0;
        }
    }

и передать его по ссылке в класс

Когда я запускаю проверку правильности загрузки текстуры:

if(tex==0)

Это. Кроме того, всякий раз, когда я запускаю glColor3f(); с некоторыми значениями, на экране ничего не отображается. что я сделал не так?

Я использую glfw и SOIL для загрузки/отображения текстур.


person user2673108    schedule 28.08.2013    source источник
comment
попробуйте делать небольшие шаги: сначала загрузите текстуру и попытайтесь отрендерить ее (без включения смешивания), затем добавьте смешивание. загрузите текстуру, используя эти флаги: SOIL_FLAG_INVERT_Y (только один флаг, просто для проверки). Если у вас есть рабочая текстура, попробуйте добавить смешивание...   -  person fen    schedule 28.08.2013
comment
Вы когда-нибудь повторно glEnable(GL_TEXTURE_2D) после первого кадра?   -  person genpfault    schedule 28.08.2013
comment
Какой тип tex в первом блоке кода?   -  person genpfault    schedule 28.08.2013
comment
Да, я повторно включил gl_texture_2d, просто пропустил его при копировании, tex объявлен следующим образом: GLuint * tex;   -  person user2673108    schedule 28.08.2013
comment
удаление смешивания, кажется, не имеет значения   -  person user2673108    schedule 28.08.2013
comment
Вы знаете, что наличие ненулевого значения tex на самом деле не указывает, правильно ли он загружен или нет? Единственное, что это указывает, это то, что OpenGL сгенерировал для вас дескриптор объекта (имя), дескриптор не обязательно имеет связанное с ним хранилище данных. На самом деле, в более старых реализациях OpenGL даже не знает, что должен представлять сгенерированный дескриптор, пока вы не вызовете glTexImage2D (...) или не попытаетесь связать его — вы могли бы вызвать glGenTextures (...), а затем использовать этот дескриптор как VBO, если хотите: P   -  person Andon M. Coleman    schedule 29.08.2013


Ответы (1)


glEnable (GL_BLEND);
glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
glGenTextures(1, tex);
^^^^^^^^^^^^^^^^^^^^^ I hope tex didn't have anything important in it...
glBindTexture (GL_TEXTURE_2D, *tex);
glBegin (GL_QUADS);
....

Вы создаете совершенно новую пустую текстуру каждый кадр. Что также оказывается незавершенным.

Создайте текстуру один раз и используйте ее.

person genpfault    schedule 28.08.2013