将ios CGContextDrawImage移植到android

将ios CGContextDrawImage移植到android,android,ios,opengl-es,core-graphics,Android,Ios,Opengl Es,Core Graphics,我正在使用cocos2dx将iOS游戏移植到Android上。游戏的理念是使图像变形,并实时将其转换为物理形状。游戏的逻辑是首先使用CGContextDrawImage从纹理中创建CGContext,然后使用不同的混合模式在触摸时操纵上下文,如下所示: CGContextSetBlendMode(context, kCGBlendModeMultiply); CGContextDrawImage(context, rect, texture); 之后,在纹理中更新脏像素: glTe

我正在使用cocos2dx将iOS游戏移植到Android上。游戏的理念是使图像变形,并实时将其转换为物理形状。游戏的逻辑是首先使用CGContextDrawImage从纹理中创建CGContext,然后使用不同的混合模式在触摸时操纵上下文,如下所示:

  CGContextSetBlendMode(context, kCGBlendModeMultiply);
  CGContextDrawImage(context, rect, texture);
之后,在纹理中更新脏像素:

  glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_ALPHA, GL_UNSIGNED_BYTE, dirtyPixels);
这在iOS上运行良好,但在Android上不行,因为它没有核心图形(doh)。我正在寻找一种方法,使这个代码平台独立,因为两个图像的混合非常简单,我的想法是用我自己的代码交换CGContextDrawImage,以混合内存中的像素


如果我要实现我自己的混合像素代码,它会比使用核心图形慢得多(即使我会尽可能优化混合),还是应该找到一种方法,分别为每个平台实现混合(在iOS上使用核心图形和Android上可用的任何东西)?或者有没有更好的方法(我已经尝试过在GPU上卸载混合,但是恢复像素的同步太慢了)?

好吧,如果你“尽可能优化混合”,你至少会和核心图形一样快。这不是魔法;这只是你没有写的代码。不过,它可能是经过了很好优化的代码,所以您的工作会很适合您

或者我应该找到一种方法,分别为每个平台实现混合(使用iOS上的核心图形和Android上可用的任何图形)

那就是我要做的。让苹果和谷歌为你做艰苦的工作


我不是安卓开发者,所以我不能给出任何具体的建议或支持,但如果你不需要调整第二张图像的不透明度,你可以尝试粗略地描述一下你需要在安卓上做什么,甚至是你需要做什么。

除了极少数基于Intel Atom的安卓手机,你不能用SSE来做这项工作。更可能是ARM的霓虹灯VPU。本地代码通常是需要避免的,只是出于努力。正如我所怀疑的。最好做一个基准测试,看看混合会慢多少。如果只是几毫秒,我更喜欢跨平台的解决方案,因为它的工作量更少。谢谢。我做了一个基准测试并使用了自定义算法,它比使用drawImage快10倍(我使用的是非常小的图像)。@blejzz:很有趣。在iOS或Android上的速度是原来的10倍?你的代码是矢量化的还是基于GPU的,还是仅仅是一个直接的循环?在iOS上。它只是一个直循环,缩放纹理并将其混合成一个小纹理(一个是32x32,另一个是120x180)。我认为核心图形是由gpu支持的,从gpu到cpu的数据同步比简单的循环需要更长的时间。