2017-04-06 7 views
0

SDL_Surfacepixelsメンバーからキャストされたunsigned charピクセル配列に色付きの矩形を描画する方法を解明しようとしています。SDL_Surfaceピクセルで長方形を描く

次の関数は、前者を行うことになっている。

void draw_rectangle(SDL_Surface* surface, int x, int y, int width, int height) 
{ 
    SDL_LockSurface(surface); 
    //Make each pixel black 
    std::vector<uint8_t> pixels(surface->h * surface->pitch, 0); 

    for (int dy = y; dy < height; dy++) { 
     for (int dx = x; dx < width; dx++) { 
      pixels[dx + dy] = 0; 
      pixels[dx + dy + 1] = 255; 
      pixels[dx + dy + 2] = 0; 
     } 
    } 
    memcpy(surface->pixels, pixels.data(), surface->pitch * surface->h); 
    SDL_UnlockSurface(surface); 
} 

それが動作するが、画面にテクスチャをテクスチャに表面修飾変換SDL_CreateTextureFromSurfaceを使用してコピーし、それをテストする場合、それは一つだけを表示します緑色画素:私は私のポインタ演算が間違っていたことに気づいている

window screenshot

答えて

0

は、私は1次元Vに2D値をマッピングしておりますので、垂直オフセットを考慮することが必要注意書き。それは紙にアイデアをドラフトするのに役立ちます。ここで

はコードです:

void draw_rectangle(SDL_Surface* surface, int x, int y, int width, int height) 
{ 
    SDL_LockSurface(surface); 
    std::vector<uint8_t> pixels(surface->h * surface->pitch, 0); 

    int dy, dx; 
    int maxwidth = width * 3; 
    for (dy = y; dy < height; dy++) { 
     for (dx = x; dx < maxwidth; dx += 3) { 
      pixels[dx + (dy * surface->pitch)] = 0; 
      pixels[dx + (dy * surface->pitch) + 1] = 255; 
      pixels[dx + (dy * surface->pitch) + 2] = 0; 
     } 
    } 
    memcpy(surface->pixels, pixels.data(), surface->pitch * surface->h); 

    SDL_UnlockSurface(surface); 
} 

screenshot

関連する問題