2012-10-16 5 views
19

3Dオブジェクトでテクスチャを使用すると、Xcode 4.5とiOS 6 SDK以降に奇妙な動作が発生しました。 OS X 10.8 SDKに対応してビルドすると、Macアプリケーションに問題が発生します。GLOSTextureはiOS6以降正しくマップされていません

iOSではOpenGL ES 2.0、OS X 10.8ではOpenGLレガシープロファイル(< 3.0)を使用しています。

テクスチャは正しい座標に置かれず、多くのアーティファクトがあります。 VAOは正しくアップロードされており、テクスチャなしで良好に見えます。 XCode 4.4.1とiOS 5.1 SDKを使用する場合は、すべて問題ありません。

VAOは全く同じです(OpenGL ESフレームキャプチャでチェックされています)。また、テクスチャユニフォームも正しくバインドされています。


のXcode 4.4 VAO概要

Xcode 4.4

のXcode 4.5 VAO概要

Xcode 4.5

XCodeの4.4.1(iOSの5.1 SDK)

iOS Simulator 5.1 SDK

XCodeの4.5(IOSの6 SDK)

iOS Simulator 6.0 SDK


コード/シェーダスニペットuploadiため

要部テクスチャを処理します。私はミニマムにシェイダーを取り除かなければならなかった。

頂点シェーダ

precision highp float; 
attribute vec2 a_vTextureCoordinate; 
uniform mat4 u_mModelViewMatrix; 
uniform mat4 u_mModelViewMatrixInverse; 
uniform mat4 u_mProjectionMatrix; 
uniform mat4 u_mNormalMatrix; 
void main() 
{ 
.... 

    // Transform output position 
    gl_Position = u_mProjectionMatrix * u_mModelViewMatrix * a_vPosition; 
    // Pass through texture coordinate v_texcoord = a_vTextureCoordinate.xy; 
    v_vPosition = vec3(u_mModelViewMatrix * a_vPosition); 
    v_vTextureCoordinate = a_vTextureCoordinate.xy; 
    .... 
} 

フラグメントシェーダ

precision highp float; 
// location 1 
uniform sampler2D u_diffuseTexture; 
varying vec2 v_vTextureCoordinate; 
varying vec3 v_vPosition; 
.... 
void main() { 
    .... 
    vec4 base = texture2D(u_diffuseTexture, v_vTextureCoordinate); 
    gl_FragColor = base; 
    .... 
} 

テクスチャローディング

NSDictionary *options = @{GLKTextureLoaderOriginBottomLeft: @(YES), [NSNumber numberWithBool:YES] : GLKTextureLoaderGenerateMipmaps}; 
    NSError *error; 
    path = [path stringByReplacingOccurrencesOfString:@"/" withString:@""]; 
    path = [[NSBundle mainBundle] pathForResource:[path stringByDeletingPathExtension] ofType:[path pathExtension]]; 
    GLKTextureInfo *texture = [GLKTextureLoader textureWithContentsOfFile:path options:options error:&error]; 

.... 
    [self setShaderTexture:[[materials objectForKey:@"diffuse"] objectForKey:@"glktexture"] 
        forKey:@"u_diffuseTexture" 
      withUniform1i:0 
      andTextureUnit:GL_TEXTURE0+0]; 
.... 

#pragma mark - Texture communication 

-(void)setShaderTexture:(GLKTextureInfo*)texture forKey:(NSString*)key withUniform1i:(int32_t)uniform andTextureUnit:(int32_t)unit { 
    glActiveTexture(unit); 
    glBindTexture(texture.target, texture.name); 
    [self.shaderManager sendUniform1Int:key parameter:uniform]; 
} 

(のみアクティブテクスチャの均一の送信)ループをレンダリング誰IOSの6ため採掘に近い問題がありましたか?

+1

https://bugreport.apple.com/でバグレポートを提出しましたか? OpenGL ESのエンジニアはこれを見てみたいかもしれません。これはあなたのアプリケーションにも表示されます。あなたもMac側でGLKTextureを使用していますか? –

+1

こんにちはブラッド、はい私はOS X 10.8でもGLKitを使用します。私は親切なことに誰もその問題を報告していないと思っています。 10.8のベータ段階では、すでにAppleのベータフォーラムで尋ねられましたが、手掛かりがあることを知っています。私もバグレポートを記入します。 – DasFuxx

+0

テストテクスチャでスクリーンショットを追加できますか? (例:番号付き/色付きのチェッカーボード) オフセットのパターンを確認すると役立つ場合があります。 – Andreas

答えて

1

すでに述べたように、bugreport.apple.comにバグを報告してください。GLKTextureLoaderが問題(おそらく良い理論のようです)を示唆している場合、私の頭の上から2つの方法のうちの1つで物を絞り込むかもしれません...

1)私はレンダリングしますテクスチャが些細なクワッドに表示され、レンダリング結果が期待どおりであるかどうかを確認します。ソーステクスチャは、あなたが期待していなかった何らかの方法で部分的に文字化けしていますか?

2)画像を別のサイズ/色数/画像タイプに変換し、問題がまだ存在するかどうか確認してください。私が考えていることはありそうもないようですが、イメージフォーマットのものが原因で異常なエッジケースに当たっているため、報告されていない可能性があります。これを知ることは、リンゴでこれを解決しようとする人にとっては大きな助けになるでしょう。

おそらくそれほど助けはありませんが、あなたのソースと資産にアクセスすることなく、何を示唆するのかかなり分かりません。 FWIW、私はあなたがやっていることに似たようなことをするサンプルをいくつか持っていますが、GLKit v。10.8の下では何も気づいていません。

関連する問題