スタック上の「SkPath」のオブジェクトをインスタンス化する関数があります。その後、「moveTo」、「lineTo」、「cubicTo」などのいくつかの関数を呼び出します (これは、SkPath オブジェクト内の内部配列に新しいポイントを追加するだけです)。次に、同じくスタック上で「SkPaint」クラスのオブジェクトをインスタンス化します。
次に、「SkCanvas」オブジェクトの「drawPath」関数を呼び出し、引数として SkPath および SkPaint オブジェクトを渡すと、クラッシュします。
私はいくつかの調査を行いました。sk_bzero(this, sizeof(*this));
SkPaint のコンストラクターが("memset" to 0 for "pointer" with "*pointer") を呼び出すことによってその (SkPaint の) オブジェクトを null にしているため、SkPath 内の配列はもう有効ではないことがわかります 。事前に宣言された SkPath のオブジェクトに属する配列へのポインタ。
SkPath の前に SkPaint をインスタンス化することで修正しましたが、問題はまだ残っています。Android 2.2 でも同じコードで問題なく動作します。
ハードウェアアクセラレーションを使用していません。
SkPath skPath;
skPath.setFillType(fillType);
skPath.moveTo(x1, y1);
skPath.cubicTo(x1, y1, x2, y2, x3, y3);
skPath.lineTo(x1, y1);
skPath.close();
SkPaint paint; //<- will call constructor that cleans up pointer to array
paint.setAntiAlias(true);
GfxRGB rgb;
state->getFillRGB(&rgb);
paint.setColor(GfxRGB2SkColor(rgb));
paint.setStyle(SkPaint::kFill_Style);
paint.setAlpha((U8CPU) (state->getFillOpacity() * 255));
canvas->drawPath(skPath, paint); // <- will crash here