مشکل عدم نمایش اشیاء در opengl به هنگام مینیمایز کردن برنامه
با سلام . من در دلفی XE2 در یک panel دارم با opengl یه سری اشیاء سه بعدی ترسیم میکنم و رندر کردن رو هم با تابعی بنام gldraw انجام میدم . همه چی بدون مشکل انجام میشه تا زمانی که من برنامه رو مینیمایز میکنم و دوباره ماکزیمایز میکنم کلا panel خالی میشه تا اینکه با ماوس کلیک میکنم روی صفحه یا می خوام صحنه رو مثلا بچرخونم دوباره نمایش داده میشه . حتی اومدم در رویدادهای مختلف panel هم مجدد gldraw رو صدا زدم ولی نمیشه که نمیشه . لطفا راهنمایی بفرمایید.
نقل قول: مشکل عدم نمایش اشیاء در opengl به هنگام مینیمایز کردن برنامه
سلام
رندر کردن در opengl مستقل از vcl و نرم افزار شماست. انتظار نداشته باشید با نمایش فرم، dll های opengl عملیات رندر رو اتوماتیک انجام بدن. بنابر این باید موقع restore شدن فرم مجدد دستور رندر رو از طرف opengl اجرا کنید.
برای این کار یک کامپوننت ApplicationEvents روی فرم بزارید و دستور رندر رو در متد OnRestore بنویسید
نقل قول: مشکل عدم نمایش اشیاء در opengl به هنگام مینیمایز کردن برنامه
ممنون از پاسخ شما دوست عزیز. کامپوننت ApplicationEvents جزء کامپوننتهای پیشفرض دلفی هست ؟ میشه بفرمایید دقیقا با این کامپوننت باید چیکار کنم ؟ منظورم نمونه کد هست . ممنون.
نقل قول: مشکل عدم نمایش اشیاء در opengl به هنگام مینیمایز کردن برنامه
سلام
کامپوننت ApplicationEvents جزء کامپوننتهای اصلی دلفی هست .
وقتی کامپوننت رو روی فرم گذاشتین توی برگه رویدادهاش چند تا رویداد داره که دستور رندر رو توی رویداد OnRestore بنویسید .
این کامپوننت رویدادهای فرمتون رو رصد میکنه و اگر فرم از حالت minimize خارج و restore بشه اون دستوری که نوشتین ( دستور رندر ) رو اجرا میکنه براتون
نقل قول: مشکل عدم نمایش اشیاء در opengl به هنگام مینیمایز کردن برنامه
نقل قول: مشکل عدم نمایش اشیاء در opengl به هنگام مینیمایز کردن برنامه
دوست عزیز کاری که گفتید رو انجام دادم ولی باز هم همون مشکل هست. جالبه وقتی یک showmessage قبل از دستور رندر در همون رویداد onrestore میذارم پیام که نشون داده میشه و ok رو میزنم رندر هم انجام میشه و نمایش داده میشه ولی وقتی showmessage رو برمیدارم رندر انجام میشه ولی نمایش داده نمیشه
نقل قول: مشکل عدم نمایش اشیاء در opengl به هنگام مینیمایز کردن برنامه
احتمالاً عمل رندر زمانی اتفاق میافته که خود فرمتون هنوز از تسکبار به صورت کامل Restore نشده ، شما یکبار به جای OnRestore ، عملیات رندر رو توی OnActive کامپوننتتون انجام بدید .
اگر باز هم جواب نگرفتین ، یه راه سادش اینه که یه وقفه برای رندر کردن بذارید
procedure TForm1.ApplicationEvents1Restore(Sender: TObject);
begin
Sleep(1000); توقف یک ثانیه ای بعد از restore
عملیات رندر
end;