2017-07-26 3 views
-2

私はいくつかのデータvec3とmat3を、Vulkanで設定された記述子でシェーダにバインドしようとしています。しかし、データは間違っています。私はvec4とmat4を使う必要があります。データはシェーダで正しいでしょう。それはなぜです?データvec3とmat3をVulkanに設定された記述子でシェーダにバインドする方法はありますか?

+0

あなたのコードを表示したり、より多くの情報を提供してください(どのようにあなたは「いくつかのデータを束縛する」、どのような記述子、メモリ内のあなたのデータのレイアウトなのかなど)。この説明はあなたの問題を解決するのには十分ではありません。 [オフセットとレイアウトルール](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#interfaces-resources-layout)に従っていますか?特に、これは:「サイズNのコンポーネントを有する3成分ベクトルまたは4成分ベクトルは、4 Nの基本配列を有する」 –

答えて

-1

これはVulkan固有の質問ではありません。それはGLSLの質問です。 コードを最適化する(配置など)ために、コンパイラは128バイトのデータブロックを処理することを好みます。 したがって、mat3を扱うことは実際には不可能です。

ただし、vec3(ユニフォームバッファなど)を使用する場合は、均一ブロックにvec3 array[32];と書くことができますが、CPU側では128バイトに合わせる必要があります。だから、私はあなたのようなものをCPU側で使うようアドバイスします:

vec4 myVec3[32];そしてW座標があなたのシェーダ内で使用したことがないことになるので、あなたはあなたがより多くの情報を持つことができます... vec3として

それを使用します。 https://learnopengl.com/#!Advanced-OpenGL/Advanced-GLSL https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_uniform_buffer_object.txt

+0

https://github.com/KhronosGroup/Vulkan-Docs/issues/274 –

関連する問題