سؤال

مع Shader Model 2.0 ، يمكنك الحصول على 256 سجلًا ثابتًا. لقد كنت أبحث في تظليل مختلف ، وأحاول معرفة ما الذي يشكل سجلًا واحدًا؟

على سبيل المثال ، في تظليل الاستئصال الخاص بي ، لدي المتغيرات التالية التي تم إعلانها في الأعلى ، خارج الوظائف:

float4x4 InstanceTransforms[40];
float4 InstanceDiffuses[40];

float4x4 View;
float4x4 Projection;

float3 LightDirection = normalize(float3(-1, -1, -1));
float3 DiffuseLight = 1;
float3 AmbientLight = 0.66; 

float Alpha;

texture Texture;

كم عدد السجلات التي استهلكتها؟ كيف أحسبهم؟

هل كانت مفيدة؟

المحلول

كل سجل ثابت هو أ float4.

float3, float2 و float سوف يخصص كل سجل كامل. float4x4 سوف تستخدم 4 سجلات. سوف تتكاثر المصفوفات ببساطة عدد السجلات المخصصة لعدد العناصر. ومن المحتمل أن يخصص المترجم بعض السجلات نفسها لاستخدامها كثوابت في العمليات الحسابية المختلفة.

الطريقة الوحيدة لمعرفة ما يستخدمه التظليل هو تفكيكه. تحقيقًا لهذه الغاية ، قد تكون مهتمًا بهذا السؤال الذي طرحته منذ فترة: HLSL: فرض حد للتسجيل الثابت في وقت الترجمة

قد تجد أيضًا هذا واحد يستحق نظرة: HLSL: فهرس إلى عوامات غير محاذاة/معبأة. وهذا ما يفسر لماذا مجموعة من 40 floatستستخدم S 40 سجلًا ، وكيف يمكنك استخدامها 10 بدلاً من ذلك.

لك texture سوف تستخدم عينات نسيج (لديك 16 من هذه) ، وليس سجل ثابت.

للرجوع إليها ، وهنا قائمة سجلات PS_2_0 و سجلات VS_2_0.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top