السلام عليكم
اذا في احد عنده اي خلفية عن استخدام SwapBuffers
في الانيميشن بال MFC
(البرنامج يعمل فلم فيديو لكن بدون الSwap
مع الtimer تختفي الصورة وترجع )
وشكرا على المساعدة
(ياريت الرد يكون سريع....)
LoLiTa
السلام عليكم
اذا في احد عنده اي خلفية عن استخدام SwapBuffers
في الانيميشن بال MFC
(البرنامج يعمل فلم فيديو لكن بدون الSwap
مع الtimer تختفي الصورة وترجع )
وشكرا على المساعدة
(ياريت الرد يكون سريع....)
LoLiTa
السلام عليكم ,,
الأخ / الأخت : LoLiTa ,,
لم أتعامل مع ال SwapBuffer في الانميشن مطلقا ,, لكن تقنية الانميشن هي نفس تقنية عمل render للشاشة في الألعاب تماما ,,
لو لاحظت ل DirectX ورأيت DirectShow فهو قوي جدا في التعامل مع صيغ الملفات وتحديث الشاشة للعرض مع تحديد عدد ال framess في الثانية ,,
تقنية ال SwabBuffers في Direct3D مثلا تعمل كالتالي : "وهي ثابتة بالنسبة لك أنواع العرض السريع التي تتطلب تحديث كامل الشاشة كما في ال Movies أيضا ",,
يوجد مايسمى بالاسطح الثنائية والاسطح الثلاثية ,,
الفرق بينهما أن الاسطح الثنائية يتم فيها عمل ال SwabBuffer بين Tow Buffers فقط هم السطح الرئيسي والسطح الثانوي ,,
السطح الرئيسي يشير الى شاشة العرض التي نراها في ذاكرة الفيديو " كرت الشاشة " يعني كلما تم تحديث بيانات عرض الفيديو "FRAME" لكرت الشاشة يتم عرضها فورا للمستخدم ,, لذا ليس من الحكمة تحديثها مباشرة ,,
لأننا اذا قمنا بتحديث السطح الرئيسي بشكل مباشر ,, فستظهر الصورة مشوشة بشكل بشع للناظر ,, لأن الصورة الجديدة يتم البدأ بتحديثها من مرحلة الاخلاء العامودي للشاشة وتبدأ من الطرف الايسر الأعلى للشاشة وتتجه الشاشة في عملية رسم البكسلات الى اليمين حتى نهاية السطر ثم السطر الذي يليه وهكذا ,,
اذا حدثنا الذاكرة في جزء معين ,, وبدأنا مرحلة الاخلاء العامودي للبدأ بجلسة رسم جديدة فسيتم بعدها رسم المعلومات من ال Buffer الرئيسي وال Buffer وقت التحديث ,, " مع أن سرعة تحديث بيانات ال Buffer واقعيا أسرع من عملية رسم الشاشة كاملة بقذف الالكترونات من مدفع الالكترونات من الشاشة والبدأ مرة أخرى بمرحلة الاخلاء العامودي "
حيث أنه يفترض لأن تتم تحديث بيانات الشاشة فقط في مرحلة الاخلاء العامودي ,, لكن كيف يتم تحديث كامل محتويات الBuffer في هذا الوقت الوجيز جدا جدا ,, الذي لايزيد كما أعتقد ببعض الحسابات الطفيفة عن 1 ميلي ثانية ,, " يعني لحظة " ,, لأنه وبكل بساطة اذا وجدنا شاشة تعمل بتردد 85 هيرتز هذا يعني أن الشاشة يتم تحديثها بقذف الكترونات 85 مرة في الثانية الواحدة ,,
منها يمكن أن نفترض وقت تهيئة مدفع الاكترونات لكي لايزيد ربما عن 15/85 من اللحظة !!
المهم لانتعامل في Animations مع نسخ كتل البيانات عند قلب الاسطح ,, لكن نتعامل فقط بعمل Swab بين عنواني السطحين الامامي والخلفي ,,
كل اللعب يتم في المكدس الخلفي ,, Back Buffer ,, وهو الذي نحدث فيه بياناتنا حتى ننتهي منها كلها ثم نقوم بعمل Swab مع السطح الرئيسي ليأخذ عنوان الخلفي ويتم عرض محتوياته ويصبح الامامي هو الخلفي لنضع فيه قيم البيانات الجديدة ,,
وهو الأمر كذلك بالنسبة للاسطح الثلاثية ,, حيث يمكن أن تزيد من الاداء بعمل تكديس مضاعق لل Frame التالي والذي يليه ,, تحسبا لأسوء الاحتمالات,,
أرجو أن يكون كل هذا الكلام قد أفادك ,,
لذا في ال MFC يمكنك أن تقوم بنفس الفكرة بمفردك,, لكن لو استخدمت DirectDraw أو Direct3D حاليا سترتاح نسبيا مع أن تعلمهما موضوع لطوله ,,
لكن لو تعلمت DirectShow فتكون سعيدا جدا ,, ولو نزلت ال SDK الخاص ب DirectX9 ستجد الكثير من الأمثلة الجاهزة لعرض الفيديو وتطبيق الكثير جدا من التأثيرات على الفيديو وكما تشاء ,,
شكرا على الرد
LoLiTa
هذا الموضوع مغلق.