سؤال

وأنا استخدم 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.

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