문제

나는 시작으로 SDL2 고 몇 가지 문제가하이 무엇인지 이해하 SDL_Renderer 입니다.

그것이 무엇입니까?그것은 무엇입니까?의 차이점은 무엇 SDL_Renderer,SDL_Window,SDL_Surface 및 SDL_Texture 및들이 어떻게 연관되어 있는지를 알아?

나는 문제는 이것을 이해하려고 할 때 이 기초 코드:

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

int main()
{
    /* Starting SDL */
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
        std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Create a Window */
    SDL_Window *window = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
    if (window == nullptr) {
        std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Create a Render */
    SDL_Renderer *render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (render == nullptr) {
        std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Load bitmap image */
    SDL_Surface *bmp = SDL_LoadBMP("./Tutorial/res/Lesson1/hello.bmp");
    if (bmp == nullptr) {
        std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Upload surface to render, and then, free the surface */
    SDL_Texture *texture = SDL_CreateTextureFromSurface(render, bmp);
    SDL_FreeSurface(bmp);
    if (texture == nullptr){
        std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Draw the render on window */
    SDL_RenderClear(render); // Fill render with color
    SDL_RenderCopy(render, texture, NULL, NULL); // Copy the texture into render
    SDL_RenderPresent(render); // Show render on window

    /* Wait 2 seconds */
    SDL_Delay(5000);

    /* Free all objects*/
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(render);
    SDL_DestroyWindow(window);

    /* Quit program */
    SDL_Quit();
    return 0;
}

용 Twinklebear 얼(제안에 SDL Wiki)보도 SDL 위키 문서와 어떤 책입니다.하지만 그들 모두가 가정 내가 알고 있는 이러한 정의입니다.

도움이 되었습니까?

해결책

SDL_Window

SDL_Window 는 구조체가 보유하는 모든 정보에 대한 창의 자체:크기,위치,풀 스크린,테두리 등등.


SDL_Renderer

SDL_Renderer 는 구조체를 처리하는 모든 렌더링을 수행합니다.그것은 묶여 SDL_Window 그래서 그것은 단지 내에서 렌더링하는 SDL_Window.그것은 또한 추적을 유지에 관련된 설정을 렌더링을 수행합니다.거기에 몇 가지 중요한 기능이 있음에 SDL_Renderer

  • SDL_SetRenderDrawColor(renderer, r, g, b, a);
    이 설정한 색상을 취소하려면 화면(아래 참조)

  • SDL_RenderClear(renderer);
    이렇게 렌더링을 대상으로 그 위에 설정된 색상

  • SDL_RenderCopy(
    이것은 아마도 함수를 사용할 수 있는 가장에 사용되는 렌더링하기 SDL_Texture 그리고 많은 다른 옵션과 함께 매개변수:

    • SDL_Renderer* renderer,
      렌더러에 사용할 렌더링을 수행합니다.
    • SDL_Texture* texture,
      감할을 렌더링합니다.
    • const SDL_Rect* srcrect, 일부의 질감을 렌더링할 경우 NULL 을 렌더링하려는 전체 텍스처
    • const SDL_Rect* dstrect)
      당신이 원하는 곳에 렌더링하는 질감에서는 창입니다.면의 너비와 높이에 이 SDL_Rect 가보다 작거나 큰 치수의 질감,그 자체이 늘어에 따라 이 SDL_Rect
  • SDL_RenderPresent(renderer);
    다른 SDL_Render*기능에 무 숨겨진 대상입니다.이 함수가 모든 것과 그것을 그릴에서 창을 연결 renderer.

SDL_Textures 및 SDL_Surface

SDL_Renderer 렌더링 SDL_Texture, 를 저장하는 픽셀의 정보를 하나의 요소입니다.그것은 새로운 버전 SDL_Surface 는 많은 동일합니다.차이는 대개는 SDL_Surfacestruct 을 포함하는 픽셀 정보 동 SDL_Texture 효율적이,드라이버별 표현의 픽셀 데이터입니다.

로 변환할 수 있습 SDL_Surface*을 SDL_Texture 사용

SDL_Texture* SDL_CreateTextureFromSurface(SDL_Renderer* renderer,
                                          SDL_Surface*  surface)

이 후,SDL_Surface 해제해야한 사용

SDL_FreeSurface( SDL_Surface* surface )

또 다른 중요한 차이점은 SDL_Surface 소프트웨어를 사용하여 렌더링(을 통해 CPU)동 SDL_Texture 을 사용 하드웨어 렌더링(via GPU).


SDL_Rect

가장 간단한 구조체에서 SDL.그것은 포함되 네 개의 반바지입니다. x, y 을 보유하고 및 위치 w, h 을 보유하고 너비와 높이입니다.

그것은 주목하는 것이 중요하 0, 0 은 왼쪽 위 모서리에 SDL.그래서 더 높 y값을 의미가 낮고,오른쪽 하단 모서리가 좌표 x + w, y + h


에 대해 자세히 알아볼 수 있습 SDL2 에 나 블로그입니다.

다른 팁

SDL_Window를 물리적 픽셀로 생각하고 SDL_Renderer 및 설정 / 컨텍스트를 저장할 장소를 생각해보십시오.

그래서 당신은 숫자의 숫자를 만들고 렌더러에서 끌어들이십시오.그런 다음 준비가되면 렌더러가 모두 함께 묶어서 결과를 창에 보냅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top