Dudas sobre sceUtilityNetconf y render GU.

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06

davidgf
Desarrollador
Desarrollador
Mensajes: 65
Registrado: 26 Feb 2010, 23:53

Dudas sobre sceUtilityNetconf y render GU.

Mensaje por davidgf »

Hola chicos!

Necesito que alguien me aporte un poco de luz en este tema tan espinoso como es el PSPSDK y las funciones de render de GU.
La cuestión es que para no complicarme la vida uso un pedazo de código llamado EasyConnect de un foro de PSP de por ahí. El código en cuestión está pensado para GU así que su loop pinta así:

Código: Seleccionar todo

        sceGuStart(GU_DIRECT, list);
        sceGuClearColor(bgcolor);
        sceGuClearDepth(0);
        sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);
        sceGuFinish();
        sceGuSync(0, 0);
        sceUtilityNetconfUpdate(1);
        sceDisplayWaitVblankStart();
        sceGuSwapBuffers();
        sceNetApctlGetState(&newstate);


El problema es que yo uso SDL con PSPGL y ese código no me hace un clear del background, con lo cual cada nuevo render del NetConf deja un rastro a lo fantasma detrás.
Si inicializo el GU así antes de meterme en el loop (lo que el que hizo la clase propone para aquellos que no usen GU por sí mismos) es:

Código: Seleccionar todo

    sceGuInit();
    sceGuStart(GU_DIRECT, list);
    sceGuDrawBuffer(GU_PSM_8888, (void*) 0, 512);
    sceGuDispBuffer(480, 272, (void*) 0x88000, 512);
    sceGuDepthBuffer((void*) 0x110000, 512);
    sceGuOffset(2048 - (480 / 2), 2048 - (272 / 2));
    sceGuViewport(2048, 2048, 480, 272);
    sceGuDepthRange(0xc350, 0x2710);
    sceGuScissor(0, 0, 480, 272);
    sceGuEnable(GU_SCISSOR_TEST);
    sceGuDepthFunc(GU_GEQUAL);
    sceGuEnable(GU_DEPTH_TEST);
    sceGuFrontFace(GU_CW);
    sceGuShadeModel(GU_SMOOTH);
    sceGuEnable(GU_CULL_FACE);
    sceGuEnable(GU_CLIP_PLANES);
    sceGuEnable(GU_BLEND);
    sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, 0, 0);
    sceGuFinish();
    sceGuSync(0, 0);

    sceDisplayWaitVblankStart();
    sceGuDisplay(GU_TRUE);


El problema es que una vez hecho esto y salido del mainloop no hay dios que consiga que PSPGL renderice de nuevo. No he probado a llamar a SDL_Init de nuevo, aviso. Pero mi idea era no tener que hacerlo. He probado a cambiar el código de clear por un glClear, pero el render que hace es rarisimo (salen rectángulos en lugar de las frases) y todo parpadea que da gusto.

Alguien tiene alguna idea? Mil gracias!!!!

Una pregunta extra: Si tengo un exception handler (el típico que usa todo dios en PSP) por qué se puede apagar la PSP de golpe? Qué excepción no puede el exception handler capturar?
Y ya por rizar el rizo, es posible que lanzando mi juego des de IR Shell no me deje arrancar mis .prx? Por que veo en mis logs que no los arranca...

Gracias de nuevo!!

David

Responder