আমার সিতে একটি সহজ ওপেনএল পরীক্ষা অ্যাপ্লিকেশন রয়েছে যা কী ইনপুটটির প্রতিক্রিয়ায় বিভিন্ন জিনিস আঁকবে। (মেসা 8.0.4, এনভিআইডিএ জিটিএক্স 650 সহ একটি পিসিতে মেসা-ইজিএল এবং জিএলএফডাব্লু, উবুন্টু 12.04LTS দিয়ে চেষ্টা করেছেন)। আঁকাগুলি বেশ সহজ / দ্রুত (ধীরে ধীরে ত্রিভুজ ধরণের ধরণের জিনিস)। আমার পরীক্ষার কোডটি কোনওভাবেই ফ্রেমরেটকে ইচ্ছাকৃতভাবে সীমাবদ্ধ করে না, এটি কেবল এটির মতো দেখাচ্ছে:
while (true)
{
draw();
swap_buffers();
}
আমি এটি খুব সাবধানতার সাথে টাইম করেছি এবং আমি দেখতে পেয়েছি যে পরের দিকে eglSwapBuffers()
(বা glfwSwapBuffers
একই জিনিস) কল করার সময়টি 16.6 ডলার is মিলিসেকেন্ড। eglSwapBuffers()
পরবর্তী কল করার আগে কল করার পরে ঠিক সেই সময়ের চেয়ে সামান্য কিছুটা কম, যদিও আঁকানোটি খুব সহজ। অদলবদ বাফার কলটি যে সময় নেয় তা 1 মিমি অবধি কম।
যাইহোক, অ্যাপ্লিকেশন থেকে কী পর্দার প্রতিক্রিয়া হিসাবে এটি চিত্র অঙ্কন করছে তার পরিবর্তনের সময়টি আসলে পর্দায় প্রদর্শিত হচ্ছে> 150 মিমি (প্রায় 8-9 ফ্রেমের মূল্য)। এটি 60fps এ স্ক্রিন এবং কীবোর্ডের একটি ক্যামেরা রেকর্ডিং দিয়ে পরিমাপ করা হয়।
অতএব, প্রশ্নগুলি:
বাফারগুলিকে অদলবদল করার কলটির মধ্যে এবং কোথায় আসলে স্ক্রিনে প্রদর্শিত হচ্ছে তার মধ্যে কোথায় আঁকবে? দেরি কেন? এটি নিশ্চিতভাবে দেখে মনে হচ্ছে অ্যাপটি সর্বদা স্ক্রিনের সামনে অনেকগুলি ফ্রেম আঁকছে।
ওপেনজিএল অ্যাপ্লিকেশনটি স্ক্রিনে তাত্ক্ষণিক অঙ্কনের কারণ হতে পারে? (যেমন: কোনও বাফারিং নেই, ড্র শেষ হওয়া অবধি কেবল অবরুদ্ধ করুন; আমার উচ্চ থ্রুপুট লাগবে না, আমার কম বিলম্বের দরকার নেই)
উপরোক্ত তাত্ক্ষণিক অঙ্কনটি যত তাড়াতাড়ি সম্ভব ঘটানোর জন্য একটি অ্যাপ্লিকেশন কী করতে পারে?
কোনও অ্যাপ্লিকেশন কীভাবে জানতে পারে যে এখনই পর্দায় আসলে কী রয়েছে? (বা, বর্তমান বাফারিং বিলম্বটি কতক্ষণ / কত ফ্রেম?)