Я не хочу использовать глобальные переменные для SDL_Window и SDL_Renderer и любых текстур.
Поэтому я объявил окно, средство визуализации и текстуру в верхней части main () и передал их моему init () функция:
bool init(SDL_Window* &window, SDL_Renderer* &renderer, const int height, const int width)
{
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
std::cout << "SDL_Init() failed SDL error: " << SDL_GetError() << '\n';
return false;
}
else
{
window = SDL_CreateWindow("SDL Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, 0);
if (window == NULL)
{
std::cout << "SDL_CreateWindow() failed SDL error: " << SDL_GetError() << '\n';
return false;
}
else
{
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL)
{
std::cout << "SDL_CreateRenderer() failed SDL error: " << SDL_GetError() << '\n';
}
}
}
return true;
}
вызывающая сторона в main ():
if (!init(window, renderer, WINDOW_HEIGHT, WINDOW_WIDTH))
{
std::cout << "init() failed SDL error: " << SDL_GetError() << '\n';
}
объявления вверху main ():
SDL_Texture* texture{};
SDL_Window* window{};
SDL_Renderer* renderer{};
int WINDOW_HEIGHT = 480;
int WINDOW_WIDTH = 640;
, как вы можете видетьв моей функции init () он принимает окно и средство визуализации в качестве аргументов и помещает их в один из них: SDL_Window * & window;Первоначально я пытался положить их в: SDL_Window * window;однако это привело бы к тому, что рендер и окно были бы нулевыми, когда программа вернулась к main ().
Я не понимаю, почему мой первоначальный метод не работал, но с использованием SDL_Window * & window;работает
Насколько я понимаю, окно - это указатель (переменная, которая содержит адрес) на структуру SDL, называемую SDL_Window, и поэтому, когда я передаю окно в параметр SDL_Window * window, оно должно дать параметру адресв моем окне я объявил в main (), и поэтому любые изменения, сделанные в окне в init (), также должны быть внесены в него в main (), однако это не так, и SDL_Window * & window в качестве параметра в итоге оказал желаемый эффект.
Если возможно, кто-нибудь может объяснить, почему это так?