Inicio > Algo nuevo por descubrir, Un problema, una solución > Dingoo A-320: Hola mundo en C++ con Visual Studio 2008

Dingoo A-320: Hola mundo en C++ con Visual Studio 2008

Miércoles, 22 de abril de 2009

image thumb4 Dingoo A 320: Hola mundo en C++ con Visual Studio 2008 Pues poco más que decir; descarga el siguiente ejemplo, descomprímelo en C:\s2dsdk\example\, ejecuta el fichero vs.bat creado anteriormente en la instalación de las SDK y desde Visual Studio 2008 abre la solución que acompaña a este ejemplo.

Compílala y ejecuta el ejemplo (no hace falta que lo hagas en la Dingoo lo puedes evaluar en el IDE).

Puntos de interés:

Voy a intentar explicar en detalle el ejemplo ya que puede ser un poco enredado si es la primera vez que te enfrentas a uno como este.

Hello world pixel [330.3 KB] – zip

Lo primero es entender que este primer ejemplo utiliza un puntero a la VRAM para realizar la escritura en pantalla. De tal forma que escribimos punto a punto todo lo que en ella deseemos pintar. Podemos entenderla como una simple matriz, cada una de las coordenadas de la matriz corresponde a un punto de la pantalla, es decir, un píxel.

A la hora de pintar sobre una pantalla lo primero es inicializarla:

/// init all resources
result    GameEngine::Init( void )
{
    InitDLRes();
    // 16 FPS
    SetFPS( 24 );

    return S2D_OK;
}

Al inicializarla se inicializa de un cierto modo. Por defecto en nuestro ejemplo el modo de pantalla es el RGB565, es decir, cada elemento de la matriz es un RGB565, que es un elemento de dos bytes. (RGB565 un total de 16 bits, de 2 bytes cada uno)

Por lo tanto, escribir un punto en la pantalla en esencia es escribir dos bytes en la matriz de bytes.

Para obtener el puntero a la VRAM (el área de dibujo) hemos de invocar al método GetVRAMPtr() del objeto m_pDraw2D de la s2d, para ello valdrá con algo tan simple como:

Pixel* ptr = m_pDraw2D->GetVRAMPtr();

Con esta breve explicación ya has comprender cómo obtener la primera dirección del puntero de la matriz, pero nos tenemos que hacer las siguientes dos preguntas:

Si quiero utilizar (x, y) como las coordenadas de un punto, ¿cómo puedo acceder a la matriz para facilitar el acceso a cada punto?.

offset = (x * ancho) + y

s32 ofs = (x*A320_SCREEN_WIDTH) + y;

Nota: Este desplazamiento es de 2 bytes.

Si quiero una pantalla de color pintada mediante valores RGB, ¿Como se convierte el valor RGB en un dato de 2-byte?

En primer lugar hay que entender que significa RGB; rgb corresponde con la forma más natural de crear un punto formado por tres colores (rojo, verde y azul).

Para definir un pixel y su valor rgb puede utilizar cualquiera de las siguientes expresiones del SDK s2d asociado a un tipo Pixel:

/ / Pix1 por un punto rojo
Pixel pix1 (255, 0, 0);

/ / Pix2 por un punto verde
Pixel pix2;
pix2.r (0);
pix2.g (255);
pix2.b (0);

/ / Pix3 por un punto azul
Pixel pix3;
pix3.rgb (0, 0, 255);

Vale, la teoría esta pasable, pero ¿como implementamos esto en c++?;

/// render
void    GameEngine::Render( void )
{
    //Pixel by pixel
    int r = 0;
    int g = 0;
    int b = 0;
    for(int i = 0; i < A320_SCREEN_HEIGHT;i++)
    {
        for (int j=0; j < A320_SCREEN_WIDTH; j++)
        {
            r+=1;
            PutPixel(i,j,r,g,b);
        }
        int r = 0;
        int g = 0;
        int b = 0;
    }
}

…………………………
void GameEngine::PutPixel(int x, int y, u8 r,u8 g, u8 b )
{
    Pixel* ptr = m_pDraw2D->GetVRAMPtr();
    Pixel color1(r,g,b);
    s32 ofs = (x*A320_SCREEN_WIDTH) + (y);

    ptr[ofs] = color1;
}

Algo nuevo por descubrir, Un problema, una solución ,

Imprimelo! Imprimelo! | Imprimelo! Guardalo como PDF!

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (2 votes, average: 4,50 out of 5)
Loading ... Loading ...

  1. Domingo, 31 de enero de 2010 a las 17:04 | #1

    Lo se, pero Dingoo no lo abre, igual falta algun fichero que debe estar o la compilación no funciona… Por favor si puedo te envio el que compile y lo pruebas en tu Dingoo a ver. Grácias.

  2. Domingo, 31 de enero de 2010 a las 21:35 | #2

    Afinal no es problema de mi compilación, lo que ocurre es que daba error al compilar para Dingoo, y como siempre genera el target.app te engaña. Si te fijas el que tienes en tu zip tampoco funciona, por el tamaño se nota que no tiene nada. Si lo puedes compilar correctamente para Dingoo te agradecia que lo comentarás y pusieras la solución. Grácias

  3. Lunes, 1 de febrero de 2010 a las 21:41 | #4

    Pero tu ejemplo incluido en el hola mundo tambien viene vacio, has probado tu target.app en la dingoo ? Tampoco lo tienes bien compilado. He compilado un juego con el mismo SDK y si que ha compilado sin errores y me ha funcionado … Por favor sólo te pido que lo compruebes.

Comment pages
  1. Sin trackbacks aún.