シナリオ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
であるべきであるように感じさせる。混乱している。
質問
この行が何をしているのですか?そしてこれをスウィフトにどのように翻訳できますか?
。コンパイラは、 '' [GLuint]型の値を期待される引数型 '' UnsafePointerに変換できません! '"という文句を言います。基本的に私は 'self.texture2d0.name'値から' UnsafePointer ! 'を作成し、この' glUniform1iv'関数に渡すことができます。 –
@BrandonA 'GLuint'を' GLint'にキャストしてから配列に追加してください。そこから、Swiftは 'Array'から 'Unsafe(Mutable)Pointer (?|!)'への変換を自動的に処理します。 –
Alexander
@BrandonA既存のObjCコードは 'GLint'を' GLint'として再解釈します結果の値は入力のビットの再解釈である。 Swiftは次のようになります: 'let samplerIDs = [GLint(bitPattern:self.texture2d0.name)]' https://developer.apple.com/documentation/swift/int32/1539852-init – Alexander