シェーダーで動作するパーティクル レンダリング ライブラリを取得しようとしています。それは固定機能で完璧に機能し、私が目指している結果を知っています. 最終的なブレンディングビットをどのように行うかがわかりません。
このようなパーティクル ライフを DWORD にパックし、dword を頂点属性の 1 つとして設定します。クワッドには、このような 4 つの頂点があります。3 つの float 位置、3 つの float 法線、4 バイトの拡散、2 つの float uv。4byte 属性はどうすればよいですか? glsl シェーダーで vec4 または float 属性として使用しますか? また、このライブラリは事前に乗算されたアルファを使用するため、どのようなブレンド方程式を使用すればよいですか? ライブラリはパイロ粒子ライブラリです。
int ir = (int) (r * 255.0f + 0.5f);
int ig = (int) (g * 255.0f + 0.5f);
int ib = (int) (b * 255.0f + 0.5f);
int ia = (int) (a * Particle.Visibility * 255.0f + 0.5f);
DWORD diffuse;
#ifdef __BIG_ENDIAN__
if (GetLibrary()->GetGraphicsDevice()->IsRGBA())
diffuse = (ir << 24) | (ig << 16) | (ib << 8) | ia;
else diffuse = (ib << 24) | (ig << 16) | (ir << 8) | ia;
#else
if (GetLibrary()->GetGraphicsDevice()->IsRGBA())
diffuse = ir | (ig << 8) | (ib << 16) | (ia << 24);
else diffuse = ib | (ig << 8) | (ir << 16) | (ia << 24);
#endif /* __BIG_ENDIAN__ */