mirror of https://github.com/encounter/SDL.git
Diagonal flipping with RenderCopyEx
Ivan Rubinson As it turns out, it was impossible to render a texture flipped diagonally (both vertically and horizontally) with one RenderCopyEx call. With help from #SDL @ freenode, we came up with a fix.
This commit is contained in:
parent
5b8b403e3e
commit
b36d98bd9c
|
@ -1635,22 +1635,26 @@ D3D_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture,
|
|||
centerx = center->x;
|
||||
centery = center->y;
|
||||
|
||||
if (flip & SDL_FLIP_HORIZONTAL) {
|
||||
minx = dstrect->w - centerx - 0.5f;
|
||||
maxx = -centerx - 0.5f;
|
||||
}
|
||||
else {
|
||||
minx = -centerx - 0.5f;
|
||||
maxx = dstrect->w - centerx - 0.5f;
|
||||
}
|
||||
|
||||
if (flip & SDL_FLIP_VERTICAL) {
|
||||
miny = dstrect->h - centery - 0.5f;
|
||||
maxy = -centery - 0.5f;
|
||||
}
|
||||
else {
|
||||
miny = -centery - 0.5f;
|
||||
maxy = dstrect->h - centery - 0.5f;
|
||||
if ((flip & SDL_FLIP_VERTICAL) && (flip & SDL_FLIP_HORIZONTAL)) {
|
||||
miny = dstrect->h - centery;
|
||||
maxy = -centery;
|
||||
minx = dstrect->w - centerx;
|
||||
maxx = -centerx;
|
||||
} else if (flip & SDL_FLIP_HORIZONTAL) {
|
||||
miny = -centery;
|
||||
maxy = dstrect->h - centery;
|
||||
minx = dstrect->w - centerx;
|
||||
maxx = -centerx;
|
||||
} else if (flip & SDL_FLIP_VERTICAL) {
|
||||
miny = dstrect->h - centery;
|
||||
maxy = -centery;
|
||||
minx = -centerx;
|
||||
maxx = dstrect->w - centerx;
|
||||
} else {
|
||||
miny = -centery;
|
||||
maxy = dstrect->h - centery;
|
||||
minx = -centerx;
|
||||
maxx = dstrect->w - centerx;
|
||||
}
|
||||
|
||||
minu = (float) srcrect->x / texture->w;
|
||||
|
|
|
@ -1250,22 +1250,26 @@ GL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture,
|
|||
centerx = center->x;
|
||||
centery = center->y;
|
||||
|
||||
if (flip & SDL_FLIP_HORIZONTAL) {
|
||||
minx = dstrect->w - centerx;
|
||||
maxx = -centerx;
|
||||
}
|
||||
else {
|
||||
minx = -centerx;
|
||||
maxx = dstrect->w - centerx;
|
||||
}
|
||||
|
||||
if (flip & SDL_FLIP_VERTICAL) {
|
||||
miny = dstrect->h - centery;
|
||||
if ((flip & SDL_FLIP_VERTICAL) && (flip & SDL_FLIP_HORIZONTAL)) {
|
||||
miny = dstrect->h - centery;
|
||||
maxy = -centery;
|
||||
}
|
||||
else {
|
||||
minx = dstrect->w - centerx;
|
||||
maxx = -centerx;
|
||||
} else if (flip & SDL_FLIP_HORIZONTAL) {
|
||||
miny = -centery;
|
||||
maxy = dstrect->h - centery;
|
||||
maxy = dstrect->h - centery;
|
||||
minx = dstrect->w - centerx;
|
||||
maxx = -centerx;
|
||||
} else if (flip & SDL_FLIP_VERTICAL) {
|
||||
miny = dstrect->h - centery;
|
||||
maxy = -centery;
|
||||
minx = -centerx;
|
||||
maxx = dstrect->w - centerx;
|
||||
} else {
|
||||
miny = -centery;
|
||||
maxy = dstrect->h - centery;
|
||||
minx = -centerx;
|
||||
maxx = dstrect->w - centerx;
|
||||
}
|
||||
|
||||
minu = (GLfloat) srcrect->x / texture->w;
|
||||
|
|
Loading…
Reference in New Issue