একটি OpenGL ES পরিবেশ তৈরি করুন

আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে OpenGL ES দিয়ে গ্রাফিক্স আঁকার জন্য, আপনাকে অবশ্যই তাদের জন্য একটি ভিউ কন্টেইনার তৈরি করতে হবে। এটি করার আরও সহজ উপায়গুলির মধ্যে একটি হল একটি GLSurfaceView এবং একটি GLSurfaceView.Renderer উভয়ই বাস্তবায়ন করা। একটি GLSurfaceView হল OpenGL এবং GLSurfaceView.Renderer দিয়ে আঁকা গ্রাফিক্সের জন্য একটি ভিউ কন্টেনার। রেন্ডারার সেই ভিউয়ের মধ্যে কী আঁকা হয় তা নিয়ন্ত্রণ করে। এই ক্লাসগুলি সম্পর্কে আরও তথ্যের জন্য, OpenGL ES বিকাশকারী নির্দেশিকা দেখুন।

GLSurfaceView হল আপনার অ্যাপ্লিকেশনে OpenGL ES গ্রাফিক্স অন্তর্ভুক্ত করার একটি উপায়। একটি পূর্ণ-স্ক্রীন বা কাছাকাছি-পূর্ণ-স্ক্রীন গ্রাফিক্স দৃশ্যের জন্য, এটি একটি যুক্তিসঙ্গত পছন্দ। বিকাশকারীরা যারা তাদের লেআউটের একটি ছোট অংশে OpenGL ES গ্রাফিক্সকে অন্তর্ভুক্ত করতে চান তাদের TextureView এ একবার নজর দেওয়া উচিত। প্রকৃতপক্ষে, নিজে নিজে করা ডেভেলপারদের জন্য, SurfaceView ব্যবহার করে একটি OpenGL ES ভিউ তৈরি করাও সম্ভব, কিন্তু এর জন্য বেশ কিছু অতিরিক্ত কোড লেখার প্রয়োজন।

এই পাঠটি ব্যাখ্যা করে কিভাবে একটি সাধারণ অ্যাপ্লিকেশন কার্যকলাপে GLSurfaceView এবং GLSurfaceView.Renderer এর একটি ন্যূনতম বাস্তবায়ন সম্পূর্ণ করতে হয়।

ম্যানিফেস্টে OpenGL ES ব্যবহার ঘোষণা করুন

আপনার অ্যাপ্লিকেশনটি OpenGL ES 2.0 API ব্যবহার করার জন্য, আপনাকে অবশ্যই আপনার ম্যানিফেস্টে নিম্নলিখিত ঘোষণা যোগ করতে হবে:

<uses-feature android:glEsVersion="0x00020000" android:required="true" />

যদি আপনার অ্যাপ্লিকেশন টেক্সচার কম্প্রেশন ব্যবহার করে, তাহলে আপনাকে অবশ্যই ঘোষণা করতে হবে যে আপনার অ্যাপ কোন কম্প্রেশন ফর্ম্যাটগুলি সমর্থন করে, যাতে এটি শুধুমাত্র সামঞ্জস্যপূর্ণ ডিভাইসগুলিতে ইনস্টল করা হয়।

<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
<supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />

টেক্সচার কম্প্রেশন ফরম্যাট সম্পর্কে আরও তথ্যের জন্য, OpenGL বিকাশকারী গাইড দেখুন।

OpenGL ES গ্রাফিক্সের জন্য একটি কার্যকলাপ তৈরি করুন

ওপেনজিএল ইএস ব্যবহার করে এমন অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলির ক্রিয়াকলাপগুলি অন্য যে কোনও অ্যাপ্লিকেশনের মতোই রয়েছে যার একটি ব্যবহারকারী ইন্টারফেস রয়েছে৷ অন্যান্য অ্যাপ্লিকেশন থেকে প্রধান পার্থক্য হল আপনি আপনার কার্যকলাপের জন্য লেআউটে যা রাখেন। অনেক অ্যাপ্লিকেশানে আপনি TextView , Button এবং ListView ব্যবহার করতে পারেন, এমন একটি অ্যাপে যা OpenGL ES ব্যবহার করে, আপনি একটি GLSurfaceView যোগ করতে পারেন।

