قائمة العرض

قائمة العرض ، وتُسمى أيضًا قائمة الأوامر في Direct3D 12 ومخزن الأوامر في Vulkan ، هي سلسلة من أوامر أو تعليمات الرسومات التي تُنفذ عند تنفيذ القائمة. [ 1 ] تُسمى الأنظمة التي تستخدم وظيفة قائمة العرض أنظمة الوضع المُحتفظ به ، بينما تُسمى الأنظمة التي لا تستخدمها أنظمة الوضع الفوري . في OpenGL ، تُعد قوائم العرض مفيدة لإعادة رسم نفس الشكل الهندسي أو تطبيق مجموعة من تغييرات الحالة عدة مرات. [ 2 ] [ 3 ] تُستخدم هذه الميزة أيضًا مع قوائم أوامر الحزمة في Direct3D 12. في Direct3D 12 وVulkan، تُستخدم قوائم العرض بانتظام لتسجيل وتنفيذ كل إطار على حدة.

أصول في عروض المتجهات

استخدمت شاشات العرض المتجهة أو شاشات العرض الخطية في ستينيات وسبعينيات القرن العشرين انحراف حزمة الإلكترونات لرسم الخطوط والنقاط، وأحيانًا المنحنيات، مباشرةً على شاشة أنبوب أشعة الكاثود . ولأن الصورة كانت تتلاشى فورًا، كان لا بد من إعادة رسمها عدة مرات في الثانية ( احتفظت أنابيب أشعة الكاثود ذات أنابيب التخزين بالصورة حتى تُصبح فارغة، لكنها لم تكن مناسبة للرسومات التفاعلية). ولتحديث الشاشة، استُخدمت وحدة معالجة مركزية مخصصة تُسمى معالج العرض أو وحدة معالجة العرض (DPU)، والتي كانت تحتوي على مخزن مؤقت للذاكرة لـ "قائمة العرض" أو "ملف العرض" أو "برنامج العرض" الذي يحتوي على إحداثيات الخطوط ومعلومات أخرى. كما دعمت معالجات العرض المتقدمة تعليمات تدفق التحكم ، والتي كانت مفيدة لرسم الرسومات المتكررة مثل النصوص، وكان بعضها قادرًا على إجراء تحويلات إحداثيات مثل الإسقاط ثلاثي الأبعاد . [ 4 ] [ 5 ]

وظيفة عرض قائمة الكمبيوتر المنزلي

كانت حواسيب أتاري ذات 8 بت من أوائل الأنظمة التي احتوت على قائمة عرض حقيقية . قائمة العرض (كما يُطلق عليها في مصطلحات أتاري) عبارة عن سلسلة من التعليمات لبرنامج ANTIC ، وهو المعالج المساعد للفيديو المستخدم في هذه الأجهزة. هذا البرنامج، المخزن في ذاكرة الحاسوب والذي يُنفذه ANTIC في الوقت الفعلي، يُمكنه تحديد الأسطر الفارغة، وأي من أوضاع النصوص الستة وأوضاع الرسومات الثمانية، وتحديد أقسام الشاشة التي يُمكن تمريرها بدقة أفقيًا أو رأسيًا، وتفعيل مقاطعات قائمة العرض (تُسمى مقاطعات المسح النقطي أو HBI في أنظمة أخرى). [ 6 ]

تحتوي عائلة Amstrad PCW على وظيفة قائمة عرض تُسمى "ذاكرة الوصول العشوائي الدوارة". وهي عبارة عن مساحة ذاكرة وصول عشوائي (RAM) بحجم 512 بايت، تتكون من 256 مؤشرًا من 16 بت، مؤشر واحد لكل سطر من شاشة العرض التي تبلغ 720 × 256 بكسل. يُحدد كل مؤشر موقع 90 بايت من البكسلات أحادية اللون التي تحتوي على حالات البكسلات الـ 720 للسطر. تتباعد حالات البكسلات الثمانية في الـ 90 بايت بفواصل 8 بايت، مما يعني وجود 7 بايتات غير مستخدمة بين كل بايت من بيانات البكسل. يتوافق هذا مع طريقة بناء ذاكرة الوصول العشوائي (RAM) النموذجية في جهاز PCW المُصمم للنصوص، حيث تُخزن صفوف الحرف الأول الثمانية في البايتات الثمانية الأولى، وصفوف الحرف الثاني في البايتات الثمانية التالية، وهكذا. تم استخدام ذاكرة Roller RAM لتسريع عملية تمرير الشاشة، حيث كان من غير المقبول أن يقوم معالج  Z80 بتردد 3.4 ميجاهرتز بتحريك مخزن العرض المؤقت (23 كيلوبايت) يدويًا (أي برمجيًا). يتم التحكم في مدخل بدء تشغيل Roller RAM، المستخدم في بداية تحديث الشاشة، بواسطة سجل إدخال/إخراج قابل للكتابة بواسطة معالج Z80. وبالتالي، يمكن تمرير الشاشة ببساطة عن طريق تغيير قيمة هذا السجل.

