問題タブ [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.

0 投票する
1 に答える
518 参照

xcode - Fox アプリケーションで水シェーダーを実装する方法

Apple には、基本的な SceneKit 機能をデモする単純な Fox プロジェクトがあります。ウォーターフォール テクスチャ アニメーション シェーダーが実装されている場所/方法を説明できる人はいますか (Fox2 with lava も)? シェーダーをファイルからロードしてプログラムでバインドできることは知っていますが、この場合、シェーダーはシーン内に統合されており、これまでのところ回避方法がわかりません。

0 投票する
0 に答える
1168 参照

ios - CPUからメタルのGPUにfloat3値の配列を渡す方法は?

色の値を配列としてシェーダーに渡す必要があります。今、私はそれを構造体 RGBColors として渡し、構造体として受け取り、正常に動作しています。

しかし、シェーダーでfloat3値として受け取りたいです。しかし、float3 に変更するとすぐに動作がおかしくなり、ちらつき始め、適切な色が得られません。

フラグメントバッファを設定するために使用したコードは次のとおりです。

RGBColors の構造は次のとおりです。

この構造から、値の配列を作成し、Floatフラグメント バッファに設定します。

let datasize = 16 * values.count / 3C++ の 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: [])倍にする必要があることがわかります。

なぜそれを機能させるために乗数が必要なのですか? 私はこれを理解していません。誰かが私に提案できますか?