問題タブ [metal-performance-shaders]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xcode - Fox アプリケーションで水シェーダーを実装する方法
Apple には、基本的な SceneKit 機能をデモする単純な Fox プロジェクトがあります。ウォーターフォール テクスチャ アニメーション シェーダーが実装されている場所/方法を説明できる人はいますか (Fox2 with lava も)? シェーダーをファイルからロードしてプログラムでバインドできることは知っていますが、この場合、シェーダーはシーン内に統合されており、これまでのところ回避方法がわかりません。
ios - CPUからメタルのGPUにfloat3値の配列を渡す方法は?
色の値を配列としてシェーダーに渡す必要があります。今、私はそれを構造体 RGBColors として渡し、構造体として受け取り、正常に動作しています。
しかし、シェーダーでfloat3値として受け取りたいです。しかし、float3 に変更するとすぐに動作がおかしくなり、ちらつき始め、適切な色が得られません。
フラグメントバッファを設定するために使用したコードは次のとおりです。
RGBColors の構造は次のとおりです。
この構造から、値の配列を作成し、Float
フラグメント バッファに設定します。
let datasize = 16 * values.count / 3
C++ の float データ型は 4 バイトですが、simd の float3 は 16 バイトであるため、コードに値 16 を指定しました。
そして、シェーダーでメソッドを実装しています
最後に、正しい出力色が得られません。
float3 simd
データ型をデータ型に一致させる方法swift Float
。誰かが私に提案できますか?
編集:
float3 から MTLBuffer を作成する方法に関する解決策を見つけました。コードは次のとおりです。
このコードは完全に正常に動作します。しかし、コードでは、コードを機能させるには長さを2let bufferCreated = device.makeBuffer(length: MemoryLayout.size(ofValue: valueBuffer[0]) * 2 * valueBuffer.count , options: [])
倍にする必要があることがわかります。
なぜそれを機能させるために乗数が必要なのですか? 私はこれを理解していません。誰かが私に提案できますか?