2012-11-27 4 views
1

Je souhaite dessiner un carré simple avec la taille de l'écran plein avec la méthode glDrawArray dans cocos2d. Lorsque la rétine est désactivée, tout se passe comme prévu, mais lorsqu'elle est activée, tout est moitié moins grand. (Il semble que le système de coordonnées de glDrawArray ne soit pas en points mais en pixels)Problèmes glDrawArrays sur l'affichage Retina

D'autres fonctions de dessin fonctionnent comme prévu mais comme je dessine des formes compliquées, nous devons utiliser glDrawArray car il est beaucoup plus rapide.

Des idées pour résoudre ce problème?

-(void) draw 
{ 
    CGPoint box[4]; 
    CGPoint boxTex[4]; 

    CGSize winSize = [[CCDirector sharedDirector] winSize]; 

    //float boxSize = winSize.width; 

    box[0] = ccp(0,winSize.height); // top left 
    box[1] = ccp(0,0); // bottom left 
    box[2] = ccp(winSize.width,winSize.height); 
    box[3] = ccp(winSize.width,0); 

    boxTex[0] = ccp(0,1); 
    boxTex[1] = ccp(0,0); 
    boxTex[2] = ccp(1,1); 
    boxTex[3] = ccp(1,0); 

    // texture backround 
    glBindTexture(GL_TEXTURE_2D, self.sprite.texture.name); 
    glVertexPointer(2, GL_FLOAT, 0, box); 
    glTexCoordPointer(2, GL_FLOAT, 0, boxTex); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
} 

Répondre

2

Oui, le dessin se fait en pixels, afin de traiter un rendu correct sur l'écran de la rétine ainsi, vous devez multiplier vos sommets par CC_CONTENT_SCALE_FACTOR():

for (int i = 0; i < 3; i++) 
    box[i] = ccpMult(box[i], CC_CONTENT_SCALE_FACTOR()); 

retourne CC_CONTENT_SCALE_FACTOR 2 sur les appareils de la rétine au lieu de 1, donc l'utiliser devrait prendre soin de la mise à l'échelle.