Duda con medida de puntero a píxel (SDL)

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

Duda con medida de puntero a píxel (SDL)

Notapor endaramiz » Sab Feb 14, 2009 5:59 pm

Hace unos días que me he comenzado a interesar por el manejo gráfico a bajo nivel. Busqué información y encontré el capítulo 1 del tutorial de RCAF de esta misma web. Lo he ido siguiendo y he conseguido hacer un ejemplo muy simple. Pero el problema que tengo es conceptual. En el tutorial se utiliza un Uint8 (char) y a mí también me funciona así pero no entiendo por qué es de 8 y no de 16 si la superficie tiene 16 bits por píxel y por lo tanto el color también está en 16 bits.

Código: Seleccionar todo
#include <iostream>
#include <SDL/SDL.h>
using namespace std;

long long db(int n) {
    if (n > 0) return db(n/2)*10 + n%2;
    return 0;
}

void putpixel(SDL_Surface *surface, int x, int y, SDL_Color color) {
    //SDL_LockSurface(surface);
    Uint32 col = SDL_MapRGB(surface->format, color.r, color.g, color.b);
    cerr << "col: " << db(col) << endl;
    Uint8 *buffer;
    buffer = (Uint8*) surface->pixels;
    buffer += surface->pitch*y;
    buffer += surface->format->BytesPerPixel*x;
    memcpy(buffer, &col, surface->format->BytesPerPixel);
    //*buffer = col;
    //SDL_UnlockSurface(surface);
}

int main() {
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Surface *screen = SDL_SetVideoMode(640, 400, 16, SDL_HWSURFACE);
    cerr << "Bitspp: " << screen->format->BitsPerPixel*1 << endl;
    SDL_Color color;
    color.r = 255;
    color.g = 0;
    color.b = 0;
    for (int i = 0; i < 15; ++i) {
        putpixel(screen, i, i, color);
        putpixel(screen, i, i+1, color);
        putpixel(screen, i, i+2, color);
    }
    SDL_Event event;
    bool salir;
    while(not salir) {
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_KEYDOWN) salir = true;
            else SDL_Flip(screen);
        }
    }
    SDL_Quit();
}


Saludos y gracias de antemano y a RCAF por el manual que me ha ayudado en mis primeros pasos con píxeles.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

Notapor endaramiz » Sab Feb 14, 2009 10:07 pm

Vale, creo que ya lo he entendido. Es porque se utiliza la medida BytesPerPixel (y como un byte son 8 bits...) para el desplazamiento de puntero. ¿No?

Saludos.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado