2010-01-08 5 views
4

Я занимаюсь этим уже довольно давно, читая учебные пособия и т. Д., И я не могу понять, что, черт возьми, не так с этим, может кто-нибудь еще помочь мне понять, что происходит не так?Почему текстура opengl-es выглядит белой?

// Sets up an array of values to use as the sprite vertices. 
const GLfloat spriteVertices[] = { 
    20.0f, 50.5f, 
    305.0f, 50.0f, 
    10.5f, 200.5f, 
    300.5f, 300.5f, 
}; 

// Sets up an array of values for the texture coordinates. 
const GLshort spriteTexcoords[] = { 
    0, 0, 
    100, 0, 
    0, 100, 
    100, 100, 
}; 

-(void)setupView:(GLView*)view { 
    glMatrixMode(GL_PROJECTION); 
    CGRect rect = view.bounds; 

    glOrthof(0, rect.size.width, rect.size.height, 0, -1, 1); 
    glViewport(0, 0, rect.size.width, rect.size.height); 
    glMatrixMode(GL_MODELVIEW); 
    glDepthMask(GL_FALSE); 
    glLoadIdentity(); 

    CGImageRef spriteImage = [UIImage imageNamed:@"rss_icon.png"].CGImage; 
    size_t width = CGImageGetWidth(spriteImage); 
    size_t height = CGImageGetHeight(spriteImage); 

    GLubyte *spriteData = 
     (GLubyte *) calloc(width * height * 4, sizeof(GLubyte)); 

    CGContextRef spriteContext = CGBitmapContextCreate(
     spriteData, width, height, 8, width * 4, 
     CGImageGetColorSpace(spriteImage), kCGImageAlphaPremultipliedLast 
    ); 

    CGContextDrawImage(
     spriteContext, 
     CGRectMake(0.0, 0.0, (CGFloat)width, (CGFloat)height), 
     spriteImage 
    ); 

    CGContextRelease(spriteContext); 

    glGenTextures(1, &texture[0]); 
    glBindTexture(GL_TEXTURE_2D, texture[0]); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
    glTexImage2D(
     GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, 
     GL_RGBA, GL_UNSIGNED_BYTE, spriteData 
    ); 
    free(spriteData); 

    glEnable(GL_TEXTURE_2D); 
    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 
    glEnable(GL_BLEND); 
} 

код Draw:

- (void)drawView:(UIView *)theView { 
    glLoadIdentity(); 
    glClearColor(0.0, 0.0, 0.0, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glEnable(GL_TEXTURE_2D); 
    glEnable(GL_BLEND); 

    glVertexPointer(2, GL_FLOAT, 0, spriteVertices); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glTexCoordPointer(2, GL_SHORT, 0, spriteTexcoords); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
} 

ответ

2

Очевидная проблема может быть, что ваша текстура имеет размеры, которые не двойки. Там есть ограничение аппаратных средств на Iphone, что требует от них, чтобы быть таким образом

С iPhone от Apple OpenGL ESProgramming Guide:

перечислены известные ограничения, в iPhone OS 3.0 следующее: PowerVR SGX делает не поддерживает бесприводной из двух кубов отображенные или mipmapped текстуры

+1

Они никогда не отключены. Конечно, я добавил их непосредственно перед рисованием. – Jacob

+2

Размеры изображения: 2? –

+0

ie 8,16,32,64,128 ... Нет, это не было упомянуто, что было важно во всем, что я прочитал! пытаясь это сейчас, спасибо. – Jacob

Смежные вопросы