۱۱-تير-۱۳۸۷, ۱۵:۲۲:۳۶
۱۱-تير-۱۳۸۷, ۱۹:۳۸:۱۱
برای نمایش سریع و بدون پلک زدن باید از تکنیک Double Buffering استفاده کرد یعنی ابتدا پیکسل رو توی حافظه RAM و توی یک dc ذخیره کنی و بعد به سرعت اونو توی حافظه کارت گرافیکی bitblt کنی !
مثال ساده ای هست که اینکار رو نشون میده : http://www.codeproject.com/KB/GDI/flickerfree.aspx
مثال ساده ای هست که اینکار رو نشون میده : http://www.codeproject.com/KB/GDI/flickerfree.aspx
۱۲-تير-۱۳۸۷, ۱۷:۱۶:۰۳
بله درست مي فرماييد ,doublebuffering رو مي دونستم اما من مي خوام اون مدلي كه توي اسمبلي به حافطه نمايش دسترسي داريم به مونيتور دسترسي داشته باشم يعني مثلا يه افستي باشه كه بشه ديتا ازش خوند يا توش نوشت و مستقيما روي مونيتور مشاهده كرد.
۱۲-تير-۱۳۸۷, ۱۷:۲۸:۰۱
مدل اسمبلی رو خدابیامرزه ..... GDI این امکان رو به شما نمیده . کلا دسترسی مستقیم به آدرس های سخت افزار ها در ویندوز های جدید امکان پذیر نیست !!
برای دسترسی مستقیم به پیکسل های حافظه گرافیکی و کار مستقیم با GPU باید از کتابخونه های دیگه ای مثل OpenGL یا Direct 3D استفاده کنی و اونم به کمک pixel shader ها .
برای دسترسی مستقیم به پیکسل های حافظه گرافیکی و کار مستقیم با GPU باید از کتابخونه های دیگه ای مثل OpenGL یا Direct 3D استفاده کنی و اونم به کمک pixel shader ها .
۱۲-تير-۱۳۸۷, ۲۱:۲۵:۲۷
پس خود اين opengl و directx چجوري بهش دسترسي دارن؟
۱۳-تير-۱۳۸۷, ۰۰:۳۹:۴۶
از طریق درایور کارت گرافیک دقیقا مثل GDI . منظور من این نبود که این کتابخونه ها مستقیما با آدرس حافظه کارت گرافیکی کار میکنند و GDI مستقیم کار نمیکنه بلکه منظورم این بود که مثلا Direct 3d سرعت render بالاتری داره .
توابعی مثل setpixel کند هستن چون اطلاعات پیکسل همزمان از حافظه میره توی حافظه گرافیکی و نمایش داده میشه . این مقداری تاخیر ایجاد میکنه و باعث کندی کار میشه . برای کارهای گرافیکی معمولی همون double buffering باید کارت رو راه بندازه !
توابعی مثل setpixel کند هستن چون اطلاعات پیکسل همزمان از حافظه میره توی حافظه گرافیکی و نمایش داده میشه . این مقداری تاخیر ایجاد میکنه و باعث کندی کار میشه . برای کارهای گرافیکی معمولی همون double buffering باید کارت رو راه بندازه !
۱۳-تير-۱۳۸۷, ۱۲:۴۶:۵۳
يعني اگر بتونم از درايور كارت گرافيك استفاده كنم مي تونم مستقيم به ديتايي كه باعث ميشه ما الان اين صفحه ي مونيتور رو داشته باشيم دسترسي داشته باشم و بتونم اونو بخونم يا عوض كنم؟
۱۳-تير-۱۳۸۷, ۱۹:۵۳:۴۹
در گذشته حافظه گرافیکی جزیی از حافظه اصلی بود ولی امروز رفته روی کارت گرافیکی و پورت و آدرس خودش رو داره . دسترسی به حافظه گرافیکی که حالا جزیی از یک سخت افزار دیگه هست و اونم بشکل مستقیم ، فقط از طریق درایور امکان پذیره . شرط کار کردن با درایور ها هم اینه که مکانیسم داخلی اونها رو بدونی ( درایور کارت گرافیکی شما با ماله من فرق میکنه !!) این کار بسیار بسیار پیچیده هست و برای هر کارت گرافیکی فرق میکنه .