【问题标题】:Confused on SDL_CreateRGBSurface() width and height parameters对 SDL_CreateRGBSurface() 宽度和高度参数感到困惑
【发布时间】:2016-05-21 06:38:33
【问题描述】:

所以,在使用 SDL_CreateRGBSurface() 函数上的宽度和高度数字后,我对它们的工作原理感到非常困惑。根据 SDL Wiki,宽度和高度是指表面的宽度和高度,但是当我说 SCREENWIDTH / 2 或 SCREENHEIGHT / 2 时,它显示的比没有分割时更大。这是我乱用的代码:

#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 的矩形,但要让它正确显示在屏幕上,必须将宽度和高度指定为窗口的宽度和高度。这是为什么呢?

【问题讨论】:

    标签: height width sdl rgb surface


    【解决方案1】:

    SDL_RenderCopy 将拉伸源纹理以适应目标渲染器。所以它会在整个窗口上拉伸你的表面。如果你想画一个 100x100 像素的矩形,你的 SDL 表面应该和你复制到的窗口一样大;这样就不会发生拉伸,表面将以 1:1 呈现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-28
      • 2021-08-23
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多