DFPSR
مكتبة لتقديم البرامج الحديثة لـ C ++ 14 باستخدام SSE/NEON التي أنشأها David Forsgren Piuva. إذا كنت تبحث عن أحدث بدعة رئيسية ، فابحث في مكان آخر. هذه مكتبة لبرامج الجودة التي تهدف إلى تطويرها على مدار عقود متعددة والبقاء على قيد الحياة أحفادك مع الحد الأدنى من الصيانة. تمامًا مثل نحت إرثك في الحجر ، يتطلب الأمر المزيد من الجهد لإتقان المهارة ولكنه يعطي نتيجة أكثر قوة من خلال عدم الاعتماد على مكتبة بعيدة. الحد الأقصى لخبرة المستخدم والحد الأدنى من الاعتماد على النظام.
خلفية الخالق
سجل DXOMark العالمي في استقرار الفيديو الرقمي من صناعة الأجهزة المحمولة. عملت مع الرؤية الآلية الحرجة للمراقبة حركة مرور المطار المدني. عقدت محاضرات في التحسين في الشركات المختلفة في الصناعات المتنقلة والطبية والألعاب. عملت مع تحسينات على GPU و CPU و DSP و ISP و FPGA و ASIC.
يحتاج التحسين إلى أدوات جيدة لتوفير وقتك
الجزء الأكثر أهمية في تحسين التعليمات البرمجية هو فهم كل من الخوارزميات العالية والقيود المنخفضة للأجهزة ، لأنه لا يمكنك السماح للعالم بتصميم الخوارزمية ومبرمج يحسنها دون أي مجال للتغييرات في التجمع المكتوبة بخط اليد (الخطأ الأكثر شيوعًا). لا يتم تصميم الخوارزمية حتى يكون لديك مفاضلة جيدة بين الجودة والأداء مع وجود جميع التحسينات. يمكن تعويض توفير الوقت على حساب الجودة في مكان واحد عن طريق زيادة الجودة بتكلفة أقل في مكان آخر لزيادة السرعة والجودة. كلما كان بإمكانك إنشاء عودة قريبة من الخوارزمية بشكل أسرع ، كلما تكررت عملية التصميم بشكل أسرع. فكر فيما تقاربه حقًا. هل هدفك هو رسم أكبر عدد ممكن من المضلعات المستقيمة تمامًا ، أم أن الهدف هو تقريب شكل عالم حقيقي معقد باستخدام أي تقنية؟
الموقع الرسمي: dawoodoz.com
ما قد تبدو عليه ألعابك باستخدام عرض وحدة المعالجة المركزية متساوي القياس

الضوء الديناميكي في الوقت الفعلي مع ظلال مصبوبة قائمة على العمق ورسم الخرائط العادية عند 453 إطارًا في الثانية في 800 × 600 بكسل تعمل على وحدة المعالجة المركزية. من شأن الدقة الأعلى أن تحطم أسلوب الرجعية وتبدو في الواقع أسوأ ، ولكن هناك الكثير من الوقت المتبقي لمنطق اللعبة وتأثيرات إضافية. من خلال تقديم نماذج ثلاثية الأبعاد مسبقًا إلى الصور العادية والطبيعية والارتفاع ، تكون قراءة البيانات أكثر فعالية من ذاكرة التخزين المؤقت على وحدات المعالجة المركزية الحديثة من استخدام منظور مجاني. هذا يسمح أيضًا بوجود مثلثات أكثر من وحدات البكسل على الشاشة وإجراء تحديثات سلبية للهندسة الثابتة. يتم استخدام النماذج ثلاثية الأبعاد المنخفضة المنخفضة لإلقاء الظلال الديناميكية.
يتم أيضًا دعم التقدم التقليدي ثلاثي الأبعاد مع المضلعات

