는 무엇입 SDL renderer?
-
21-12-2019 - |
문제
나는 시작으로 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_Surface
입 struct
을 포함하는 픽셀 정보 동 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
및 설정 / 컨텍스트를 저장할 장소를 생각해보십시오.
그래서 당신은 숫자의 숫자를 만들고 렌더러에서 끌어들이십시오.그런 다음 준비가되면 렌더러가 모두 함께 묶어서 결과를 창에 보냅니다.