Pulxar

Compilador escrito en C# para:

   

    1º MIPS-32 "assembly language"

        ARM7A "Raspberry PI 3"

        x86 (32-bits) "usando NASM"

    2º ARM7TDMI "GameBoy Advance"

    3º Atmel AVR "ATmega328p"

Compilador para el lenguaje de programación "Pulxar", lenguaje orientado a objetos y con sintaxis muy parecida a C#, inspirado por el compilador "Blue" y "LLVM#".

Pulxide-experimental

  Pulxide (Fecha de publicación: 14 de Julio de 2017)

Por ahora 'Pulxide' es un experimento, pero he querido subir el trabajo realizado hasta ahora pues comienzo mis vacaciones y el tiempo que voy a dedicarle será escaso. Alguien interesado podrá examinar el código.

Nuevamente la documentación es escasa, aún cuando yo la considero vital, espero subsanarlo en el futuro. Hay tanto código que puede y debe cambiar que documentar algo ahora no tiene sentido, por ejemplo, los Widgets 'MenuStrip' probablemente deba reescribirlos.

Descripción general:

OpenTK opera básicamente con dos operaciones 'OpenTK.UpdateFrame()' y 'OpenTK.RenderFrame()', y el widget 'HUD' que es una subclase de 'Widget.WHUD' se suscribe a estas operaciones o eventos.

Cada Widget debe solicitar una actualización de su disposición o 'Layout-update' cuando cambian sus dimensiones o su posición.

Las suscripciones de actualización de disposición (layout-update) se almacena en 'Widget.BackLayoutsToUpdate', un 'LayoutList'.

Por ahora, cuando un Widget quiere pintarse simplemente se pinta el 'HUD' principal, es decir, se pintan todos los Widgets. Sí ningún Widget solicita el repintado, no se actualiza el 'SwapBuffer' de OpenTK, tampoco se borra.

Idealmente solo debe actualizarse el pintado del 'HUD' cuando los 'Layouts' han acabado de actualizarse, ver Widget.WHUD.ProcessUpdate() método, esto es un poco arriesgado porque todo se realiza en un bucle;

while (BackLayoutsToUpdate.Count > 0)  {

                .....................

}

Cada 'layout' actualizado se elimina de 'BackLayoutsToUpdate' y llega un momento en el que BackLayoutsToUpdate.Count  debe ser igual a cero.

He tenido que incorporar medidas de control (layoutEnable, LayoutRunning, etc) para que siempre se salga del bucle pero en las primeras etapas de desarrollo a veces entraba en un ¡¡¡ bucle infinito !!!, porque,

BackLayoutsToUpdate.Count nunca llegaba a valer 0.

Por ahora es todo .... saludos