| 773 | drawScaledImage(image, position, size, scaler); |
| 774 | } |
| 775 | void drawScaledImage(sp<Image> image, Vec2<float> position, Vec2<float> size, |
| 776 | Scaler scaler = Scaler::Linear, Colour tint = {255, 255, 255, 255}) |
| 777 | { |
| 778 | |
| 779 | sp<RGBImage> rgbImage = std::dynamic_pointer_cast<RGBImage>(image); |
| 780 | if (rgbImage) |
| 781 | { |
| 782 | GLRGBImage *img = dynamic_cast<GLRGBImage *>(rgbImage->rendererPrivateData.get()); |
| 783 | if (!img) |
| 784 | { |
| 785 | img = new GLRGBImage(rgbImage, this); |
| 786 | image->rendererPrivateData.reset(img); |
| 787 | } |
| 788 | this->drawRgb(*img, position, size, scaler, {0, 0}, 0, tint); |
| 789 | return; |
| 790 | } |
| 791 | |
| 792 | sp<PaletteImage> paletteImage = std::dynamic_pointer_cast<PaletteImage>(image); |
| 793 | if (paletteImage) |
| 794 | { |
| 795 | GLPaletteImage *img = |
| 796 | dynamic_cast<GLPaletteImage *>(paletteImage->rendererPrivateData.get()); |
| 797 | if (!img) |
| 798 | { |
| 799 | img = new GLPaletteImage(paletteImage, this); |
| 800 | image->rendererPrivateData.reset(img); |
| 801 | } |
| 802 | if (scaler != Scaler::Nearest) |
| 803 | { |
| 804 | // blending indices doesn't make sense. You'll have to render |
| 805 | // it to an RGB surface then scale that |
| 806 | LogError("Only nearest scaler is supported on paletted images"); |
| 807 | } |
| 808 | this->drawPalette(*img, position, size, tint); |
| 809 | return; |
| 810 | } |
| 811 | |
| 812 | sp<Surface> surface = std::dynamic_pointer_cast<Surface>(image); |
| 813 | if (surface) |
| 814 | { |
| 815 | FBOData *fbo = dynamic_cast<FBOData *>(surface->rendererPrivateData.get()); |
| 816 | if (!fbo) |
| 817 | { |
| 818 | fbo = new FBOData(image->size, this); |
| 819 | image->rendererPrivateData.reset(fbo); |
| 820 | } |
| 821 | this->drawSurface(*fbo, position, size, scaler, tint); |
| 822 | return; |
| 823 | } |
| 824 | LogError("Unsupported image type"); |
| 825 | } |
| 826 | |
| 827 | void drawTinted(sp<Image> i, Vec2<float> position, Colour tint) override |
| 828 | { |
nothing calls this directly
no test coverage detected