سؤال

وأنا محاولة لرسم صورة 2D إلى الشاشة في Direct3D، التي أفترض يجب أن يتم عن طريق تعيين الملمس إلى مضلع لوحة مستطيلة المتوقع أن تملأ الشاشة. (أنا غير مهتم أو لا يمكن استخدام Direct2D.) جميع المعلومات الملمس وجدتها في SDK يصف تحميل صورة نقطية من ملف وتعيين الملمس لاستخدام هذا نقطية، ولكن لم أجد حتى الآن طريقة لمعالجة الملمس كما بكسل نقطية بكسل.

ما أود حقا هو وظيفة مثل

و void TextureBitmap::SetBitmapPixel(int x, int y, DWORD color);

إذا كنت لا يمكن تعيين بكسل مباشرة في كائن الملمس، وأحتاج للحفاظ حول مجموعة DWORD هذا هو نقطية ثم قم بتعيين نسيج إلى أن كل إطار؟

وأخيرا، في حين أن أفترض في البداية أنني سوف نفعل ذلك على وحدة المعالجة المركزية، ربما يمكن أيضا أن يتم الحسابات اللون لكل بكسل على GPU. هو رمز HLSL الذي يحدد لون بكسل واحد في الملمس، أو هي تظليل بكسل مفيدة فقط لتعديل بكسل العرض؟

وشكرا.

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

المحلول

أولا، سؤالك المباشر:

ويمكنك، من الناحية الفنية، تعيين بكسل في الملمس. وهذا يتطلب استخدام LockRect و <ل أ href = "http://msdn.microsoft.com/en-us/library/bb205914(VS.85).aspx" يختلط = "نوفولو noreferrer"> UnlockRect API.

في السياق D3D، "تأمين" عادة ما يشير إلى نقل مورد من ذاكرة GPU إلى ذاكرة النظام (وبالتالي تعطيل مشاركتها في تقديم العمليات). مرة واحدة مقفلة، يمكنك تعديل المخزن المؤقت بالسكان كما يحلو لك، ومن ثم فتح - أي نقل البيانات المعدلة إلى GPU. قفل عموما كان يعتبر عملية مكلفة جدا، ولكن منذ بكيي 2.0 ربما كان هذا هو لا مصدر قلق كبير بعد الآن. يمكنك أيضا تحديد صغيرة RECT (حتى 1 بكسل) كحجة 2ND إلى LockRect، وبالتالي تتطلب ذاكرة نقل وحدة تخزين بيانات يكاد يذكر، وآمل أن السائق هو في الواقع ذكية بما فيه الكفاية لنقل أن مجرد (أنا أعرف حقيقة أنه في السائقين نفيديا القديمة لم يكن هذا هو الحال).

ووأكثر كفاءة (ورمز المكثف) وسيلة لتحقيق ذلك، هو في الواقع أبدا مغادرة GPU. إذا كنت خلق نسيج المرور باعتباره RenderTarget ( وهذا هو، تحديد D3DUSAGE_RENDERTARGET كما الحجة استخدام )، ثم هل يمكن ضبطه كوجهة خط الأنابيب قبل اتخاذ أي مكالمات التعادل، وكتابة تظليل (ربما <لأ href = "http://msdn.microsoft.com/en-us/library/bb205728(VS. 85) .ASPX "يختلط =" نوفولو noreferrer "> المعلمات مرور ) لرسم بكسل الخاصة بك. ويعتبر هذا الاستخدام من تقديم الأهداف القياسية، ويجب أن تكون قادرة على العثور على العديد من نماذج التعليمات البرمجية حول - ولكن إلا إذا كنت تواجه بالفعل مشكلات في الأداء، وأقول هذا مبالغة لوحة 2D واحدة

وHTH.

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