Hey,
I’m having an issue with a SDL_Texture pointer:
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <assert.h>
const int WIDTH = 1024;
const int HEIGHT = 768;
SDL_Window* window = NULL;
SDL_Surface* screenSurface = NULL;
SDL_Renderer* renderer = NULL;
void init(SDL_Texture* bg) {
assert(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == 0);
window = SDL_CreateWindow("SDL Test", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT,
SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(
window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
assert(renderer);
assert(window);
// This doesn't work
screenSurface = SDL_GetWindowSurface(window);
SDL_Surface* loadedSurface = IMG_Load("bg.png");
assert(loadedSurface);
SDL_GetError();
bg = SDL_CreateTextureFromSurface(renderer, loadedSurface);
fprintf(stdout,"%s\n", SDL_GetError());
assert(bg);
SDL_FreeSurface(loadedSurface);
}
int main(int argc, char* argv[]) {
SDL_Texture* bg = NULL;
init(bg);
assert(bg);
/*
screenSurface = SDL_GetWindowSurface(window);
SDL_Surface* loadedSurface = IMG_Load("bg.png");
assert(loadedSurface);
bg = SDL_CreateTextureFromSurface(renderer, loadedSurface);
assert(bg);
SDL_FreeSurface(loadedSurface);
*/
while (1) {
// set clearing color
SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, bg, NULL, NULL);
SDL_RenderPresent(renderer);
}
SDL_FreeSurface(screenSurface);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
Why can’t I “keep” my texture? If I step in gdb the pointer gets an address but when the function returns it is NULL If I run the same code in main() it works…
Cheers!