SkSafeUnref(obj);
// f == NULL when not !USE_OPENGL_RENDERER, so no need to delete outside the ifdef
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return;
if (android::uirenderer::Caches::hasInstance()) {
android::uirenderer::Caches::getInstance().resourceCache.destructor(f);
} else {
static SkiaColorFilter* glCreatePorterDuffFilter(JNIEnv* env, jobject, SkColorFilter *skFilter,
jint srcColor, SkPorterDuff::Mode mode) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
return new SkiaBlendFilter(skFilter, srcColor, SkPorterDuff::ToXfermodeMode(mode));
#else
return NULL;
static SkiaColorFilter* glCreateLightingFilter(JNIEnv* env, jobject, SkColorFilter *skFilter,
jint mul, jint add) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
return new SkiaLightingFilter(skFilter, mul, add);
#else
return NULL;
static SkiaColorFilter* glCreateColorMatrixFilter(JNIEnv* env, jobject, SkColorFilter *skFilter,
jfloatArray jarray) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
AutoJavaFloatArray autoArray(env, jarray, 20);
const float* src = autoArray.ptr();
SkSafeUnref(shader);
// skiaShader == NULL when not !USE_OPENGL_RENDERER, so no need to delete it outside the ifdef
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return;
if (android::uirenderer::Caches::hasInstance()) {
android::uirenderer::Caches::getInstance().resourceCache.destructor(skiaShader);
} else {
shader->setLocalMatrix(*matrix);
}
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return;
skiaShader->setMatrix(const_cast<SkMatrix*>(matrix));
#endif
}
static SkiaShader* BitmapShader_postConstructor(JNIEnv* env, jobject o, SkShader* shader,
SkBitmap* bitmap, int tileModeX, int tileModeY) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
SkiaShader* skiaShader = new SkiaBitmapShader(bitmap, shader,
static_cast<SkShader::TileMode>(tileModeX), static_cast<SkShader::TileMode>(tileModeY),
NULL, (shader->getFlags() & SkShader::kOpaqueAlpha_Flag) == 0);
float x0, float y0, float x1, float y1, jintArray colorArray,
jfloatArray posArray, int tileMode) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
size_t count = env->GetArrayLength(colorArray);
const jint* colorValues = env->GetIntArrayElements(colorArray, NULL);
static SkiaShader* LinearGradient_postCreate2(JNIEnv* env, jobject o, SkShader* shader,
float x0, float y0, float x1, float y1, int color0, int color1, int tileMode) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
float* storedBounds = new float[4];
storedBounds[0] = x0; storedBounds[1] = y0;
storedBounds[2] = x1; storedBounds[3] = y1;
static SkiaShader* RadialGradient_postCreate1(JNIEnv* env, jobject o, SkShader* shader,
float x, float y, float radius, jintArray colorArray, jfloatArray posArray, int tileMode) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
size_t count = env->GetArrayLength(colorArray);
const jint* colorValues = env->GetIntArrayElements(colorArray, NULL);
static SkiaShader* RadialGradient_postCreate2(JNIEnv* env, jobject o, SkShader* shader,
float x, float y, float radius, int color0, int color1, int tileMode) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
float* storedPositions = new float[2];
storedPositions[0] = 0.0f;
storedPositions[1] = 1.0f;
static SkiaShader* SweepGradient_postCreate1(JNIEnv* env, jobject o, SkShader* shader,
float x, float y, jintArray colorArray, jfloatArray posArray) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
size_t count = env->GetArrayLength(colorArray);
const jint* colorValues = env->GetIntArrayElements(colorArray, NULL);
static SkiaShader* SweepGradient_postCreate2(JNIEnv* env, jobject o, SkShader* shader,
float x, float y, int color0, int color1) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
float* storedPositions = new float[2];
storedPositions[0] = 0.0f;
storedPositions[1] = 1.0f;
static SkiaShader* ComposeShader_postCreate2(JNIEnv* env, jobject o, SkShader* shader,
SkiaShader* shaderA, SkiaShader* shaderB, SkPorterDuff::Mode porterDuffMode) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
SkXfermode::Mode mode = SkPorterDuff::ToXfermodeMode(porterDuffMode);
return new SkiaComposeShader(shaderA, shaderB, mode, shader);
#else
static SkiaShader* ComposeShader_postCreate1(JNIEnv* env, jobject o, SkShader* shader,
SkiaShader* shaderA, SkiaShader* shaderB, SkXfermode* mode) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return NULL;
SkXfermode::Mode skiaMode;
if (!SkXfermode::IsMode(mode, &skiaMode)) {
// TODO: Support other modes
char prop[PROPERTY_VALUE_MAX];
if (property_get("ro.kernel.qemu", prop, NULL) == 0) {
// not in the emulator
- return JNI_TRUE;
+ return GraphicsJNI::useOpenglRenderer() ? JNI_TRUE : JNI_FALSE;
}
// In the emulator this property will be set to 1 when hardware GLES is
// enabled, 0 otherwise. On old emulator versions it will be undefined.
static void
android_app_ActivityThread_dumpGraphics(JNIEnv* env, jobject clazz, jobject javaFileDescriptor) {
#ifdef USE_OPENGL_RENDERER
+ if (!GraphicsJNI::useOpenglRenderer()) return;
int fd = jniGetFDFromFileDescriptor(env, javaFileDescriptor);
android::uirenderer::DisplayList::outputLogBuffer(fd);
#endif // USE_OPENGL_RENDERER
int register_android_view_GLES20Canvas(JNIEnv* env) {
jclass clazz;
- FIND_CLASS(clazz, "android/graphics/Rect");
- GET_METHOD_ID(gRectClassInfo.set, clazz, "set", "(IIII)V");
+ if (GraphicsJNI::useOpenglRenderer()) {
+ FIND_CLASS(clazz, "android/graphics/Rect");
+ GET_METHOD_ID(gRectClassInfo.set, clazz, "set", "(IIII)V");
+ }
return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
}