Skip to content

Commit

Permalink
direct3d11: Fixed incorrect texture coordinates (thanks, Martin!).
Browse files Browse the repository at this point in the history
Fixes Bugzilla #4860.
  • Loading branch information
icculus committed Dec 3, 2019
1 parent c8a2ef8 commit 7b08eb4
Showing 1 changed file with 27 additions and 21 deletions.
48 changes: 27 additions & 21 deletions src/render/direct3d11/SDL_render_d3d11.c
Expand Up @@ -1728,82 +1728,88 @@ D3D11_QueueCopyEx(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture *
float minx, miny, maxx, maxy;
float minu, maxu, minv, maxv;

if (!verts) {
return -1;
}

cmd->data.draw.count = 1;

minx = -center->x;
maxx = dstrect->w - center->x;
miny = -center->y;
maxy = dstrect->h - center->y;

if (flip & SDL_FLIP_HORIZONTAL) {
minu = (float) srcrect->x / texture->w;
maxu = (float) (srcrect->x + srcrect->w) / texture->w;
} else {
minu = (float) (srcrect->x + srcrect->w) / texture->w;
maxu = (float) srcrect->x / texture->w;
} else {
minu = (float) srcrect->x / texture->w;
maxu = (float) (srcrect->x + srcrect->w) / texture->w;
}

if (flip & SDL_FLIP_VERTICAL) {
minv = (float) srcrect->y / texture->h;
maxv = (float) (srcrect->y + srcrect->h) / texture->h;
} else {
minv = (float) (srcrect->y + srcrect->h) / texture->h;
maxv = (float) srcrect->y / texture->h;
} else {
minv = (float) srcrect->y / texture->h;
maxv = (float) (srcrect->y + srcrect->h) / texture->h;
}

minx = -center->x;
maxx = dstrect->w - center->x;
miny = -center->y;
maxy = dstrect->h - center->y;

cmd->data.draw.count = 1;

verts->pos.x = minx;
verts->pos.y = miny;
verts->pos.z = 0.0f;
verts->tex.x = minu;
verts->tex.y = minv;
verts->color.x = r;
verts->color.y = g;
verts->color.z = b;
verts->color.w = a;
verts->tex.x = minu;
verts->tex.y = minv;
verts++;

verts->pos.x = minx;
verts->pos.y = maxy;
verts->pos.z = 0.0f;
verts->tex.x = minu;
verts->tex.y = maxv;
verts->color.x = r;
verts->color.y = g;
verts->color.z = b;
verts->color.w = a;
verts->tex.x = minu;
verts->tex.y = maxv;
verts++;

verts->pos.x = maxx;
verts->pos.y = miny;
verts->pos.z = 0.0f;
verts->tex.x = maxu;
verts->tex.y = minv;
verts->color.x = r;
verts->color.y = g;
verts->color.z = b;
verts->color.w = a;
verts->tex.x = maxu;
verts->tex.y = minv;
verts++;

verts->pos.x = maxx;
verts->pos.y = maxy;
verts->pos.z = 0.0f;
verts->tex.x = maxu;
verts->tex.y = maxv;
verts->color.x = r;
verts->color.y = g;
verts->color.z = b;
verts->color.w = a;
verts->tex.x = maxu;
verts->tex.y = maxv;
verts++;

verts->pos.x = dstrect->x + center->x; /* X translation */
verts->pos.y = dstrect->y + center->y; /* Y translation */
verts->pos.z = (float)(M_PI * (float) angle / 180.0f); /* rotation */
verts->tex.x = 0.0f;
verts->tex.y = 0.0f;
verts->color.x = 0;
verts->color.y = 0;
verts->color.z = 0;
verts->color.w = 0;
verts->tex.x = 0.0f;
verts->tex.y = 0.0f;
verts++;

return 0;
Expand Down

0 comments on commit 7b08eb4

Please sign in to comment.