MIP-отображение включено без полной MIP-цепочки

Следующее мое create texture функция:

- (GLuint)setupTexture:(NSString *)fileName {

    // 1
    CGImageRef spriteImage = [UIImage imageNamed:fileName].CGImage;
    if (!spriteImage) {
        NSLog(@"Failed to load image %@", fileName);
        exit(1);
    }

    // 2
    size_t kWidth = CGImageGetWidth(spriteImage);
    size_t kHeight = CGImageGetHeight(spriteImage);

    // 3
    GLubyte * spriteData = (GLubyte *) calloc(kWidth*kHeight*4, sizeof(GLubyte));

    // 4
    GLuint texName;
    glGenTextures(1, &texName);
    glBindTexture(GL_TEXTURE_2D, texName);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA, (int)kWidth, (int)kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData);
    glGenerateMipmap(GL_TEXTURE_2D);

    //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL_APPLE, 0);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glBindTexture(GL_TEXTURE_2D, 0);

    return texName;
}

Я использую захват GPU в XCode, и нахожу ошибку как это:

Я новичок в OpenGL, как я могу решить это? Спасибо большое!

1 ответ

Посмотрите на номер дескриптора текстуры на скриншоте, 391341552. Маловероятно, что в одном процессе будет столько текстур. Кажется, проблема связана не с настройкой, а с привязкой текстур перед рисованием.

Обычно, после того, как вы успешно настроили текстуры и массивы вершин, вы рисуете их следующим образом:

glUseProgram(programDescriptor);
glBindVertexArray(vertexArrayDescriptor);
glUniform(...);
glBindTexture(GL_TEXTURE_2D, textureDescriptor);
glDrawArrays(GL_TRIANGLE_STRIP, 0, verticesQuantity);

Возможно, вы передали какой-то указатель в glBindTexture?

Другие вопросы по тегам