يُعدّ جهاز Amiga نظامًا آخر يستخدم ميزة مشابهة لقائمة العرض في مكوناته المادية ، وقد صُمّم، ليس من قبيل المصادفة، من قِبل بعض الأشخاص أنفسهم الذين طوّروا المكونات المادية المُخصصة لأجهزة كمبيوتر Atari ذات 8 بت. بمجرد توجيهه لإنتاج وضع عرض، كان يستمر في القيام بذلك تلقائيًا لكل سطر مسح لاحق. كما احتوى الكمبيوتر على معالج مساعد مُخصّص يُسمى " Copper "، والذي كان يُشغّل برنامجًا بسيطًا أو "قائمة Copper" مُصمّمًا لتعديل سجلات المكونات المادية بالتزامن مع العرض. يُمكن لتعليمات قائمة Copper توجيه المعالج Copper للانتظار حتى يصل العرض إلى موضع مُحدد على الشاشة، ثم تغيير محتويات سجلات المكونات المادية. في الواقع، كان معالجًا مُخصّصًا لخدمة مقاطعات المسح النقطي . استُخدم المعالج Copper بواسطة برنامج Workbench لدمج أوضاع عرض مُتعددة (دقة عرض ولوحات ألوان مُتعددة على الشاشة في الوقت نفسه)، وبواسطة العديد من البرامج لإنشاء تأثيرات قوس قزح وتدرج لوني على الشاشة. كان معالج Amiga Copper قادرًا أيضًا على إعادة تكوين مُحرك الرسوم المتحركة في منتصف الإطار، مع تأخير سطر مسح واحد فقط. سمح هذا لجهاز أميغا برسم أكثر من ثمانية رسومات متحركة (sprites) مدمجة فيه، شريطة ألا تتشارك الرسومات الإضافية خطوط المسح (أو الفجوة بين خطوط المسح) مع أكثر من سبع رسومات متحركة أخرى. أي، طالما انتهى رسم رسمة متحركة واحدة على الأقل، يمكن إضافة رسمة متحركة أخرى أسفلها على الشاشة. بالإضافة إلى ذلك، سمحت شريحة AGA اللاحقة ذات 32 بت برسم رسومات متحركة أكبر (عدد أكبر من البكسلات في الصف الواحد) مع الحفاظ على نفس تقنية تعدد الإرسال. كما احتوى جهاز أميغا على وحدة معالجة مخصصة لنقل الكتل (blitter)، والتي يمكنها رسم كائنات أكبر في مخزن الإطارات. غالبًا ما كان يُستخدم هذا بدلاً من الرسومات المتحركة (sprites) أو بالإضافة إليها.

In more primitive systems, the results of a display list can be simulated, though at the cost of CPU-intensive writes to certain display modes, color control, or other visual effect registers in the video device, rather than a series of rendering commands executed by the device. Thus, one must create the displayed image using some other rendering process, either before or while the CPU-driven display generation executes. In many cases, the image is also modified or re-rendered between frames. The image is then displayed in various ways, depending on the exact way in which the CPU-driven display code is implemented.

Examples of the results possible on these older machines requiring CPU-driven video include effects such as Commodore 64/128's FLI mode, or Rainbow Processing on the ZX Spectrum.

Usage in OpenGL

To delimit a display list, the glNewList and glEndList functions are used, and to execute the list, the glCallList function is used. Almost all rendering commands that occur between the function calls are stored in the display list. Commands that affect the client state are not stored in display lists.[7] Display lists are named with an integer value, and creating a display list with the same name as one already created overrides the first.[8]

The glNewList function expects two arguments: an integer representing the name of the list, and an enumeration for the compilation mode. The two modes include GL_COMPILE_AND_EXECUTE, which compiles and immediately executes, and GL_COMPILE, which only compiles the list.[9]

Display lists enable the use of the retained mode rendering pattern, which is a system in which graphics commands are recorded (retained) to execute in succession at a later time. This is contrary to immediate mode, where graphics commands are immediately executed on client calls.[10]

Usage in Direct3D 12

