记忆崩溃,同时绘制与蜂窝上的skia

时间:2011-04-19 10:38:35

标签: c++ android android-ndk android-3.0-honeycomb skia

我有一个在堆栈上实例化“SkPath”对象的函数。之后我调用了一些函数,例如“moveTo”,“lineTo”,“cubicTo”(它只是在SkPath对象内部向内部数组添加新点)。然后我在堆栈上实例化“SkPaint”类的对象。

然后我调用“SkCanvas”对象的“drawPath”函数,并将SkPath和SkPaint对象作为args传递,然后崩溃。

我做了一些调查。事实证明,SkPath中的数组不再有效,因为SkPaint的构造函数通过调用sk_bzero(this, sizeof(*this));(“memset”为0来表示“指针”大小为“*指针”)来使其(SkPaint)对象为空这也以某种方式清理指向属于以前声明的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

0 个答案:

没有答案