2016-02-10 20 views
0

因此,在SDL_CreateRGBSurface()函數的寬度和高度數字混淆之後,我對它們的工作方式感到困惑。根據SDL Wiki,寬度和高度指的是表面的寬度和高度,但是當我說SCREENWIDTH/2或SCREENHEIGHT/2時,它顯示比沒有除法的更大。這是我在插科打諢的代碼:困惑於SDL_CreateRGBSurface()寬度和高度參數

#include <iostream> 
#include <SDL.h> 

const int WIN_WIDTH = 640; 
const int WIN_HEIGHT = 480; 

int main(int argc, char **argv){ 
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0){ 
     std::cerr << "SDL_Init failed: " << SDL_GetError() << "\n"; 
     return 1; 
    } 
    SDL_Window *win = SDL_CreateWindow("Rendering to a texture!", SDL_WINDOWPOS_CENTERED, 
     SDL_WINDOWPOS_CENTERED, WIN_WIDTH, WIN_HEIGHT, 0); 
    SDL_Renderer *renderer = SDL_CreateRenderer(win, -1, 
     SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE); 

    SDL_Surface* s; 
    SDL_Color c = { 155, 0, 0 }; 
    SDL_Rect r = { 0, 0, 100, 100 }; 
    s = SDL_CreateRGBSurface(0, WIN_WIDTH/2, WIN_HEIGHT, 32, 0, 0, 0, 0); 
    SDL_FillRect(s, &r, SDL_MapRGB(s->format, c.r, c.g, c.b)); 

    SDL_Texture* t; 
    t = SDL_CreateTextureFromSurface(renderer, s); 

    SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); 
    SDL_RenderClear(renderer); 
    SDL_RenderCopy(renderer, t, NULL, NULL); 
    SDL_RenderPresent(renderer); 

    SDL_Delay(2000); 
    SDL_FreeSurface(s); 
    SDL_DestroyTexture(t); 
    SDL_DestroyRenderer(renderer); 
    SDL_DestroyWindow(win); 
    SDL_Quit(); 
    return 0; 
} 

我真正想要的是寬度爲100和100高一個矩形,而是有它正確地顯示在屏幕上,寬度和高度必須是指定爲窗口的寬度和高度。這是爲什麼?

回答

0

SDL_RenderCopy將拉伸源紋理以適合目標渲染器。所以它會在整個窗口上展開你的表面。如果您想繪製一個100x100像素的矩形,則您的SDL表面應與您要複製的窗口大小相同;這樣就不會發生拉伸,表面將以1:1呈現。