Ich beginne mit SDL2 und habe Probleme zu verstehen, was ein SDL_Renderer ist.
Was ist es? Was tut es? Was ist der Unterschied zwischen SDL_Renderer, SDL_Window, SDL_Surface und SDL_Texture und wie hängen sie zusammen?
Ich hatte Probleme damit, als ich versuchte, diesen Einführungscode zu verstehen:
#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;
}
Ich habe das Twinklebear-Tutorial (vorgeschlagen im SDL-Wiki) verwendet und mir auch die SDL-Wiki-Dokumentation und einige Bücher angesehen. Aber alle gehen davon aus, dass ich diese Definitionen kenne.
quelle
SDL_Surface
überSDL_Renderer
?Stellen Sie sich
SDL_Window
physische PixelSDL_Renderer
und einen Ort zum Speichern von Einstellungen / Kontexten vor.Sie erstellen also eine Reihe von Ressourcen und hängen sie an den Renderer. Wenn es fertig ist, weisen Sie den Renderer an, alles zusammenzusetzen und die Ergebnisse an das Fenster zu senden.
quelle