Is viewport's Y coordinate render dependant?

Hi,

This is my first post on the forum so I would like to thank the SDL team for their work. The things that make SDL better than other libraries are, in my opinion, simplicity (C API is a must) and perenity.

Now, my problem : I’m surprised to see that viewport’s Y coordinate is render dependant. In my test, origin (0,0) is on the top of the screen, orientation downward with DirectX and on the bottom orientation upward with OpenGL.

Configuration : Windows XP, latest SDL RC, compiler Mingw 4.8.1.
I can provide the built executable if needed.

Sorry for my poor English.

Code:
#include <stdio.h>
#include <SDL2/SDL.h>

int main(int argc, char* argv[])
{
if (SDL_Init(SDL_INIT_EVERYTHING) == -1) {
printf("%s\n", SDL_GetError());
return EXIT_FAILURE;
}

int num_render_drivers = SDL_GetNumRenderDrivers();
SDL_RendererInfo render_info;
int i;
printf(“choose a render :\n”);
for (i = 0; i < num_render_drivers; ++i) {
SDL_GetRenderDriverInfo(i, &render_info);
printf(" %d %s\n", i, render_info.name);
}

int renderer_idx;
scanf("%d", &renderer_idx);

SDL_Window* win = SDL_CreateWindow(“SDL - Dx / Ogl render”,
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
0, 0,
SDL_WINDOW_BORDERLESS | SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_SHOWN);
if (!win) {
printf("%s\n", SDL_GetError());
return EXIT_FAILURE;
}

SDL_Renderer* renderer = SDL_CreateRenderer(win, renderer_idx, SDL_RENDERER_ACCELERATED);
if (!renderer) {
printf("%s\n", SDL_GetError());
return EXIT_FAILURE;
}

SDL_GetRendererInfo(renderer, &render_info);
printf(“current render: %s\nmax texture width: %d\nmax texture height: %d\n\n”, render_info.name, render_info.max_texture_width, render_info.max_texture_height);

SDL_Surface a_sprite = SDL_LoadBMP(“data/image1.bmp”);
if (!a_sprite) {
return EXIT_FAILURE;
}
SDL_Texture
a_texture = SDL_CreateTextureFromSurface(renderer, a_sprite);
SDL_FreeSurface(a_sprite);

SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);

SDL_Rect sprite_rect;
sprite_rect.x = 0;
sprite_rect.y = 0;
sprite_rect.w = a_sprite->w;
sprite_rect.h = a_sprite->h;

SDL_Rect a_viewport_rect;
SDL_RenderGetViewport(renderer, &a_viewport_rect);
a_viewport_rect.y = 200; <------------------------------------------------------ HERE, DirectX and Soft render : top of the screen ; OpenGL : bottom of the screen
a_viewport_rect.h = 150;
SDL_RenderSetViewport(renderer, &a_viewport_rect);

//SDL_RaiseWindow(win);

Uint32 time = SDL_GetTicks();
while (SDL_GetTicks() < time + 10000) {
SDL_RenderClear(renderer);

float angle = (SDL_GetTicks() - time) / 10.0f;
SDL_RenderCopyEx(renderer, a_texture, NULL, &sprite_rect, angle, NULL, SDL_FLIP_NONE);

SDL_RenderPresent(renderer);	

}

SDL_DestroyTexture(a_texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(win);

SDL_Quit();

return 0;
}