私はこれで完全に機能しています。GLに行く必要がなかったので、とても安心しています。

私は基本的に、最初の (赤 -- 12 時の位置にある) 宝石を、右半分だけが見えるようにマスクで描画します。
そして残りの11枚を描きます。
次に、最初のものをもう一度描きます。今回は、マスクを左半分のみを表示するように設定します。
for( int i = 0; i <= 12; i++ )
{
for ( int dullGlow = 0; dullGlow <= 1; dullGlow++ )
{
BOOL isDull = ( dullGlow == 0 ) ? YES : NO;
CALayer* L = [CALayer layer];
CGImageRef dullImage = [ButtonImages dullImage: i % 12];
CGImageRef glowImage = [ButtonImages glowImage: i % 12];
L.contents = (id) ( isDull ? dullImage : glowImage );
L.bounds = CGRectMake( 0, 0, buttonSize, buttonSize );
L.opacity = ( isDull ? 1.0 : 0.0 );
if( i == 0 || i == 12 )
{
CGFloat halfSize = buttonSize / 2.0;
CGRect keepLeftHalf = CGRectMake( 0, 0,
halfSize, buttonSize );
CGRect keepRightHalf = CGRectMake( halfSize, 0,
halfSize, buttonSize );
CALayer* maskLayer = [CALayer layer];
maskLayer.frame = ( i == 0 ) ? keepRightHalf : keepLeftHalf;
maskLayer.backgroundColor = [UIColor greenColor].CGColor;
maskLayer.edgeAntialiasingMask = 0x0;
[L setMask: maskLayer];
}
[self.layer addSublayer: L];
layers[ dullGlow ] [ i ] = L;
} // dullGlow
} // i
edgeAntialiasingMask の 4 つの最下位ビットを、4 つのエッジすべてでアンチエイリアシングの 0 項に設定します。この行がないと、継ぎ目ができていました。
マスキング プロセスのメカニズムを誰かが説明できれば非常にありがたいです。正しい結果が得られましたが、試行錯誤を繰り返しました。
マスクが (不透明な) 緑に設定されており、マスクされた領域が表示されていることに注意してください。つまり、最初のパスでは、緑の四角形が画像の右半分を覆っており、表示されるのはこの愛です。
ピクセルごとに、レイヤーピクセルRGBAにマスクピクセルのアルファ値を掛けていると推測しています