সারফেস অবজেক্ট অ্যাপগুলিকে স্ক্রিনে উপস্থাপনের জন্য ছবি রেন্ডার করতে সক্ষম করে। সারফেসহোল্ডার ইন্টারফেস অ্যাপগুলিকে সারফেস সম্পাদনা এবং নিয়ন্ত্রণ করতে সক্ষম করে।
পৃষ্ঠতল
একটি পৃষ্ঠ হল একটি উৎপাদকের জন্য একটি ইন্টারফেস যেখানে তারা ভোক্তার সাথে বাফার বিনিময় করে।
ডিসপ্লে সারফেসগুলি সাধারণত ট্রিপল-বাফারিংয়ের জন্য কনফিগার করা BufferQueues ব্যবহার করে। চাহিদা অনুযায়ী বাফার বরাদ্দ করা হয়, তাই যদি প্রযোজক যথেষ্ট ধীরে ধীরে বাফার তৈরি করে, যেমন 60 fps ডিসপ্লেতে 30 fps, তাহলে সারিতে কেবল দুটি বরাদ্দকৃত বাফার থাকতে পারে। চাহিদা অনুযায়ী বাফার বরাদ্দ করলে মেমোরি খরচ কমানো যায়। আপনি dumpsys SurfaceFlinger আউটপুটে প্রতিটি স্তরের সাথে সম্পর্কিত বাফারগুলির একটি সারাংশ দেখতে পারেন।
বেশিরভাগ ক্লায়েন্ট OpenGL ES অথবা Vulkan ব্যবহার করে পৃষ্ঠে রেন্ডার করে। তবে, কিছু ক্লায়েন্ট ক্যানভাস ব্যবহার করে পৃষ্ঠে রেন্ডার করে।
ক্যানভাস রেন্ডারিং
স্কিয়া গ্রাফিক্স লাইব্রেরি ক্যানভাস বাস্তবায়ন প্রদান করে। যদি আপনি একটি আয়তক্ষেত্র আঁকতে চান, তাহলে আপনাকে ক্যানভাস API কল করতে হবে, যা একটি বাফারে যথাযথভাবে বাইট সেট করে। একটি বাফার একসাথে দুটি ক্লায়েন্ট দ্বারা আপডেট না হয়, অথবা প্রদর্শিত হওয়ার সময় লেখা না হয় তা নিশ্চিত করতে, এটি অ্যাক্সেস করার জন্য বাফারটি লক করুন। ক্যানভাস লকগুলির সাথে কাজ করার জন্য নিম্নলিখিত কমান্ডগুলি ব্যবহার করুন:
-
lockCanvas()CPU-তে রেন্ডারিংয়ের জন্য বাফার লক করে এবং অঙ্কনের জন্য ব্যবহার করার জন্য একটি ক্যানভাস ফেরত দেয়। -
unlockCanvasAndPost()বাফারটি আনলক করে এবং কম্পোজিটরে পাঠায়। -
lockHardwareCanvas()GPU-তে রেন্ডারিংয়ের জন্য বাফার লক করে এবং অঙ্কনের জন্য ব্যবহার করার জন্য একটি ক্যানভাস প্রদান করে।
প্রথমবার যখন প্রযোজক একটি BufferQueue থেকে একটি বাফারের অনুরোধ করে, তখন বাফারটি বরাদ্দ করা হয় এবং শূন্যে ইনিশিয়ালাইজ করা হয়। প্রসেসগুলির মধ্যে অসাবধানতাবশত ডেটা ভাগাভাগি এড়াতে ইনিশিয়ালাইজেশন প্রয়োজন। তবে, যদি আপনি একটি বাফার পুনরায় ব্যবহার করেন, তবে পূর্ববর্তী বিষয়বস্তুগুলি এখনও উপস্থিত থাকে। যদি আপনি বারবার lockCanvas() এবং unlockCanvasAndPost() কল করেন তবে কোনও কিছু অঙ্কন না করে, প্রযোজক পূর্বে রেন্ডার করা ফ্রেমগুলির মধ্যে চক্রাকারে চলে যায়।
সারফেস লক/আনলক কোডটি পূর্বে রেন্ডার করা বাফারের একটি রেফারেন্স রাখে। সারফেস লক করার সময় যদি আপনি একটি নোংরা অঞ্চল নির্দিষ্ট করেন, তাহলে এটি পূর্ববর্তী বাফার থেকে নন-ডার্টি পিক্সেলগুলি কপি করে। সারফেসফ্লিংগার বা এইচডব্লিউসি সাধারণত বাফারটি পরিচালনা করে; কিন্তু যেহেতু আপনাকে কেবল বাফার থেকে পড়তে হবে, তাই এক্সক্লুসিভ অ্যাক্সেসের জন্য অপেক্ষা করার দরকার নেই।
সারফেসহোল্ডার
সারফেসহোল্ডার হল এমন একটি ইন্টারফেস যা সিস্টেমটি অ্যাপগুলির সাথে সারফেসের মালিকানা ভাগ করে নেওয়ার জন্য ব্যবহার করে। সারফেসের সাথে কাজ করে এমন কিছু ক্লায়েন্ট একটি সারফেসহোল্ডার চায়, কারণ সারফেস প্যারামিটারগুলি পেতে এবং সেট করার জন্য APIগুলি একটি সারফেসহোল্ডারের মাধ্যমে বাস্তবায়িত হয়। সারফেসভিউতে একটি সারফেসহোল্ডার থাকে।
বেশিরভাগ উপাদান যা একটি ভিউয়ের সাথে ইন্টারঅ্যাক্ট করে তার মধ্যে একটি SurfaceHolder থাকে। কিছু অন্যান্য API, যেমন MediaCodec, পৃষ্ঠের উপরই কাজ করে।