Exposed SkCanvas::drawMesh
Added drawMesh method to the Canvas API, utilizing SkCanvas::drawMesh.
Bug: b/253321460
Test: HwAccelerationTest MeshActivity
Change-Id: I43802af61bbd6f76444b4e4b7cec2b95bae34f66
diff --git a/libs/hwui/jni/MeshSpecification.cpp b/libs/hwui/jni/MeshSpecification.cpp
index 22fa4d3..619a3ed 100644
--- a/libs/hwui/jni/MeshSpecification.cpp
+++ b/libs/hwui/jni/MeshSpecification.cpp
@@ -50,7 +50,6 @@
SkString(attName.c_str())};
attVector.push_back(std::move(temp));
}
-
return attVector;
}
@@ -76,11 +75,15 @@
auto varyings = extractVaryings(env, varyingArray);
auto skVertexShader = ScopedUtfChars(env, vertexShader);
auto skFragmentShader = ScopedUtfChars(env, fragmentShader);
- auto meshSpec = SkMeshSpecification::Make(attributes, vertexStride, varyings,
- SkString(skVertexShader.c_str()),
- SkString(skFragmentShader.c_str()))
- .specification;
- return reinterpret_cast<jlong>(meshSpec.release());
+ auto meshSpecResult = SkMeshSpecification::Make(attributes, vertexStride, varyings,
+ SkString(skVertexShader.c_str()),
+ SkString(skFragmentShader.c_str()));
+
+ if (meshSpecResult.specification.get() == nullptr) {
+ jniThrowException(env, "java/lang/IllegalArgumentException", meshSpecResult.error.c_str());
+ }
+
+ return reinterpret_cast<jlong>(meshSpecResult.specification.release());
}
static jlong MakeWithCS(JNIEnv* env, jobject thiz, jobjectArray attributeArray, jint vertexStride,
@@ -90,13 +93,15 @@
auto varyings = extractVaryings(env, varyingArray);
auto skVertexShader = ScopedUtfChars(env, vertexShader);
auto skFragmentShader = ScopedUtfChars(env, fragmentShader);
- auto meshSpec = SkMeshSpecification::Make(attributes, vertexStride, varyings,
- SkString(skVertexShader.c_str()),
- SkString(skFragmentShader.c_str()),
- GraphicsJNI::getNativeColorSpace(colorSpace))
- .specification;
+ auto meshSpecResult = SkMeshSpecification::Make(
+ attributes, vertexStride, varyings, SkString(skVertexShader.c_str()),
+ SkString(skFragmentShader.c_str()), GraphicsJNI::getNativeColorSpace(colorSpace));
- return reinterpret_cast<jlong>(meshSpec.release());
+ if (meshSpecResult.specification.get() == nullptr) {
+ jniThrowException(env, "java/lang/IllegalArgumentException", meshSpecResult.error.c_str());
+ }
+
+ return reinterpret_cast<jlong>(meshSpecResult.specification.release());
}
static jlong MakeWithAlpha(JNIEnv* env, jobject thiz, jobjectArray attributeArray,
@@ -106,12 +111,16 @@
auto varyings = extractVaryings(env, varyingArray);
auto skVertexShader = ScopedUtfChars(env, vertexShader);
auto skFragmentShader = ScopedUtfChars(env, fragmentShader);
- auto meshSpec = SkMeshSpecification::Make(
- attributes, vertexStride, varyings, SkString(skVertexShader.c_str()),
- SkString(skFragmentShader.c_str()),
- GraphicsJNI::getNativeColorSpace(colorSpace), SkAlphaType(alphaType))
- .specification;
- return reinterpret_cast<jlong>(meshSpec.release());
+ auto meshSpecResult = SkMeshSpecification::Make(
+ attributes, vertexStride, varyings, SkString(skVertexShader.c_str()),
+ SkString(skFragmentShader.c_str()), GraphicsJNI::getNativeColorSpace(colorSpace),
+ SkAlphaType(alphaType));
+
+ if (meshSpecResult.specification.get() == nullptr) {
+ jniThrowException(env, "java/lang/IllegalArgumentException", meshSpecResult.error.c_str());
+ }
+
+ return reinterpret_cast<jlong>(meshSpecResult.specification.release());
}
static void MeshSpecification_safeUnref(SkMeshSpecification* meshSpec) {
@@ -153,4 +162,4 @@
return 0;
}
-} // namespace android
\ No newline at end of file
+} // namespace android