mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-05-04 13:04:41 +00:00
Add scaleMode to SDL_SoftStretch(), remove SDL_SoftStretchLinear().
This commit is contained in:
@@ -613,7 +613,6 @@ SDL3_0.0.0 {
|
||||
SDL_ShowWindow;
|
||||
SDL_SignalCondition;
|
||||
SDL_SoftStretch;
|
||||
SDL_SoftStretchLinear;
|
||||
SDL_StartTextInput;
|
||||
SDL_StopTextInput;
|
||||
SDL_SurfaceHasColorKey;
|
||||
|
||||
@@ -636,7 +636,6 @@
|
||||
#define SDL_ShowWindow SDL_ShowWindow_REAL
|
||||
#define SDL_SignalCondition SDL_SignalCondition_REAL
|
||||
#define SDL_SoftStretch SDL_SoftStretch_REAL
|
||||
#define SDL_SoftStretchLinear SDL_SoftStretchLinear_REAL
|
||||
#define SDL_StartTextInput SDL_StartTextInput_REAL
|
||||
#define SDL_StopTextInput SDL_StopTextInput_REAL
|
||||
#define SDL_SurfaceHasColorKey SDL_SurfaceHasColorKey_REAL
|
||||
|
||||
@@ -677,8 +677,7 @@ SDL_DYNAPI_PROC(int,SDL_ShowMessageBox,(const SDL_MessageBoxData *a, int *b),(a,
|
||||
SDL_DYNAPI_PROC(int,SDL_ShowSimpleMessageBox,(Uint32 a, const char *b, const char *c, SDL_Window *d),(a,b,c,d),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_ShowWindow,(SDL_Window *a),(a),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SignalCondition,(SDL_Condition *a),(a),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SoftStretch,(SDL_Surface *a, const SDL_Rect *b, SDL_Surface *c, const SDL_Rect *d),(a,b,c,d),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SoftStretchLinear,(SDL_Surface *a, const SDL_Rect *b, SDL_Surface *c, const SDL_Rect *d),(a,b,c,d),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SoftStretch,(SDL_Surface *a, const SDL_Rect *b, SDL_Surface *c, const SDL_Rect *d, SDL_ScaleMode e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_StartTextInput,(void),(),)
|
||||
SDL_DYNAPI_PROC(void,SDL_StopTextInput,(void),(),)
|
||||
SDL_DYNAPI_PROC(SDL_bool,SDL_SurfaceHasColorKey,(SDL_Surface *a),(a),return)
|
||||
|
||||
@@ -382,7 +382,7 @@ int SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture *swdata, const SDL_Rect *srcrect,
|
||||
}
|
||||
if (stretch) {
|
||||
SDL_Rect rect = *srcrect;
|
||||
SDL_SoftStretch(swdata->stretch, &rect, swdata->display, NULL);
|
||||
SDL_SoftStretch(swdata->stretch, &rect, swdata->display, NULL, SDL_SCALEMODE_NEAREST);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -24,22 +24,10 @@
|
||||
|
||||
static int SDL_LowerSoftStretchNearest(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect);
|
||||
static int SDL_LowerSoftStretchLinear(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect);
|
||||
static int SDL_UpperSoftStretch(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, const SDL_Rect *dstrect, SDL_ScaleMode scaleMode);
|
||||
|
||||
int SDL_SoftStretch(SDL_Surface *src, const SDL_Rect *srcrect,
|
||||
SDL_Surface *dst, const SDL_Rect *dstrect)
|
||||
{
|
||||
return SDL_UpperSoftStretch(src, srcrect, dst, dstrect, SDL_SCALEMODE_NEAREST);
|
||||
}
|
||||
|
||||
int SDL_SoftStretchLinear(SDL_Surface *src, const SDL_Rect *srcrect,
|
||||
SDL_Surface *dst, const SDL_Rect *dstrect)
|
||||
{
|
||||
return SDL_UpperSoftStretch(src, srcrect, dst, dstrect, SDL_SCALEMODE_LINEAR);
|
||||
}
|
||||
|
||||
static int SDL_UpperSoftStretch(SDL_Surface *src, const SDL_Rect *srcrect,
|
||||
SDL_Surface *dst, const SDL_Rect *dstrect, SDL_ScaleMode scaleMode)
|
||||
SDL_Surface *dst, const SDL_Rect *dstrect,
|
||||
SDL_ScaleMode scaleMode)
|
||||
{
|
||||
int ret;
|
||||
int src_locked;
|
||||
@@ -47,11 +35,20 @@ static int SDL_UpperSoftStretch(SDL_Surface *src, const SDL_Rect *srcrect,
|
||||
SDL_Rect full_src;
|
||||
SDL_Rect full_dst;
|
||||
|
||||
|
||||
if (src->format->format != dst->format->format) {
|
||||
return SDL_SetError("Only works with same format surfaces");
|
||||
}
|
||||
|
||||
if (scaleMode != SDL_SCALEMODE_NEAREST && scaleMode != SDL_SCALEMODE_LINEAR && scaleMode != SDL_SCALEMODE_BEST) {
|
||||
return SDL_InvalidParamError("scaleMode");
|
||||
}
|
||||
|
||||
if (scaleMode != SDL_SCALEMODE_NEAREST) {
|
||||
scaleMode = SDL_SCALEMODE_LINEAR;
|
||||
}
|
||||
|
||||
if (scaleMode == SDL_SCALEMODE_LINEAR) {
|
||||
if (src->format->BytesPerPixel != 4 || src->format->format == SDL_PIXELFORMAT_ARGB2101010) {
|
||||
return SDL_SetError("Wrong format");
|
||||
}
|
||||
|
||||
@@ -974,7 +974,7 @@ int SDL_BlitSurfaceUncheckedScaled(SDL_Surface *src, const SDL_Rect *srcrect,
|
||||
if (!(src->map->info.flags & complex_copy_flags) &&
|
||||
src->format->format == dst->format->format &&
|
||||
!SDL_ISPIXELFORMAT_INDEXED(src->format->format)) {
|
||||
return SDL_SoftStretch(src, srcrect, dst, dstrect);
|
||||
return SDL_SoftStretch(src, srcrect, dst, dstrect, SDL_SCALEMODE_NEAREST);
|
||||
} else {
|
||||
return SDL_BlitSurfaceUnchecked(src, srcrect, dst, dstrect);
|
||||
}
|
||||
@@ -985,7 +985,7 @@ int SDL_BlitSurfaceUncheckedScaled(SDL_Surface *src, const SDL_Rect *srcrect,
|
||||
src->format->BytesPerPixel == 4 &&
|
||||
src->format->format != SDL_PIXELFORMAT_ARGB2101010) {
|
||||
/* fast path */
|
||||
return SDL_SoftStretchLinear(src, srcrect, dst, dstrect);
|
||||
return SDL_SoftStretch(src, srcrect, dst, dstrect, SDL_SCALEMODE_LINEAR);
|
||||
} else {
|
||||
/* Use intermediate surface(s) */
|
||||
SDL_Surface *tmp1 = NULL;
|
||||
@@ -1035,7 +1035,7 @@ int SDL_BlitSurfaceUncheckedScaled(SDL_Surface *src, const SDL_Rect *srcrect,
|
||||
if (is_complex_copy_flags || src->format->format != dst->format->format) {
|
||||
SDL_Rect tmprect;
|
||||
SDL_Surface *tmp2 = SDL_CreateSurface(dstrect->w, dstrect->h, src->format->format);
|
||||
SDL_SoftStretchLinear(src, &srcrect2, tmp2, NULL);
|
||||
SDL_SoftStretch(src, &srcrect2, tmp2, NULL, SDL_SCALEMODE_LINEAR);
|
||||
|
||||
SDL_SetSurfaceColorMod(tmp2, r, g, b);
|
||||
SDL_SetSurfaceAlphaMod(tmp2, alpha);
|
||||
@@ -1048,7 +1048,7 @@ int SDL_BlitSurfaceUncheckedScaled(SDL_Surface *src, const SDL_Rect *srcrect,
|
||||
ret = SDL_BlitSurfaceUnchecked(tmp2, &tmprect, dst, dstrect);
|
||||
SDL_DestroySurface(tmp2);
|
||||
} else {
|
||||
ret = SDL_SoftStretchLinear(src, &srcrect2, dst, dstrect);
|
||||
ret = SDL_SoftStretch(src, &srcrect2, dst, dstrect, SDL_SCALEMODE_LINEAR);
|
||||
}
|
||||
|
||||
SDL_DestroySurface(tmp1);
|
||||
|
||||
Reference in New Issue
Block a user