CCTransitionPageTurn no funciona después de usar opengl

Estoy usando CCTansitionPageTurn para cambiar de escena. Funciona bien para la mayoría de las escenas, pero tengo una escena para colorear que dibuja con gl. Una vez que comienza la coloración, CCTransitionPageTurn no funciona para ninguna transición de escena, incluso aquellas que funcionaban bien antes. (Todavía puedo moverme a otra escena sin problemas, pero el efecto de cambio de página está roto).

Creo que puede tener que ver con alterar el estado gl antes de que se llame a la transición, pero restaurar el estado gl predeterminado no funcionó. Hay potencialmente muchos lugares en el código donde está el problema, pero aquí hay un código en el que estoy jugando con gl.

/* ColoringGameScene : CCScene, which handles drawing menus and other cool UI things */

// In init
CCLayerColor *layer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)];
[self addChild:layer];
TouchDraw *drawObj = [TouchDraw node];
[drawObj setDrawPoints:_drawPoints];
[layer addChild:drawObj z:999];

// In -(void)ccTouchMoved:(UITouch *) touch withEvent:(UIEvent *)event
// drawPoints, an array of points to draw is updated.  drawObj has a reference to this array


/* In TouchDraw : CCNode, which handles gl drawing */

// In init
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POINT_SMOOTH);
glEnable(GL_POINT_SMOOTH_HINT);
glEnable(GL_LINE_SMOOTH_HINT);
glHint(GL_POINT_SMOOTH_HINT,GL_NICEST);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_BLEND_COLOR); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glLineWidth(8);
glPointSize(8);

// elsewhere

-(void)drawCircle:(CGPoint)center radius:(float)r arc:(float)a line:(NSUInteger)segs lineToCenter: (BOOL)drawLineToCenter
{
int additionalSegment = 1;
if (drawLineToCenter)
    additionalSegment++;

const float coef = 2.0f * (float)M_PI/segs;

GLfloat *vertices = calloc( sizeof(GLfloat)*2*(segs+2), 1);
if( ! vertices )
    return;

for(NSUInteger i=0;i<=segs;i++)
{
    float rads = i*coef;
    GLfloat j = r * cosf(rads + a) + center.x;
    GLfloat k = r * sinf(rads + a) + center.y;

    vertices[i*2] = j * CC_CONTENT_SCALE_FACTOR();
    vertices[i*2+1] =k * CC_CONTENT_SCALE_FACTOR();
}
vertices[(segs+1)*2] = center.x * CC_CONTENT_SCALE_FACTOR();
vertices[(segs+1)*2+1] = center.y * CC_CONTENT_SCALE_FACTOR();

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

glVertexPointer(2, GL_FLOAT, 0, vertices);  
glDrawArrays(GL_TRIANGLE_FAN, 0, (GLsizei) segs+additionalSegment);

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

free( vertices );
}

-(void)draw
{
[super draw];

    if ([drawPoints count])
{
        for(int i = 0; i < [drawPoints count]; i += 4)
        {
            CGPoint point0 = CGPointFromString([drawPoints objectAtIndex:i]);
            CGPoint point1 = CGPointFromString([drawPoints objectAtIndex:i+1]);
            CGPoint point2 = CGPointFromString([drawPoints objectAtIndex:i+2]);
            CGPoint point3 = CGPointFromString([drawPoints objectAtIndex:i+3]);

            glColor4f(255.0f/255.0f, 0.0f/255.0f, 0.0f/255.0f, 1.0f); // Red
            glLineWidth(8);
            glPointSize(8);

            // various calls to drawCirle and ccDrawCubicBezier

            //default
            glColor4f(0.0f/255.0f, 0.0f/255.0f, 0.0f/255.0f, 0.0f);
        }
    }
}

Avíseme si más código sería útil.

preguntado el 12 de junio de 12 a las 20:06

1 Respuestas

Soy principiante en openGL, pero como sé, la configuración de OpenGL es la misma para todo su programa. Algún código de su propio dibujo debería cambiar algo en esta configuración. Este puede ser el motivo de tu eshue. No puedo decirte más, pero deberías trabajar en esta pregunta.

Respondido el 13 de junio de 12 a las 03:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.