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