Hello,
When we render an image in a texture and then the texture on screen, the result is strangely flipped vertically in 2.0.9. It’s not the case in 2.0.8.
The test case is the following one:
#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_events.h>
#include <SDL2/SDL_image.h>
SDL_Texture *WID_loadTexture( SDL_Renderer *renderer, char *name)
{
SDL_Texture *texture = NULL;
if(renderer == NULL)
{
printf("%s\n", SDL_GetError());
SDL_ClearError();
return NULL;
}
SDL_Surface* surface = IMG_Load( name );
if (surface == NULL)
{
printf("%s\n", SDL_GetError());
}
else
{
texture = SDL_CreateTextureFromSurface( renderer, surface );
if (texture == NULL) {
printf("%s\n", SDL_GetError());
SDL_ClearError();
return NULL;
}
SDL_FreeSurface( surface );
}
return texture;
}
int main(void) {
SDL_Window *WID_main_window;
SDL_Renderer *WID_main_renderer;
SDL_Event sdlevt;
if ( SDL_Init( SDL_INIT_EVERYTHING) < 0 ) {
exit(-1);
}
int video_driver_index = 1;
int renderer_index = 1;
SDL_RendererInfo info;
setenv("SDL_VIDEODRIVER",SDL_GetVideoDriver(video_driver_index),1);
SDL_GetRenderDriverInfo(renderer_index,&info);
if(SDL_SetHint(SDL_HINT_RENDER_DRIVER, info.name) != SDL_TRUE)
{
printf("SDL_SetHint %s\n", SDL_GetError());
exit(-1);
}
if ((WID_main_window = SDL_CreateWindow("icoone", 0, 0, 1024, 768, SDL_WINDOW_SHOWN)) == NULL) {
exit(-1);
}
if ((WID_main_renderer = SDL_CreateRenderer(WID_main_window, renderer_index, info.flags)) == NULL) {
exit(-1);
}
if (SDL_SetRenderTarget(WID_main_renderer, NULL) != 0) {
printf("SDL_SetRenderTarget %s\n", SDL_GetError());
exit(-1);
}
SDL_SetRenderDrawColor(WID_main_renderer, 0x80, 0x80, 0x80, SDL_ALPHA_OPAQUE);
SDL_Texture *drawingTexture;
if ((drawingTexture = SDL_CreateTexture(WID_main_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 1024, 768)) == NULL) {
printf("SDL_CreateTexture %s\n", SDL_GetError());
exit(-1);
}
SDL_Texture *backgroundImage;
if ((backgroundImage = WID_loadTexture(WID_main_renderer, "visage.jpg")) == NULL) {
exit(-1);
}
SDL_RenderClear(WID_main_renderer);
if (SDL_SetRenderTarget(WID_main_renderer, NULL) != 0) {
fprintf(stderr, "SDL_SetRenderTarget error %s\n", SDL_GetError());
exit(-1);
}
if (SDL_RenderCopy( WID_main_renderer, backgroundImage, NULL, NULL) != 0) {
fprintf(stderr, "SDL_RenderCopy error %s\n", SDL_GetError());
exit(-1);
}
SDL_RenderPresent(WID_main_renderer);
SDL_Delay(2000);
SDL_RenderClear(WID_main_renderer);
if (SDL_SetRenderTarget(WID_main_renderer, drawingTexture) != 0) {
fprintf(stderr, "SDL_SetRenderTarget error %s\n", SDL_GetError());
exit(-1);
}
if (SDL_RenderCopy( WID_main_renderer, backgroundImage, NULL, NULL) != 0) {
fprintf(stderr, "SDL_RenderCopy error %s\n", SDL_GetError());
exit(-1);
}
if (SDL_SetRenderTarget(WID_main_renderer, NULL) != 0) {
fprintf(stderr, "SDL_SetRenderTarget error %s\n", SDL_GetError());
exit(-1);
}
if (SDL_RenderCopy( WID_main_renderer, drawingTexture, NULL, NULL) != 0) {
fprintf(stderr, "SDL_RenderCopy error %s\n", SDL_GetError());
exit(-1);
}
SDL_RenderPresent(WID_main_renderer);
int loop = 1;
while (loop) {
SDL_PollEvent(&sdlevt);
if ( sdlevt.type == SDL_QUIT ) {
loop = 0;
}
SDL_Delay(50);
SDL_FlushEvent(SDL_MOUSEMOTION);
}
SDL_DestroyTexture(backgroundImage);
SDL_DestroyRenderer(WID_main_renderer);
SDL_DestroyWindow(WID_main_window);
SDL_Quit();
return EXIT_SUCCESS;
}
The image is here https://i.imgur.com/Gg4IBM2.jpg