可以在iPhone 5S和iPad Air中绘制填充矩形

时间:2014-06-04 00:56:38

标签: ios iphone ipad opengl-es cocos2d-iphone

此代码绘制一个填充的矩形:

void ccDrawFilledRect( CGPoint v1, CGPoint v2 )
{
    CGPoint poli[]={v1,CGPointMake(v1.x,v2.y),v2,CGPointMake(v2.x,v1.y)};

    // Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
    // Needed states: GL_VERTEX_ARRAY,
    // Unneeded states: GL_TEXTURE_2D, GL_TEXTURE_COORD_ARRAY, GL_COLOR_ARRAY
    glDisable(GL_TEXTURE_2D);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);

    glVertexPointer(2, GL_FLOAT, 0, poli);
    glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

    // restore default state
    glEnableClientState(GL_COLOR_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glEnable(GL_TEXTURE_2D);
}

它一直有效,直到我开始使用iPhone 5S和iPad Air。我不明白为什么它不适用于这些设备 - 对其他所有设备都没问题。始终使用最新的iOS版本。

它可能是什么?

我怀疑这很重要,但我一直在使用cocos2d-iphone 1.0.1

1 个答案:

答案 0 :(得分:1)

固定。

void ccDrawFilledRect( CGPoint v1, CGPoint v2 ) {

    float vertices[] = {
        v1.x,  v1.y,      // Bottom left
        v2.x,  v1.y,  // Bottom right
        v2.x,  v2.y, // Top right
        v1.x, v2.y // Top left
    };

    glDisable(GL_TEXTURE_2D);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);

    glVertexPointer(2, GL_FLOAT, 0, vertices);
    glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

    glEnableClientState(GL_COLOR_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glEnable(GL_TEXTURE_2D);
}

不,我完全不知道为什么旧的代码在iPhone 5S和iPad Air中失败了,但是这个新代码现在似乎适用于所有设备。