سؤال

وايم ابتداء لإضافة دعم d3d10 للذهاب إلى جانب بلدي الخلفية الرسومات d3d9 القائمة.

والمشكلة هي كافة التعليمات البرمجية الموجودة (في العديد من التطبيقات ...) يستخدم ARGB تنسيق الألوان ولكن لم أستطع العثور على وضع صيغة يطابق لd3d10. لا d3d10 لا يدعم صيغ اللون ARGB على الإطلاق، أو أنا فقط غاب عن شيء؟ إذا كنت havnt شيء غاب ما هو وسيلة جيدة لتحويل بينهما، ويتطلب فقط البايت الأول يمكن نقلها إلى نهاية، وهذا يبدو وكأنه مفهوم بسيط جدا ولكن أنا غير قادر على رؤية أي حال أن نفعل ذلك بخلاف كسر اللون إلى مكوناته وإعادة بناء ذلك ... على سبيل المثال:

//unsigned colIn, colOut
unsigned char
    a = (colIn & 0xFF000000) >> 24,
    r = (colIn & 0x00FF0000) >> 16,
    g = (colIn & 0x0000FF00) >> 8,
    b = (colIn & 0x000000FF);
colOut = (r << 24) | (g << 16) | (b << 8) | a;
هل كانت مفيدة؟

المحلول

وبالنظر إلى أهمية التعداد نوع أو I (جدا) فشل في العثور على أي صيغ AxRxGxBx. لذلك يبدو عليك القيام به في swizzling من قبل نفسك، ثم.

وهذا هو مناسبة للغاية ل SSE الأمثل بالطبع، معرفة ما اذا كان المترجم الخاص بك قادر على تحسين رمز إلى شيء يستخدم SSE والأداء ينبغي أن يكون على ما يرام.

والتفكير في قضايا endianness عند القيام هذا الرمز، فإنه من السهل أن تجعل من الخطأ وهذا الرمز هو من الصعب الكتابة دون مبالين endianness.

نصائح أخرى

ويبدو لي مثل هذا الشكل اختفت لذلك كنت بحاجة إلى إعادة ترتيب البيانات الخاصة بك. ولكن إذا كنت تنوي استخدام RGBA، فإنك لن تحتاج إلى فصل كل ما تبذلونه من الألوان مثل مثالك لا منذ R، G، B & لا تزال في نفس الترتيب على التوالي، هل يمكن نقل هذه القنوات (3) وقطعة واحدة.

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