নিম্নলিখিত কোড উদাহরণটি একটি কার্যকলাপের একটি ন্যূনতম বাস্তবায়ন দেখায় যা একটি GLSurfaceView এর প্রাথমিক ভিউ হিসাবে ব্যবহার করে:

কোটলিন

class OpenGLES20Activity : Activity() {

    private lateinit var gLView: GLSurfaceView

    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Create a GLSurfaceView instance and set it
        // as the ContentView for this Activity.
        gLView = MyGLSurfaceView(this)
        setContentView(gLView)
    }
}

জাভা

public class OpenGLES20Activity extends Activity {

    private GLSurfaceView gLView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Create a GLSurfaceView instance and set it
        // as the ContentView for this Activity.
        gLView = new MyGLSurfaceView(this);
        setContentView(gLView);
    }
}

দ্রষ্টব্য: OpenGL ES 2.0-এর জন্য Android 2.2 (API লেভেল 8) বা উচ্চতর প্রয়োজন, তাই নিশ্চিত করুন যে আপনার Android প্রকল্পটি সেই API বা উচ্চতরকে লক্ষ্য করে।

একটি GLSurfaceView অবজেক্ট তৈরি করুন

একটি GLSurfaceView হল একটি বিশেষ দৃশ্য যেখানে আপনি OpenGL ES গ্রাফিক্স আঁকতে পারেন। এটি নিজে থেকে অনেক কিছু করে না। বস্তুর প্রকৃত অঙ্কন GLSurfaceView.Renderer এ নিয়ন্ত্রিত হয় যা আপনি এই ভিউতে সেট করেছেন। প্রকৃতপক্ষে, এই বস্তুর কোডটি এতটাই পাতলা, আপনি এটিকে প্রসারিত করা এড়িয়ে যেতে এবং শুধুমাত্র একটি অপরিবর্তিত GLSurfaceView উদাহরণ তৈরি করতে প্রলুব্ধ হতে পারেন, কিন্তু তা করবেন না। স্পর্শ ইভেন্টগুলি ক্যাপচার করার জন্য আপনাকে এই ক্লাসটি প্রসারিত করতে হবে, যা স্পর্শ ইভেন্টের প্রতিক্রিয়া পাঠে কভার করা হয়েছে।

একটি GLSurfaceView এর জন্য প্রয়োজনীয় কোডটি ন্যূনতম, তাই দ্রুত বাস্তবায়নের জন্য, এটি ব্যবহার করে এমন কার্যকলাপে শুধুমাত্র একটি অভ্যন্তরীণ শ্রেণী তৈরি করা সাধারণ:

কোটলিন

import android.content.Context
import android.opengl.GLSurfaceView

class MyGLSurfaceView(context: Context) : GLSurfaceView(context) {

    private val renderer: MyGLRenderer

    init {

        // Create an OpenGL ES 2.0 context
        setEGLContextClientVersion(2)

        renderer = MyGLRenderer()

        // Set the Renderer for drawing on the GLSurfaceView
        setRenderer(renderer)
    }
}

জাভা

import android.content.Context;
import android.opengl.GLSurfaceView;

class MyGLSurfaceView extends GLSurfaceView {

    private final MyGLRenderer renderer;

    public MyGLSurfaceView(Context context){
        super(context);

        // Create an OpenGL ES 2.0 context
        setEGLContextClientVersion(2);

        renderer = new MyGLRenderer();

        // Set the Renderer for drawing on the GLSurfaceView
        setRenderer(renderer);
    }
}

আপনার GLSurfaceView বাস্তবায়নে আরেকটি ঐচ্ছিক সংযোজন হল GLSurfaceView.RENDERMODE_WHEN_DIRTY সেটিং ব্যবহার করে আপনার অঙ্কন ডেটাতে কোনো পরিবর্তন হলে শুধুমাত্র ভিউ আঁকতে রেন্ডার মোড সেট করা:

কোটলিন

// Render the view only when there is a change in the drawing data
renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY

জাভা

// Render the view only when there is a change in the drawing data
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

আপনি requestRender() কল না করা পর্যন্ত এই সেটিং GLSurfaceView ফ্রেমটিকে পুনরায় আঁকতে বাধা দেয়, যা এই নমুনা অ্যাপের জন্য আরও কার্যকর।

