2017-09-20 16 views
0

シナリオGLKit:スウィフト

用フォーマットのObjective-C GLKitパラメータは、私はビデオフレームのクロマ値を操作するアプリケーションを構築しています。私は別のプロジェクトのObjective-Cコードを使って、それをSwiftに翻訳しています。しかし、私はそれが意味するものを理解することができれば、私がSwiftに翻訳したいと思う奇妙なコードを見つけました。方法は以下の通りです:

- (void)updateUniformValues 
{ 
    // Precalculate the mvpMatrix 
    GLKMatrix4 modelViewProjectionMatrix = GLKMatrix4Multiply(
     self.transform.projectionMatrix, 
     self.transform.modelviewMatrix); 
    glUniformMatrix4fv(uniforms[GMVPMatrix], 1, 0, 
     modelViewProjectionMatrix.m); 

    // Texture samplers 
    const GLint samplerIDs[1] = {self.texture2d0.name}; 
    glUniform1iv(uniforms[GSamplers2D], 1, 
     samplerIDs); 
} 

注:self.texture2d0問題の行がconst GLint samplerIDs[1] = {self.texture2d0.name};あるタイプGLKEffectPropertyTexture

です。私はSwiftでプログラミングする前にObjective-Cで何年もコーディングしてきましたが、以前はこのようなことは見たことがありません。だから、タイプGlintの定数ですが、戻り値のないブロックself.texture2d0の値が割り当てられていますか?そして[1]は私にそれがArrayであるべきであるように感じさせる。混乱している。

質問

この行が何をしているのですか?そしてこれをスウィフトにどのように翻訳できますか?

答えて

1

GLintconstの配列であり、単一の非constメンバーであるself.texture2d0.nameです。

それはに類似して次のようになります。ご入力のためのちょっとアレクサンダーのおかげ

let samplerIDs = [self.texture2d0.name] 
+0

。コンパイラは、 '' [GLuint]型の値を期待される引数型 '' UnsafePointer に変換できません! '"という文句を言います。基本的に私は 'self.texture2d0.name'値から' UnsafePointer ! 'を作成し、この' glUniform1iv'関数に渡すことができます。 –

+0

@BrandonA 'GLuint'を' GLint'にキャストしてから配列に追加してください。そこから、Swiftは 'Array 'から 'Unsafe(Mutable)Pointer (?|!)'への変換を自動的に処理します。 – Alexander

+0

@BrandonA既存のObjCコードは 'GLint'を' GLint'として再解釈します結果の値は入力のビットの再解釈である。 Swiftは次のようになります: 'let samplerIDs = [GLint(bitPattern:self.texture2d0.name)]' https://developer.apple.com/documentation/swift/int32/1539852-init – Alexander

関連する問題