Browse Source

Canvas:newImageData creates an ImageData with a pixel format that matches the canvas'.

Alex Szpakowski 6 years ago
parent
commit
f03b391245
1 changed files with 8 additions and 19 deletions
  1. 8 19
      src/modules/graphics/Canvas.cpp

+ 8 - 19
src/modules/graphics/Canvas.cpp

@@ -137,26 +137,15 @@ love::image::ImageData *Canvas::newImageData(love::image::Image *module, int sli
 	if (gfx != nullptr && gfx->isCanvasActive(this))
 		throw love::Exception("Canvas:newImageData cannot be called while that Canvas is currently active.");
 
-	PixelFormat dataformat;
-	switch (getPixelFormat())
-	{
-	case PIXELFORMAT_RGB10A2: // FIXME: Conversions aren't supported in GLES
-		dataformat = PIXELFORMAT_RGBA16;
-		break;
-	case PIXELFORMAT_R16F:
-	case PIXELFORMAT_RG16F:
-	case PIXELFORMAT_RGBA16F:
-	case PIXELFORMAT_RG11B10F: // FIXME: Conversions aren't supported in GLES
-		dataformat = PIXELFORMAT_RGBA16F;
-		break;
-	case PIXELFORMAT_R32F:
-	case PIXELFORMAT_RG32F:
-	case PIXELFORMAT_RGBA32F:
-		dataformat = PIXELFORMAT_RGBA32F;
-		break;
-	default:
+	PixelFormat dataformat = getPixelFormat();
+	if (dataformat == PIXELFORMAT_sRGBA8)
 		dataformat = PIXELFORMAT_RGBA8;
-		break;
+
+	if (!image::ImageData::validPixelFormat(dataformat))
+	{
+		const char *formatname = "unknown";
+		love::getConstant(dataformat, formatname);
+		throw love::Exception("ImageData with the '%s' pixel format is not supported.", formatname);
 	}
 
 	return module->newImageData(r.w, r.h, dataformat);