لا يكون التقديم ثلاثي الأبعاد بالسرعة التي يتم بها تقديم ثنائي الأبعاد أو متساوي القياس على وحدة المعالجة المركزية ، ولكنها غالبًا ما تصل إلى 60 هرتز في 1920 × 1080 بكسل للرسومات المنخفضة. للحصول على مستوى تفاصيل أعلى ومزيد من الميزات ، يوصى بنسخ وتعديل خط أنابيب التقديم لجعله متشدد للميزات التي تريدها فقط ، ثم تبسيط الرياضيات لمحرك التقديم الخاص بك ، كما هو الحال بالنسبة لثقب صناديق الرمل حيث تكون هناك حاجة فقط إلى ألوان Vertex لتثليثات صغيرة دون منظور ، بحيث يمكن حساب الألوان من خلال زيادة قيم الألوان بدلاً من interpolating من تنسيق APPTH.
لماذا تستخدم عارض برامج مفتوح المصدر عندما تكون وحدات معالجة الرسومات سريعة جدًا؟
- من المحتمل ألا يفسد المتانة باستخدام عارض البرامج نظامك عند ارتكاب خطأ ، على عكس واجهات برمجة تطبيقات الرسومات ل GPU المعرضة للشروط الزرقاء.
- الحتمية إذا نجحت على جهاز كمبيوتر واحد ، فمن المحتمل أن تعمل على حدة على جهاز كمبيوتر آخر مع اختلافات بسيطة بين أنظمة التشغيل. OpenGL ومع ذلك ، يحتوي على صفات صفرية متبقية إذا قمت بإزالة كل ما يحتوي على خطأ في أي تطبيق للسائق.
- منخفضة الحمل عندما تريد دقة منخفضة للنمط المرئي أو الرؤية الآلية ، قد تبقيه أيضًا على حد سواء مع عارض البرامج المرتبط بشكل ثابت عندما تكون وحدة معالجة الرسومات أبطأ.
- من السهل تصحيح الأخطاء عندما تتم معالجة جميع البيانات في عارض البرامج ، من الأسهل بكثير معرفة الخطأ الذي حدث أثناء تصحيح الأخطاء.
- من السهل تعديل عدم وجود حدود للأجهزة بخلاف دورات وحدة المعالجة المركزية والذاكرة ، بحيث يمكنك تعديل خط أنابيب العرض بالكامل عن طريق نسخ رمز اللصق.
- Pixel دقيق 2D بدلاً من صنع حلول غريبة على المضلعات ، يتيح لك عارض البرامج العمل مع وحدات بكسل كاملة للبدء.
لماذا تستخدم هذا العارض البرمجيات؟
- الحد الأدنى من تبعيات النظام يتم وضع كل ما يتعلق بأجهزة واجهة برمجة تطبيقات نظام معين في وحدة غلاف منفصلة تدمج الحد الأدنى من الميزات الأساسية التي يجب أن يكون سهلاً للدمج في أنظمة التشغيل المستقبلية. على عكس عارضات البرامج الآخرين ، لا يتطلب هذا البرنامج أي برامج تشغيل رسومات ، لأنه يمكنك الحصول على نفس الأداء باستخدام Multi-Thorreading عن طريق تحميل القماش على سلسلة خلفية عندما تكون معظم النوى خامدة على أي حال.
- لا توجد ثنائيات يتم تجميع المكتبة بأكملها تلقائيًا من رمز المصدر. حتى نظام البناء يجمع نفسه قبل بناء مشروعك. هذا يتأكد من أن لا أحد في المستقبل يجب أن يعكس الثنائيات القديمة للقرن من القرن عند محاولة إنشاء برنامجك ، كما أنه يجعله أكثر أمانًا ضد البرامج الضارة عندما يمكن فحص كل شيء في رمز قابل للقراءة.
- يرتبط ربط المكتبة بأكملها بشكل ثابت ببرنامجك ، تمامًا كما لو كنت قد كتبت الرمز بنفسك. تعتمد واجهات برمجة تطبيقات النظام الأساسية التي نجت على مدار عقود على أنها تبعيات ، ولا توجد برامج تشغيل GPU ، ولا توجد طبقات وسائط خارجية. كل شيء من كيفية تشفير أحرف Unicode وتقديم الخطوط إلى كيفية وجود مضلع نقطية مقابل المخزن المؤقت للعمق سيكون موجودًا ضمن برنامج C ++ المترجم لتحقيق أقصى موثوقية وحتمية. يسمح نظام الإنشاء بربط المكتبات القياسية C ++ بشكل ثابت عند الإمكان.
- قم بإنشاء إرثك ، قم بإنشاء برامج قد تكون الأجيال القادمة قادرة على نقل وتجميع وتشغيلها أصليًا دون الحاجة إلى المحاكسين أو الهندسة العكسية لسائقي الرسومات الملكية.
ميزات في هذه المكتبة
- نظام إنشاء C ++ التلقائي بالكامل لا توجد قوائم طويلة من الملفات المصدر في مشروعك. سيجد نظام الإنشاء المضمّن رؤوسًا متضمنة وملفات المصدر المقابلة بالاسم تلقائيًا. فقط أخبرها بالزحف من Main واتركها تكتشف الباقي تلقائيًا. تتم معالجة الخلفية المختلفة للمكتبات من خلال تضمين رأس مشروع المكتبة ، ويخبرنا الواجهة الخلفية التي يجب استخدامها لكل منصة. تُستخدم عمليات الفحص لإنشاء ما تغير فقط ، لذلك ليست هناك حاجة لإنشاء مكتبة ثابتة لأجزاء من الكود الخاص بك.
- 2D رسم بكسل الدقيق الدقيق لمكالمات السحب للخطوط ، المستطيلات ، نسخة صورة صلبة ، رسم صورة ألفا المصفاة ، الرسم المخزّن العمق ، ورسم الاستنسل.
- التقديم ثلاثي الأبعاد يعادل تقريبًا Direct3D 7 مع أخذ عينات من الملمس ثنائي الخطية ، MIPMapping ، Lightmaps وتصفية ألفا عند استخدامه خارج الصندوق ، ولكن يمكن تعديله ليكون أشبه بمسافة 3D Direct Direct Ir Direct Tarming على القوام (يمكنك استخدام SIMD مع Tranting Multi-Trathens وتم تحديده على أساس مسافة المشاهدة).
- نظام الإسقاط : يحتوي مجموعة مهام التقديم على شبكة انسداد حيث يمكن رسم أشكال انسداد لتخطي الرسم للمثلثات أو الكائنات أو المجموعات الكاملة إذا كان محركك ينفذ مرحلة عريضة لإعداد الاختبارات والانسداد. يمكن بعد ذلك دمج هذا الانسداد الديناميكي بالكامل مع تحسينات ثابتة لألعاب معينة باستخدام معلومات حول المناطق التي يمكن رؤيتها من كل موقع كاميرا.
- الاختياري ، لا تستخدم واجهة برمجة تطبيقات الرسومات هذه فقط مخازن تعميق النقطة العائمة للمنظور ، ليست هناك حاجة لتطبيع قيم العمق لأي تمثيل قائم على عدد صحيح. يتيح ذلك اختيار مسافة مقطع بعيدة غير محدودة عند إنشاء الكاميرا ، إذا كنت تستطيع تقديم المشهد بأكمله مرة واحدة.
- طبقة وسائط الوسائط ذات الطبقة الوسائط المصممة للمتانة. الخلفية الصوتية ALSA و WINMM للتحكم الكامل في خلط الصوت ، دون الحاجة إلى استدعاء أي نظام محدد بنفسك. تستخدم Window Management Multi-Thorreading لتحميل القماش ، بحيث لا تحتاج إلى برامج تشغيل رسومات GPU وتبعيات ثقيلة فقط لتحميل النتيجة. يستخدم نافذة بلا حدود لشاشة كاملة ، بحيث يمكنك بسهولة الوصول إلى برامج أخرى إذا حصلت على رسالة بريد إلكتروني مهمة أو رسالة فورية في الخلفية. يتم الانتعاش على وحدة المعالجة المركزية للعمل مع أي دقة شاشة دون الاعتماد على برامج تشغيل الرسومات التي قد تعطي البكسل الاستيفاء الخاطئ أو حتى لا وجود لها. قد تتسبب طبقات الوسائط القديمة المصممة لشاشات النقر النيتروجيني في تكرار أخطاء النطاق عند عدم تثبيت برامج تشغيل رسومات ولا تقبل الشاشة الاختيار التعسفي للدقة. يستخدم أيقونة المؤشر غير المرئية لإخفاء الماوس ، بحيث لن يسلب برنامج التحطم المؤشر عند محاولة قتل العملية.
- إطار واجهة المستخدم الرسومية ، قم بتحميل واجهة مرئية إلى نافذتك باستخدام سطر واحد من التعليمات البرمجية يقرأ ملف تخطيط أو سلسلة. احصل على مقابض عامة للمكونات باستخدام أسماء أو مجموعة من الاسم والفهرس. أضف الأحداث عن طريق إرفاق وظائف Lambda إلى مكونات المكونات والنافذة.
- تحصل أجهزة ضبط الوقت على الثواني الدقيقة المزدوجة منذ أول مكالمة إلى الموقت ، حتى لا تضطر للقلق بشأن أخطاء منتصف الليل عند إعادة ضبط الوقت من اليوم.
- طبقة تجريد SIMD استخدم SIMD.H لإنشاء جوادات SSE و AVX و AVX ونيون تلقائيًا من بناء جملة الرياضيات القابلة للقراءة بالكامل. سيبدو الكود المتجه الخاص بك كأنه تنفيذ مرجعي وتجميع بنية مستهدفة غير معروفة ، سيولد عمليات قياسية لا يزال بإمكانها إعطاء دفعة أداء من خلال كتابة الخوارزمية الخاصة بك مع العمليات الأساسية التي يتم دعمها في أغلب الأحيان مباشرة في أجهزة وحدة المعالجة المركزية ، والوصول إلى الذاكرة المتمثل في التزامات المفروضة مع المفروضة المتبادلة إذا كان هناك شيء متشابه مع أي شيء متشابه.
- تستخدم المؤشرات الآمنة safepointer.h لالتقاط المزيد من الأخطاء من خلال إخبار مؤشرك أي جزء من التخصيص الذي قد يعمل عليه. لا يترك أي عام في إصدار الإصدار ، بحيث يمكنك دائمًا استبدال مؤشر RAW الخاص بك بـ SafePointer ومعرفة أنك ستحصل على رسالة خطأ مفيدة باسم المؤشر ومعلومات مفصلة عندما يحدث شيء سيء.
- تستخدم الأوتار UTF-32 لتخزين الأحرف في الذاكرة للتأكد من أن جميع الخوارزميات تعمل مع أحرف غير لاتينية (متوافقة مع "حرفية"). الحفاظ على الملفات الافتراضية إلى UTF-8 (التخزين المدمج) مع BOM (القول صراحة ما هو التنسيق المستخدم) ونهايات خط LF CR (بحيث يمكن قراءة الملفات النصية المشفرة في أي مكان في كل مكان). يستخدم المخازن المؤقتة للذاكرة المشتركة تلقائيًا للسماح بالتقسيم إلى قائمة من الأوتار دون إغراق الكومة بمخصصات صغيرة.
- المخازن المؤقتة يتم حفظ جميع الملفات وتحميلها من خلال الكائنات العازلة. هذا يتأكد من أن جميع تنسيقات الملفات التي تصممها فقط يجب أن تقلق بشأن كيفية تشفير البايتات ، وسوف تكون اختبارات الانحدار سهلة من خلال عدم إشراك الآثار الجانبية الخارجية من نظام الملفات ، ويمكن تجميع أي ملف فيك باستخدام ما يعادل المخزن المؤقت لوظيفة حفظ.
- تعادل إدارة الملفات تقريبًا لـ STD :: نظام الملفات من C ++ 17 ، ولكنها تعمل مع C ++ 14 ، تستخدم نفس الأنواع والأنواع القاضية على جميع الأنظمة الأساسية ، ويمكنها تلقائيًا تصحيح فواصل المجلدات بين / (POSIX) و (MS-Windows).
- يمكن أن تبدأ إدارة العمليات تطبيقات أخرى وتتبع حالتها ، بحيث يمكنك استدعاء تطبيق مثل وظيفة كتابة النتيجة إلى الملفات.
ملخص التراخيص
تستخدم هذه المكتبة بشكل أساسي ترخيص ZLIB مفتوح المصدر ، ولكنها تتضمن أيضًا مكتبة صور STB لحفظ الصور وتحميلها ، والتي لديها ترخيص مزدوج متساهلة (MIT / UNCENSE). نظرًا لأنه يمكن استخدام مكتبة صور STB كمجال عام ، فليس لها أي تأثير قانوني على استخدام المكتبة ككل تحت ترخيص ZLIB مفتوح المصدر. جميع رمز المصدر المضمّن مع جميع تراخيصهم يسمحون بكل من الاستخدام التجاري وغير التجاري ، بما في ذلك التعديل غير المعلوم للرمز المصدري. إذا لم تقم بإعادة توزيع رمز المصدر ، فلا يتعين عليك إخبار أي شخص بأنك تستخدم هذه المكتبة ، لأن التأييد غير مخلص ليس له قيمة.
لا تزال نسخة تجريبية عامة
لا تزال APIs و GUI و Font و Sound APIs قيد التطوير النشط وقد يكون لها تغييرات كبيرة قبل أن يكون الإصدار 1.0 مستقر جاهزًا ، لأن بعض التعليمات البرمجية مجرد صاحب نائب بدائي حتى يتمكن التنفيذ المتقدم من استبداله ، ويجب على المرء أن يحاول استخدام المكتبة بالفعل قبل أن تصبح مشاكل قابلية الاستخدام واضحة. المخزن المؤقت والملف والصورة والرسم والفلتر والسلسلة والوقت واجهات برمجة التطبيقات هي بالفعل بالفعل نسخة مستقرة تماما. يمكنك اختيار الالتزام بإصدار محدد لكل مشروع جديد ، أو الاحتفاظ بتحديثه بأحدث التغييرات ، أو انتظار الإصدار 1.0 المستقر.
كيف يمكنك المساعدة
- منفذ إلى Macintosh أو Wayland باستخدام نفس مبادئ الحد الأدنى من التبعية.
- اختبر إصدار بيتا هذا وقدم تعليقات على التصميم قبل إصدار الإصدار 1.0.
- قم بإنشاء أنواع مختلفة من محركات الألعاب باستخدام أدوات مفتوحة المصدر.
أجهزة وحدة المعالجة المركزية المدعومة:
- Intel/AMD باستخدام الجوهرية SSE2 والملحقات الاختيارية.
- ARM باستخدام الجوهبات النيون .
- بنيات وحدة المعالجة المركزية غير معروفة ، دون عودة SIMD كحل احتياطي.
المنصات:
- Linux ، تم اختباره على Mint ، Mate ، Manjaro ، Ubuntu ، Raspberrypi OS ، Raspbian (Buster أو لاحقًا). يحتاج Linux Mint إلى برنامج التحويل البرمجي ورؤوس X11 ، لذا قم بتشغيل "Sudo APT تثبيت G ++" و "Sudo APT تثبيت libx11-dev" قبل التجميع. يدعم حاليًا X11 و Wayland للإصدارات المستقبلية.
- Microsoft Windows ، ولكن أبطأ من Linux لأن Windows لديها الكثير من عمليات الخلفية وإدارة الخيوط الأبطأ وإدارة الذاكرة.
قد تعمل أيضًا على:
- لدى BSD و Solaris رمز يستهدف المنصات في fileapi.cpp للحصول على مجلد التطبيق ، ولكن من المحتمل أن يكون هناك بعض التطبيقات المفقودة لتشغيل البرنامج النصي للبناء. يجب أن تحتوي الأنظمة المتوافقة مع POSIX في المستقبل على عدد قليل من المراوغات لفرز ما إذا كان يحتوي على خادم X11.
- يتم دعم Big-Endian من الناحية النظرية إذا تمكين MCRO DSR_BIG_ENDIAN على مستوى العالم ، ولكن هذا لم يتم اختباره فعليًا بسبب الصعوبات في استهداف هذا النظام القديم مع المترجمين الحديثين.
لم يتم نقلها بعد إلى:
- لم يعد Macintosh يستخدم X11 ، لذلك سيتطلب بعض الجهود في النقل. ليس لدى Macintosh رابط رمزي إلى ثنائي عملية التشغيل ، لذلك سيعود إلى الدليل الحالي عند طلب مجلد التطبيق.
لن يستهدف:
- الهواتف المحمولة. لأن التغييرات المستمرة كسر التوافق الخلفي على منصات المحمول من شأنها أن تهزم الغرض من استخدام إطار عمل طويل. تتطلب المنصات المحمولة مجمعين C ++ مخصص ، والوصول إلى معالجات الإشارات ، ودوران الشاشة ، وحفظ البطارية ، ومعرفة متى يتم عرض لوحة المفاتيح الافتراضية ، وأذونات الأمان ، والشروط الكاملة القسرية ... في محاولة للقيام كلاهما في الوقت نفسه ، سيكون من الأفضل أن تتخذ فقط قطعًا في التصميم في كلا الطرفين من التصميمات الجديدة التي يتم تصميمها على شاشة Ubuntu.
- واجهة الويب. لن يتمكن هذا الغلاف فوق هذه المكتبة من الحصول على قوة الجوهارات الخاصة بـ SIMD لتحديد مرشحات الصور الخاصة بك ، لذلك سيكون من الأفضل لك استهداف لغة تظليل GPU من المتصفح الأكثر ملاءمة للبرمجة البرمجية الديناميكية.