Index: tests/SerializationTest.cpp |
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp |
index 9e9b221cd287800c74dd8c19cde24c1273092610..e4e1a7acd7b0e0f1a408362ca846ccaadfac55ca 100644 |
--- a/tests/SerializationTest.cpp |
+++ b/tests/SerializationTest.cpp |
@@ -5,13 +5,14 @@ |
* found in the LICENSE file. |
*/ |
-#include "SkAnnotationKeys.h" |
#include "Resources.h" |
+#include "SkAnnotationKeys.h" |
#include "SkCanvas.h" |
#include "SkFixed.h" |
#include "SkFontDescriptor.h" |
#include "SkImage.h" |
#include "SkImageSource.h" |
+#include "SkLightingShader.h" |
#include "SkMallocPixelRef.h" |
#include "SkOSFile.h" |
#include "SkPictureRecorder.h" |
@@ -21,6 +22,7 @@ |
#include "SkWriteBuffer.h" |
#include "SkValidatingReadBuffer.h" |
#include "SkXfermodeImageFilter.h" |
+#include "sk_tool_utils.h" |
#include "Test.h" |
static const uint32_t kArraySize = 64; |
@@ -182,8 +184,8 @@ static T* TestFlattenableSerialization(T* testObj, bool shouldSucceed, |
size_t bytesWritten = writer.bytesWritten(); |
REPORTER_ASSERT(reporter, SkAlign4(bytesWritten) == bytesWritten); |
+ SkASSERT(bytesWritten <= 4096); |
unsigned char dataWritten[4096]; |
- SkASSERT(bytesWritten <= sizeof(dataWritten)); |
writer.writeToMemory(dataWritten); |
// Make sure this fails when it should (test with smaller size, but still multiple of 4) |
@@ -546,6 +548,43 @@ DEF_TEST(Serialization, reporter) { |
} |
TestPictureTypefaceSerialization(reporter); |
+ |
+ // Test SkLightingShader/NormalMapSource serialization |
+ { |
+ const int kTexSize = 2; |
+ |
+ SkLights::Builder builder; |
+ |
+ builder.add(SkLights::Light(SkColor3f::Make(1.0f, 1.0f, 1.0f), |
+ SkVector3::Make(1.0f, 0.0f, 0.0f))); |
+ builder.add(SkLights::Light(SkColor3f::Make(0.2f, 0.2f, 0.2f))); |
+ |
+ sk_sp<SkLights> fLights = builder.finish(); |
+ |
+ SkBitmap diffuse = sk_tool_utils::create_checkerboard_bitmap( |
+ kTexSize, kTexSize, |
+ sk_tool_utils::color_to_565(0x0), |
+ sk_tool_utils::color_to_565(0xFF804020), |
+ 8); |
+ |
+ SkRect bitmapBounds = SkRect::MakeIWH(diffuse.width(), diffuse.height()); |
+ |
+ SkMatrix matrix; |
+ SkRect r = SkRect::MakeWH(SkIntToScalar(kTexSize), SkIntToScalar(kTexSize)); |
+ matrix.setRectToRect(bitmapBounds, r, SkMatrix::kFill_ScaleToFit); |
+ |
+ SkVector invNormRotation = { SkScalarSqrt(0.3f), SkScalarSqrt(0.7f) }; |
+ SkBitmap normals; |
+ normals.allocN32Pixels(kTexSize, kTexSize); |
+ |
+ sk_tool_utils::create_frustum_normal_map(&normals, SkIRect::MakeWH(kTexSize, kTexSize)); |
+ sk_sp<SkShader> lightingShader = SkLightingShader::Make(diffuse, normals, fLights, |
+ invNormRotation, &matrix, &matrix); |
+ |
+ SkAutoTUnref<SkShader>(TestFlattenableSerialization(lightingShader.get(), true, reporter)); |
+ // TODO test equality? |
+ |
+ } |
} |
/////////////////////////////////////////////////////////////////////////////////////////////////// |