Implemented SDL_UpdateYUVTexture() for Direct3D
parent
17c9ff85e2
commit
89c31bb42a
|
@ -901,8 +901,12 @@ int SDL_UpdateYUVTexture(SDL_Texture * texture, const SDL_Rect * rect,
|
||||||
SDL_assert(!texture->native);
|
SDL_assert(!texture->native);
|
||||||
renderer = texture->renderer;
|
renderer = texture->renderer;
|
||||||
SDL_assert(renderer->UpdateTextureYUV);
|
SDL_assert(renderer->UpdateTextureYUV);
|
||||||
return renderer->UpdateTextureYUV(renderer, texture, rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch);
|
if (renderer->UpdateTextureYUV) {
|
||||||
}
|
return renderer->UpdateTextureYUV(renderer, texture, rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch);
|
||||||
|
} else {
|
||||||
|
return SDL_Unsupported();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -211,6 +211,11 @@ static int D3D_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture);
|
||||||
static int D3D_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
static int D3D_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||||
const SDL_Rect * rect, const void *pixels,
|
const SDL_Rect * rect, const void *pixels,
|
||||||
int pitch);
|
int pitch);
|
||||||
|
static int D3D_UpdateTextureYUV(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||||
|
const SDL_Rect * rect,
|
||||||
|
const Uint8 *Yplane, int Ypitch,
|
||||||
|
const Uint8 *Uplane, int Upitch,
|
||||||
|
const Uint8 *Vplane, int Vpitch);
|
||||||
static int D3D_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
static int D3D_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||||
const SDL_Rect * rect, void **pixels, int *pitch);
|
const SDL_Rect * rect, void **pixels, int *pitch);
|
||||||
static void D3D_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture);
|
static void D3D_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture);
|
||||||
|
@ -599,6 +604,7 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
renderer->WindowEvent = D3D_WindowEvent;
|
renderer->WindowEvent = D3D_WindowEvent;
|
||||||
renderer->CreateTexture = D3D_CreateTexture;
|
renderer->CreateTexture = D3D_CreateTexture;
|
||||||
renderer->UpdateTexture = D3D_UpdateTexture;
|
renderer->UpdateTexture = D3D_UpdateTexture;
|
||||||
|
renderer->UpdateTextureYUV = D3D_UpdateTextureYUV;
|
||||||
renderer->LockTexture = D3D_LockTexture;
|
renderer->LockTexture = D3D_LockTexture;
|
||||||
renderer->UnlockTexture = D3D_UnlockTexture;
|
renderer->UnlockTexture = D3D_UnlockTexture;
|
||||||
renderer->SetRenderTarget = D3D_SetRenderTarget;
|
renderer->SetRenderTarget = D3D_SetRenderTarget;
|
||||||
|
@ -1016,6 +1022,36 @@ D3D_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
D3D_UpdateTextureYUV(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||||
|
const SDL_Rect * rect,
|
||||||
|
const Uint8 *Yplane, int Ypitch,
|
||||||
|
const Uint8 *Uplane, int Upitch,
|
||||||
|
const Uint8 *Vplane, int Vpitch)
|
||||||
|
{
|
||||||
|
D3D_TextureData *data = (D3D_TextureData *) texture->driverdata;
|
||||||
|
SDL_bool full_texture = SDL_FALSE;
|
||||||
|
|
||||||
|
#ifdef USE_DYNAMIC_TEXTURE
|
||||||
|
if (texture->access == SDL_TEXTUREACCESS_STREAMING &&
|
||||||
|
rect->x == 0 && rect->y == 0 &&
|
||||||
|
rect->w == texture->w && rect->h == texture->h) {
|
||||||
|
full_texture = SDL_TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (D3D_UpdateTextureInternal(data->texture, texture->format, full_texture, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (D3D_UpdateTextureInternal(data->utexture, texture->format, full_texture, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Uplane, Upitch) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (D3D_UpdateTextureInternal(data->vtexture, texture->format, full_texture, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Vplane, Vpitch) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
D3D_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
D3D_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||||
const SDL_Rect * rect, void **pixels, int *pitch)
|
const SDL_Rect * rect, void **pixels, int *pitch)
|
||||||
|
|
Loading…
Reference in New Issue