Don't allow SDL_TEXTURE_ADDRESS_WRAP if it's not supported
Fixes https://github.com/libsdl-org/SDL/issues/13908
This commit is contained in:
@@ -4581,8 +4581,8 @@ bool SDL_RenderTextureTiled(SDL_Renderer *renderer, SDL_Texture *texture, const
|
|||||||
(!srcrect ||
|
(!srcrect ||
|
||||||
(real_srcrect.x == 0.0f && real_srcrect.y == 0.0f &&
|
(real_srcrect.x == 0.0f && real_srcrect.y == 0.0f &&
|
||||||
real_srcrect.w == (float)texture->w && real_srcrect.h == (float)texture->h));
|
real_srcrect.w == (float)texture->w && real_srcrect.h == (float)texture->h));
|
||||||
if (do_wrapping) {
|
if (do_wrapping && !renderer->npot_texture_wrap_unsupported) {
|
||||||
if (renderer->npot_texture_wrap_unsupported && (IsNPOT((int) real_srcrect.w) || IsNPOT((int) real_srcrect.h))) {
|
if (renderer->npot_texture_wrap_unsupported && (IsNPOT(texture->w) || IsNPOT(texture->h))) {
|
||||||
do_wrapping = false;
|
do_wrapping = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5428,6 +5428,12 @@ bool SDL_SetRenderTextureAddressMode(SDL_Renderer *renderer, SDL_TextureAddressM
|
|||||||
{
|
{
|
||||||
CHECK_RENDERER_MAGIC(renderer, false);
|
CHECK_RENDERER_MAGIC(renderer, false);
|
||||||
|
|
||||||
|
if ((u_mode == SDL_TEXTURE_ADDRESS_WRAP || v_mode == SDL_TEXTURE_ADDRESS_WRAP) &&
|
||||||
|
renderer->npot_texture_wrap_unsupported) {
|
||||||
|
// Technically it's supported on power of two textures, but we're assuming that non-power-of-two textures are going to be used.
|
||||||
|
return SDL_SetError("SDL_TEXTURE_ADDRESS_WRAP not supported");
|
||||||
|
}
|
||||||
|
|
||||||
renderer->texture_address_mode_u = u_mode;
|
renderer->texture_address_mode_u = u_mode;
|
||||||
renderer->texture_address_mode_v = v_mode;
|
renderer->texture_address_mode_v = v_mode;
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1843,6 +1843,13 @@ static bool D3D_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
|
|||||||
} else {
|
} else {
|
||||||
device_flags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
|
device_flags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
|
||||||
}
|
}
|
||||||
|
if (caps.TextureCaps & D3DPTEXTURECAPS_POW2) {
|
||||||
|
if (caps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) {
|
||||||
|
renderer->npot_texture_wrap_unsupported = true;
|
||||||
|
} else {
|
||||||
|
return SDL_SetError("Non-power-of-two textures are not supported");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (SDL_GetHintBoolean(SDL_HINT_RENDER_DIRECT3D_THREADSAFE, false)) {
|
if (SDL_GetHintBoolean(SDL_HINT_RENDER_DIRECT3D_THREADSAFE, false)) {
|
||||||
device_flags |= D3DCREATE_MULTITHREADED;
|
device_flags |= D3DCREATE_MULTITHREADED;
|
||||||
|
|||||||
@@ -63,7 +63,6 @@ static bool NGAGE_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, co
|
|||||||
|
|
||||||
static bool NGAGE_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch);
|
static bool NGAGE_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch);
|
||||||
static void NGAGE_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture);
|
static void NGAGE_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture);
|
||||||
static void NGAGE_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode);
|
|
||||||
static bool NGAGE_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture);
|
static bool NGAGE_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture);
|
||||||
static SDL_Surface *NGAGE_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect);
|
static SDL_Surface *NGAGE_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect);
|
||||||
static bool NGAGE_RenderPresent(SDL_Renderer *renderer);
|
static bool NGAGE_RenderPresent(SDL_Renderer *renderer);
|
||||||
@@ -99,25 +98,22 @@ static bool NGAGE_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
|
|||||||
renderer->QueueCopy = NGAGE_QueueCopy;
|
renderer->QueueCopy = NGAGE_QueueCopy;
|
||||||
renderer->QueueCopyEx = NGAGE_QueueCopyEx;
|
renderer->QueueCopyEx = NGAGE_QueueCopyEx;
|
||||||
renderer->QueueGeometry = NGAGE_QueueGeometry;
|
renderer->QueueGeometry = NGAGE_QueueGeometry;
|
||||||
|
|
||||||
renderer->InvalidateCachedState = NGAGE_InvalidateCachedState;
|
renderer->InvalidateCachedState = NGAGE_InvalidateCachedState;
|
||||||
renderer->RunCommandQueue = NGAGE_RunCommandQueue;
|
renderer->RunCommandQueue = NGAGE_RunCommandQueue;
|
||||||
renderer->UpdateTexture = NGAGE_UpdateTexture;
|
renderer->UpdateTexture = NGAGE_UpdateTexture;
|
||||||
renderer->LockTexture = NGAGE_LockTexture;
|
renderer->LockTexture = NGAGE_LockTexture;
|
||||||
renderer->UnlockTexture = NGAGE_UnlockTexture;
|
renderer->UnlockTexture = NGAGE_UnlockTexture;
|
||||||
// renderer->SetTextureScaleMode = NGAGE_SetTextureScaleMode;
|
|
||||||
renderer->SetRenderTarget = NGAGE_SetRenderTarget;
|
renderer->SetRenderTarget = NGAGE_SetRenderTarget;
|
||||||
renderer->RenderReadPixels = NGAGE_RenderReadPixels;
|
renderer->RenderReadPixels = NGAGE_RenderReadPixels;
|
||||||
renderer->RenderPresent = NGAGE_RenderPresent;
|
renderer->RenderPresent = NGAGE_RenderPresent;
|
||||||
renderer->DestroyTexture = NGAGE_DestroyTexture;
|
renderer->DestroyTexture = NGAGE_DestroyTexture;
|
||||||
|
|
||||||
renderer->DestroyRenderer = NGAGE_DestroyRenderer;
|
renderer->DestroyRenderer = NGAGE_DestroyRenderer;
|
||||||
|
|
||||||
renderer->SetVSync = NGAGE_SetVSync;
|
renderer->SetVSync = NGAGE_SetVSync;
|
||||||
|
|
||||||
renderer->name = NGAGE_RenderDriver.name;
|
renderer->name = NGAGE_RenderDriver.name;
|
||||||
renderer->window = window;
|
renderer->window = window;
|
||||||
renderer->internal = phdata;
|
renderer->internal = phdata;
|
||||||
|
renderer->npot_texture_wrap_unsupported = true;
|
||||||
|
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB4444);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB4444);
|
||||||
SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 1024);
|
SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 1024);
|
||||||
@@ -495,10 +491,6 @@ static void NGAGE_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void NGAGE_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool NGAGE_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
|
static bool NGAGE_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -752,6 +752,7 @@ static bool PS2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
|
|||||||
renderer->window = window;
|
renderer->window = window;
|
||||||
|
|
||||||
renderer->name = PS2_RenderDriver.name;
|
renderer->name = PS2_RenderDriver.name;
|
||||||
|
renderer->npot_texture_wrap_unsupported = true;
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR1555);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR1555);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
|
||||||
SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 1024);
|
SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 1024);
|
||||||
|
|||||||
@@ -1532,6 +1532,7 @@ static bool PSP_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
|
|||||||
renderer->window = window;
|
renderer->window = window;
|
||||||
|
|
||||||
renderer->name = PSP_RenderDriver.name;
|
renderer->name = PSP_RenderDriver.name;
|
||||||
|
renderer->npot_texture_wrap_unsupported = true;
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGR565);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGR565);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR1555);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR1555);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR4444);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR4444);
|
||||||
|
|||||||
@@ -233,6 +233,7 @@ static bool VITA_GXM_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window,
|
|||||||
renderer->window = window;
|
renderer->window = window;
|
||||||
|
|
||||||
renderer->name = VITA_GXM_RenderDriver.name;
|
renderer->name = VITA_GXM_RenderDriver.name;
|
||||||
|
renderer->npot_texture_wrap_unsupported = true;
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGB565);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGB565);
|
||||||
|
|||||||
Reference in New Issue
Block a user