int SDL_UpdateTexture(SDL_Texture * texture, const SDL_Rect * rect, const void *pixels, int pitch) { SDL_Renderer *renderer; SDL_Rect full_rect; CHECK_TEXTURE_MAGIC(texture, -1); if (!rect) { full_rect.x = 0; full_rect.y = 0; full_rect.w = texture->w; full_rect.h = texture->h; rect = &full_rect; } if (texture->yuv) { return SDL_UpdateTextureYUV(texture, rect, pixels, pitch); } else if (texture->native) { return SDL_UpdateTextureNative(texture, rect, pixels, pitch); } else { renderer = texture->renderer; return renderer->UpdateTexture(renderer, texture, rect, pixels, pitch); } }
int SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) { SDL_Rect viewport; if (!SDL_RenderTargetSupported(renderer)) { SDL_Unsupported(); return -1; } if (texture == renderer->target) { /* Nothing to do! */ return 0; } /* texture == NULL is valid and means reset the target to the window */ if (texture) { CHECK_TEXTURE_MAGIC(texture, -1); if (renderer != texture->renderer) { SDL_SetError("Texture was not created with this renderer"); return -1; } if (!(texture->access & SDL_TEXTUREACCESS_TARGET)) { SDL_SetError("Texture not created with SDL_TEXTUREACCESS_TARGET"); return -1; } if (texture->native) { /* Always render to the native texture */ texture = texture->native; } } if (texture && !renderer->target) { /* Make a backup of the viewport */ renderer->viewport_backup = renderer->viewport; } renderer->target = texture; if (renderer->SetRenderTarget(renderer, texture) < 0) { return -1; } if (texture) { viewport.x = 0; viewport.y = 0; viewport.w = texture->w; viewport.h = texture->h; } else { viewport = renderer->viewport_backup; } if (SDL_RenderSetViewport(renderer, &viewport) < 0) { return -1; } /* All set! */ return 0; }
int SDL_GetTextureBlendMode(SDL_Texture * texture, SDL_BlendMode *blendMode) { CHECK_TEXTURE_MAGIC(texture, -1); if (blendMode) { *blendMode = texture->blendMode; } return 0; }
int SDL_GetTextureAlphaMod(SDL_Texture * texture, Uint8 * alpha) { CHECK_TEXTURE_MAGIC(texture, -1); if (alpha) { *alpha = texture->a; } return 0; }
int SDL_SetTextureBlendMode(SDL_Texture * texture, SDL_BlendMode blendMode) { SDL_Renderer *renderer; CHECK_TEXTURE_MAGIC(texture, -1); renderer = texture->renderer; texture->blendMode = blendMode; if (texture->native) { return SDL_SetTextureBlendMode(texture->native, blendMode); } else if (renderer->SetTextureBlendMode) { return renderer->SetTextureBlendMode(renderer, texture); } else { return 0; } }
int SDL_GetTextureColorMod(SDL_Texture * texture, Uint8 * r, Uint8 * g, Uint8 * b) { CHECK_TEXTURE_MAGIC(texture, -1); if (r) { *r = texture->r; } if (g) { *g = texture->g; } if (b) { *b = texture->b; } return 0; }
int SDL_QueryTexture(SDL_Texture * texture, Uint32 * format, int *access, int *w, int *h) { CHECK_TEXTURE_MAGIC(texture, -1); if (format) { *format = texture->format; } if (access) { *access = texture->access; } if (w) { *w = texture->w; } if (h) { *h = texture->h; } return 0; }
int SDL_SetTextureAlphaMod(SDL_Texture * texture, Uint8 alpha) { SDL_Renderer *renderer; CHECK_TEXTURE_MAGIC(texture, -1); renderer = texture->renderer; if (alpha < 255) { texture->modMode |= SDL_TEXTUREMODULATE_ALPHA; } else { texture->modMode &= ~SDL_TEXTUREMODULATE_ALPHA; } texture->a = alpha; if (texture->native) { return SDL_SetTextureAlphaMod(texture->native, alpha); } else if (renderer->SetTextureAlphaMod) { return renderer->SetTextureAlphaMod(renderer, texture); } else { return 0; } }
int SDL_SetTextureColorMod(SDL_Texture * texture, Uint8 r, Uint8 g, Uint8 b) { SDL_Renderer *renderer; CHECK_TEXTURE_MAGIC(texture, -1); renderer = texture->renderer; if (r < 255 || g < 255 || b < 255) { texture->modMode |= SDL_TEXTUREMODULATE_COLOR; } else { texture->modMode &= ~SDL_TEXTUREMODULATE_COLOR; } texture->r = r; texture->g = g; texture->b = b; if (texture->native) { return SDL_SetTextureColorMod(texture->native, r, g, b); } else if (renderer->SetTextureColorMod) { return renderer->SetTextureColorMod(renderer, texture); } else { return 0; } }
int SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) { if (!SDL_RenderTargetSupported(renderer)) { return SDL_Unsupported(); } if (texture == renderer->target) { /* Nothing to do! */ return 0; } /* texture == NULL is valid and means reset the target to the window */ if (texture) { CHECK_TEXTURE_MAGIC(texture, -1); if (renderer != texture->renderer) { return SDL_SetError("Texture was not created with this renderer"); } if (texture->access != SDL_TEXTUREACCESS_TARGET) { return SDL_SetError("Texture not created with SDL_TEXTUREACCESS_TARGET"); } if (texture->native) { /* Always render to the native texture */ texture = texture->native; } } if (texture && !renderer->target) { /* Make a backup of the viewport */ renderer->viewport_backup = renderer->viewport; renderer->clip_rect_backup = renderer->clip_rect; renderer->scale_backup = renderer->scale; renderer->logical_w_backup = renderer->logical_w; renderer->logical_h_backup = renderer->logical_h; } renderer->target = texture; if (renderer->SetRenderTarget(renderer, texture) < 0) { return -1; } if (texture) { renderer->viewport.x = 0; renderer->viewport.y = 0; renderer->viewport.w = texture->w; renderer->viewport.h = texture->h; renderer->scale.x = 1.0f; renderer->scale.y = 1.0f; renderer->logical_w = texture->w; renderer->logical_h = texture->h; } else { renderer->viewport = renderer->viewport_backup; renderer->clip_rect = renderer->clip_rect_backup; renderer->scale = renderer->scale_backup; renderer->logical_w = renderer->logical_w_backup; renderer->logical_h = renderer->logical_h_backup; } if (renderer->UpdateViewport(renderer) < 0) { return -1; } if (renderer->UpdateClipRect(renderer) < 0) { return -1; } /* All set! */ return 0; }