একটি রেন্ডারার ক্লাস তৈরি করুন

ওপেনজিএল ইএস ব্যবহার করে এমন একটি অ্যাপ্লিকেশনের মধ্যে GLSurfaceView.Renderer ক্লাস বা রেন্ডারারের বাস্তবায়ন হল যেখানে জিনিসগুলি আকর্ষণীয় হতে শুরু করে। এই ক্লাসটি GLSurfaceView এ যা আঁকা হয় তা নিয়ন্ত্রণ করে যার সাথে এটি যুক্ত। একটি GLSurfaceView এ কী এবং কীভাবে আঁকতে হয় তা বের করার জন্য একটি রেন্ডারারে তিনটি পদ্ধতি রয়েছে যা অ্যান্ড্রয়েড সিস্টেম দ্বারা বলা হয়:

  • onSurfaceCreated() - ভিউ এর OpenGL ES পরিবেশ সেট আপ করতে একবার কল করা হয়েছে।
  • onDrawFrame() - প্রতিটি ভিউ পুনরায় আঁকার জন্য বলা হয়েছে।
  • onSurfaceChanged() - দৃশ্যের জ্যামিতি পরিবর্তন হলে বলা হয়, উদাহরণস্বরূপ যখন ডিভাইসের স্ক্রীন অভিযোজন পরিবর্তিত হয়।

এখানে একটি OpenGL ES রেন্ডারারের একটি খুব প্রাথমিক বাস্তবায়ন রয়েছে, যা GLSurfaceView তে একটি কালো পটভূমি আঁকা ছাড়া আর কিছুই করে না:

কোটলিন

import javax.microedition.khronos.egl.EGLConfig
import javax.microedition.khronos.opengles.GL10

import android.opengl.GLES20
import android.opengl.GLSurfaceView

class MyGLRenderer : GLSurfaceView.Renderer {

    override fun onSurfaceCreated(unused: GL10, config: EGLConfig) {
        // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f)
    }

    override fun onDrawFrame(unused: GL10) {
        // Redraw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
    }

    override fun onSurfaceChanged(unused: GL10, width: Int, height: Int) {
        GLES20.glViewport(0, 0, width, height)
    }
}

জাভা

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLES20;
import android.opengl.GLSurfaceView;

public class MyGLRenderer implements GLSurfaceView.Renderer {

    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    }

    public void onDrawFrame(GL10 unused) {
        // Redraw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }

    public void onSurfaceChanged(GL10 unused, int width, int height) {
        GLES20.glViewport(0, 0, width, height);
    }
}

যে এটা আছে সব! উপরের কোড উদাহরণগুলি একটি সাধারণ অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করে যা OpenGL ব্যবহার করে একটি কালো পর্দা প্রদর্শন করে। যদিও এই কোডটি খুব আকর্ষণীয় কিছু করে না, এই ক্লাসগুলি তৈরি করে, আপনি OpenGL দিয়ে গ্রাফিক উপাদানগুলি আঁকা শুরু করার জন্য প্রয়োজনীয় ভিত্তি স্থাপন করেছেন৷

দ্রষ্টব্য: আপনি যখন OpengGL ES 2.0 API ব্যবহার করছেন তখন এই পদ্ধতিগুলির একটি GL10 প্যারামিটার কেন আছে তা আপনি ভাবতে পারেন৷ অ্যান্ড্রয়েড ফ্রেমওয়ার্ক কোড সহজ রাখতে এই পদ্ধতি স্বাক্ষরগুলি 2.0 API-এর জন্য পুনরায় ব্যবহার করা হয়।

আপনি যদি OpenGL ES API-এর সাথে পরিচিত হন, তাহলে আপনি এখন আপনার অ্যাপে একটি OpenGL ES পরিবেশ সেট আপ করতে এবং গ্রাফিক্স আঁকা শুরু করতে সক্ষম হবেন। যাইহোক, আপনার যদি OpenGL-এর সাথে শুরু করার জন্য আরও একটু সাহায্যের প্রয়োজন হয়, আরও কিছু ইঙ্গিতের জন্য পরবর্তী পাঠগুলিতে যান।