2013-01-06 13 views
5

W OpenGL 2.1+ czy przed użyciem tekstur musimy zadzwonić pod numer glEnable(GL_TEXTURE)? A jeśli mamy kłopot z fakturą, co może być przyczyną?Czy konieczne jest wywoływanie glEnable (GL_TEXTURE) przed użyciem tekstur w OpenGL 2.1?

Aktualizacja:

używam OpenGL 2.1 dla komputerów stacjonarnych i mój krok jest:

  1. obciążenia bmp 24-bitowy obraz (sprawdziłem w gDebuger i pokazać moją teksturę ok, tak jestem pewien, że moja procedura obrazu obciążenia nie powiodła się).

  2. połączeń kilka OpenGL funkcje w init() procedude:

    glGenTextures(1, &texture_id); 
    glBindTexture(GL_TEXTURE_2D, texture_id); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image_width, image_height, 0, GL_BGR, GL_UNSIGNED_BYTE, image_data); 
    
  3. aw draw_scene():

    glUseProgram(program); 
    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, texture_id); 
    glUniform1i(uniform_texture, 0); 
    ... 
    
  4. Vertex shader (wersja 120):

    attribute vec3 vPos; 
    attribute vec2 vTexCoord; 
    
    uniform mat4 MV; 
    uniform mat4 Projection; 
    
    varying vec2 fragTexCoord; 
    
    void main() 
    { 
        fragTexCoord = vTexCoord; 
        gl_Position = Projection * MV * vPos; 
    } 
    
  5. Moduł cieniowania fragmentów:

    uniform sampler2D my_texture; 
    varying vec2 fragTexCoord; 
    
    void main() 
    { 
        gl_FragColor = texture2D(my_texture, fragTexCoord); 
    } 
    
+1

Jeśli używasz cieniowania, to wątpię, aby 'glEnable (GL_TEXTURE)' cokolwiek zrobił. Czy możesz dać zrzut ekranu z tego, co dostajesz, lub opisać problem z wyjściem, który masz bardziej szczegółowo? – TheAmateurProgrammer

+0

Myślę, że niektóre z moich błędów parametrów, wyczyściłem i przepisałem cały kod tekstury i teraz działa! Czy ktoś może mi wyjaśnić, co różni bettwen 'GL_RGBA8',' GL_RGBA', ... in 'internalFormat'? Jeśli użyłem 'GL_RGB' w' internalFormat', to czy mogę uzyskać dostęp do elementu alpha w shaderze fragmentów, jak: 'texture2D (myTexture, texCoord) .a'? –

Odpowiedz

3

Jeśli używasz shaderów GLSL w OpenGL 2.1, a następnie wezwanie do glEnable(GL_TEXTURE_*) nie ma sensu. Stosujesz teksturę w module cieniującym fragmentu.

Jeśli zamierzasz przejść do profilu podstawowego OpenGL 3.x, należy pamiętać, że glEnable(GL_TEXTURE_*) jest przestarzałe.

Powiązane problemy