تُنشأ قوائم الأوامر باستخدام ID3D12Device::CreateCommandListالدالة. [ 11 ] يمكن إنشاء قوائم الأوامر بأنواع متعددة: مباشرة، ومجمعة، وحسابية، ونسخ، وفك تشفير الفيديو، ومعالجة الفيديو، وتشفير الفيديو. تُحدد قوائم الأوامر المباشرة أن وحدة معالجة الرسومات (GPU) قادرة على تنفيذ قائمة أوامر، ولا ترث أي حالة من حالات وحدة معالجة الرسومات. [ 12 ] تُستخدم القوائم المجمعة بشكل أفضل لتخزين وتنفيذ مجموعات صغيرة من الأوامر عددًا غير محدود من المرات. ويختلف استخدامها عن قوائم الأوامر العادية، حيث تُنفذ الأوامر المخزنة في قائمة الأوامر عادةً مرة واحدة فقط. [ 11 ] تُستخدم قوائم الأوامر الحسابية للحسابات العامة، ومن الاستخدامات الشائعة لها حساب خرائط MIP . [ 13 ] تُستخدم قائمة أوامر النسخ حصريًا للنسخ، بينما تُستخدم قوائم أوامر فك تشفير الفيديو ومعالجة الفيديو لفك تشفير الفيديو ومعالجته على التوالي. [ 12 ]

عند إنشاء قوائم الأوامر، تكون في حالة التسجيل. يمكن إعادة استخدام قوائم الأوامر باستدعاء الدالة ID3D12GraphicsCommandList::Reset. بعد تسجيل الأوامر، يجب إخراج قائمة الأوامر من حالة التسجيل باستدعاء الدالة ID3D12GraphicsCommandList::Close. ثم يتم تنفيذ قائمة الأوامر باستدعاء الدالة ID3D12CommandQueue::ExecuteCommandLists. [ 11 ]

انظر أيضاً

للمزيد من القراءة

  • وايت، ستيفن؛ دانييلسون، ديفيد؛ جينكس، ألما؛ ساتران، مايكل (2023-03-08). "فلسفة تصميم قوائم الأوامر وقوائم الأوامر - تطبيقات Win32". learn.microsoft.com . تاريخ الاسترجاع: 2024-01-26.

مراجع

  1. "الفصل 7 - دليل برمجة OpenGL" . www.glprogramming.com . أديسون-ويسلي . تم الاطلاع عليه بتاريخ 18 نوفمبر 2018 .
  2. دليل برمجة OpenGL: الدليل الرسمي لتعلم OpenGL، الإصدار 1.1 ( الطبعة الثانية). أديسون ويسلي. 1997. ISBN  978-0201461381.
  3. مارك سيغال، كورت أكلي، تصميم واجهة رسومات OpenGL. http://www.graphics.stanford.edu/courses/cs448a-01-fall/design_opengl.pdf
  4. ديرش، جوش (10 مايو 2013). "مقدمة عن جهاز Imlac PDS-1" . تم الاطلاع عليه في 1 سبتمبر 2024 .
  5. فولي، جيمس دفان دام، أندريز (1982). أساسيات رسومات الحاسوب التفاعلية . شركة أديسون-ويسلي للنشر، الصفحات 19، 93-94 ، 394، 400-404 . ISBN  0-201-14468-9.
  6. سمول، ديفيد؛ سمول، ساندي؛ بلانك، جورج (1983). أتاري الإبداعية . دار النشر للحوسبة الإبداعية. ISBN 978-0-916688-34-9.
  7. مارتز، بول (2006). OpenGL Distilled ( الطبعة الأولى). Addison-Wesley Professional PTG. ISBN  9780132701785تم الاطلاع عليه بتاريخ 28 ديسمبر 2023 .
  8. رايت، ريتشارد س.؛ هيميل، نيكولاس؛ سيلرز، غراهام؛ ليبتشاك، بنجامين (2010). OpenGL SuperBible: دليل شامل ومرجع (الطبعة الخامسة ). أديسون-ويسلي بروفيشنال. ISBN  978-0-321-71261-5.
  9. وايت، ستيف (9 مارس 2021). "دالة glNewList (Gl.h) - تطبيقات Win32" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 28 ديسمبر 2023 .
  10. كوين راديتش (30 مايو 2018). "الوضع المحفوظ مقابل الوضع الفوري" . تطبيقات Win32 . مايكروسوفت . تم الاطلاع عليه بتاريخ 21 ديسمبر 2019 .
  11. 1 2 3 وايت، ستيفن؛ جينكس، ألما؛ باداساهوغ؛ كولتر، ديفيد؛ كيلي، جون؛ كينروس، أوستن؛ وينزل، مايرا؛ جاكوبس، مايك؛ ساتران، مايكل (30 ديسمبر 2021). "إنشاء وتسجيل قوائم الأوامر والحزم - تطبيقات Win32" . learn.microsoft.com . تم الاسترجاع في 5 يناير 2024 .
  12. 1 2 وايت، ستيف (14 فبراير 2023). "D3D12_COMMAND_LIST_TYPE (d3d12.h) - تطبيقات Win32" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 6 يناير 2024 .
  13. لوجيني، ريكاردو (31 أكتوبر 2020). "مُظلِّلات الحوسبة في D3D12" . ريكاردو لوجيني . تم الاسترجاع في 6 يناير 2024 .