XNA: الحصول على البنية باعتبارها الملمس لGPU
سؤال
وأنا استخدم XNA كأساس سهلة لطيفة لبعض معالجة الرسومات أفعله على وحدة المعالجة المركزية، لأنه يوفر بالفعل الكثير من الأشياء التي تحتاج إليها. حاليا، يا "rendertarget" هو مجموعة من struct
خصيصا اللون لقد كتبت أن يتكون من ثلاثة حقول العائمة نقطة: R، G، B.
وعندما كنت ترغب في تقديم هذا على الشاشة، وأنا يدويا تحويل هذه المجموعة إلى اللون struct
أن XNA تقدم (8 بت فقط من الدقة لكل قناة) ببساطة عن طريق تحامل على نتيجة ضمن نطاق بايت من 0-255. وبعد ذلك وضع هذه المجموعة الجديدة كما يتضح من البيانات من Texture2D
(له SurfaceFormat
من SurfaceFormat.Color
) وجعل الملمس مع SpriteBatch
.
وماذا أنا أبحث عن طريقة للتخلص من هذه العملية الترجمة على وحدة المعالجة المركزية وببساطة ترسل لي backbuffer مباشرة إلى GPU كنوع من الملمس، حيث كنت تريد القيام ببعض الأساسي مرحلة ما بعد المعالجة. وأنا حقا بحاجة إلى المزيد من الدقة قليلا من 8 بت هناك (وليس بالضرورة 32-بت، ولكن منذ ما أفعله ليس GPU مكثفة، فإنه لا يمكن أن يصب أعتقد).
وكيف أذهب عن القيام بذلك؟
وأنا أحسب أنه إذا أعطيت اللون حجم صريح من 32 بايت (حتى 8 بايت الحشو، لأن بلدي ثلاث قنوات ملء سوى 24 بت) من خلال StructLayout
وتعيين SurfaceFormat
للنسيج التي يتم تقديمها مع SpriteBatch
إلى SurfaceFormat.Vector4
(32 بايت كبير) وملأت الملمس مع SetData<Color>
انها ستعمل ربما. ولكن أحصل على هذا الاستثناء:
وأما النوع الذي تستخدمه لT في هذه الطريقة هو حجم غير صالح لهذا المورد.
اقتباس فقرة> هل من الممكن استخدام أي struct
جعل التعسفي لوتفسر على أنها بيانات الملمس في GPU مثل يمكنك مع القمم من خلال VertexDeclaration
لتحديد كيف انها وضعت بها؟
المحلول
وأعتقد أن لدي ما أريد من إلقاء struct
اللون الذي أدليت به واستخدام Vector4
للحصول على معلومات اللون بلدي. يعمل هذا إذا تم تعيين SurfaceFormat
الملمس أيضا إلى Vector4
.