আমার একটি সহজ অ্যাপ্লিকেশন রয়েছে। এর দুটি থ্রেড রয়েছে যার প্রত্যেকটির নিজস্ব রেন্ডারিং প্রসঙ্গে রয়েছে তবে তারা একটি ভিবিও ভাগ করে নেয় (এটি কাজ করছে, আমি এটি পরীক্ষা করেছি)।
এখন আমি যা চাই: একটি থ্রেড ভিবিওর প্রথমার্ধ থেকে কিছু তথ্য উপস্থাপন করছে এবং দ্বিতীয় থ্রেড ভিবিওর দ্বিতীয় অংশটি আপডেট করছে।
আমি যখন ভিবিও আপডেট করি না, এটি ঠিকঠাক কাজ করছে।
আপডেট করার সময় আমার কিছু অদ্ভুত সমস্যা রয়েছে। আমি যখন glMapBuffer
প্রথম থ্রেডে, বেশিরভাগ সময়, প্রথম থ্রেডে ভিবিও আপডেট করতে (দ্বিতীয় থ্রেডে) ব্যবহার করি তখন তা কিছুই রেন্ডার করে না — পুরো স্ক্রিনটি পরিষ্কার (একটি glClear
কল করার পরে )। দেখে মনে হচ্ছে এটি ভিবিওর ডেটা স্পর্শ করতে পারে না (এটি বোধগম্য, কারণ পুরো বাফারটি ম্যাপ করা হয়েছে এবং তাই এটি কোনওভাবে লক করা যেতে পারে)।
আমি ব্যবহার করার চেষ্টা করেছি glMapBufferRange
, যা ব্যবহার করে GL_MAP_UNSYNCHRONIZED_BIT
। এর অর্থ হওয়া উচিত, "অপেক্ষা করুন এবং আপনি যেমন চান VBO ব্যবহার করবেন না, আমি (প্রোগ্রাম) এটি নিজেই সিঙ্ক্রোনাইজ করব"। এছাড়াও, আমি যখন অনেকগুলি ভিবিওর মানচিত্র তৈরি করি এবং অন্য অংশ থেকে ডেটা উপস্থাপন করি তখন এটি অপেক্ষা করা উচিত নয়, তবে আমি যেমন একই সমস্যাটি করছি তেমনি অভিজ্ঞতা করছি glMapBuffer
।
কেউ আমাকে এটি ঠিক করতে বা কেন এটি ঘটে তা ব্যাখ্যা করতে সহায়তা করতে পারে?