2013-08-28 5 views
0

У меня есть текстура, которую я отображающая используя следующее: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 для загрузки/отображения текстур.

+0

попробуйте сделать небольшие шаги: сначала загрузите текстуру и попробуйте ее визуализировать (без включения blening), затем добавьте смешение. загрузите текстуру с помощью этих флагов: SOIL_FLAG_INVERT_Y (только один флаг, просто для проверки). Если у вас есть рабочая текстура, тогда попробуйте добавить blending ... – fen

+0

Вы когда-нибудь перегружаете 'glEnable (GL_TEXTURE_2D)' после первого кадра? – genpfault

+0

Какой тип 'tex' в первом блоке кода? – genpfault

ответ

3
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); 
.... 

Вы генерируя совершенно новый пустой текстуры каждый кадр. Который также бывает incomplete.

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