অ্যান্ড্রয়েড, ওপেনজিএল এবং প্রসারিত জিএলসুরফেসভিউ?


12

এই প্রশ্নটি পার্ট টেকনিক্যাল, পার্ট-মেটা, পার্ট-সাবজেক্টিভ এবং খুব নির্দিষ্ট:

আমি অ্যান্ড্রয়েডে কাজ করা একটি ইন্ডি গেম এবং গত months মাস ধরে আমি লড়াই করেছি এবং শেষ পর্যন্ত অ্যান্ড্রয়েডের জন্য আমার নিজের 3 ডি গেম অ্যাপ তৈরি করতে সফল হয়েছি। তাই আমি ভেবেছিলাম যে আমি এসও-তে আশা করব এবং অ্যান্ড্রয়েড এবং ওপেনজিএল-ইএস নিয়ে লড়াই করা অন্যদের সাহায্য করব

যাইহোক, প্রশ্নগুলির সিংহভাগ বর্ধনের সাথে সম্পর্কিত GLSurfaceView। আমি না বাড়িয়ে আমার পুরো অ্যাপটি তৈরি করেছি GLSurfaceView(এবং এটি দুর্দান্ত চলছে) runs আমি GLSurfaceViewযেসব প্রশ্নের মুখোমুখি হয়েছি সেগুলির সীমাবদ্ধতা বাড়ানোর কোনও কারণ আমি দেখতে পাচ্ছি না ।

খারাপ, অ্যান্ড্রয়েড ডকুমেন্টেশন আপনি কর্তব্য যে বোঝা, কিন্তু কোন বিস্তারিত explaination দেয় কেন বা কি অনুকূল / কনস ব্যাপ্ত এবং আপনার নিজের বাস্তবায়নের মাধ্যমে সবকিছু করছে না বনাম হয় GLSurfaceView.Rendererযেমন আমি করেছি

তবুও, সমস্যাগুলির সম্পূর্ণরূপে প্রসারিত হওয়া প্রশ্নগুলির নিখুঁত ভলিউমটি GLSurfaceViewআমাকে অবাক করে দিচ্ছে যে এটি করার জন্য আসলেই কোনও ভাল যুক্তি আছে কিনা তা আমি করে যাচ্ছি (এবং অন্যদের কাছে আমার উত্তরগুলিতে পরামর্শ দেওয়া হচ্ছে) করতে).

তো, আমি কি কিছু মিস করছি? এর মধ্যে আমি কি প্রশ্নের উত্তর দেওয়া বন্ধ করব?

অ্যান্ড্রয়েড ওপেনজিএল ডকুমেন্টেশন


সুন্দর প্রশ্ন আমি উত্তর সম্পর্কে আগ্রহী ..
তোফিক

জিএলসুরফেসভিউকে বাড়ানোর কারণগুলির একটি কারণ এখানে পাওয়া যাবে: গেমদেব.স্ট্যাকেক্সেঞ্জার / সেকশনস / 12629/… এটিকে উপলব্ধি না করেই আমি ইতিমধ্যে টেক্সচার ইত্যাদি পুনরায় লোড করে আমার নিজের অ্যাপ্লিকেশনটিতে এই প্রশ্নটির বিষয়ে আলোচিত বিষয়গুলি সরিয়ে নিয়েছিonResume()
চামচ থাম্ব

উত্তর:


2

আমার জন্য আমার খুব ন্যূনতম এক্সটেনশন GLSurfaceViewরয়েছে এবং প্রজ্ঞার বেশিরভাগটি আমার বাস্তবায়নের অন্তর্ভুক্ত GLSurfaceView.Renderer। এর জন্য একটি মোড়ক ব্যবহার করার জন্য আমার নিম্নলিখিত তিনটি কারণ ছিল GLSurfaceView:

  1. বেসটি উদাহরণটি ফিরে GLSurfaceViewপাওয়ার কোনও উপায় সরবরাহ করে না Renderer। আমার একাধিক সারফেস রয়েছে এবং আমি যখন তাদের একটির জন্য একটি ইউআই ইভেন্ট পাই, আমি সংশ্লিষ্ট রেন্ডারারের কাছে আদেশটিটি পাস করতে চাই। সুতরাং, আমি ওভাররাইড setRendererকরে আমার প্রসারিত শ্রেণিতে রেফারেন্স রাখি।

  2. GLSurfaceView.RendereronDetachedFromWindow()বা জন্য বিজ্ঞপ্তি পায় না surfaceDestroyed()। এটি আমার বাস্তবায়নে কিছু সমস্যা সৃষ্টি করেছে। আমার এক্সটেনশন GLSurfaceViewএই পদ্ধতিগুলিকে ওভাররাইড করে এবং mRenderer কে জানতে দেয়। এটি সম্ভব §1 এর কারণে ।

  3. কিছু কিছু পদ্ধতি try { super.যা ; } catch() { log(কিছু যাই হোক না কেন কেবল যুক্ত করে) } । উদাহরণস্বরূপ, queueEvent()রেন্ডারার সেট না করা থাকলে নিক্ষেপ করবে; তবে আমার জন্য, এই জাতীয় টাইমলাইন অসঙ্গতিগুলি উপেক্ষা করা ঠিক আছে।


আমি এটিও শুরু করে দিয়েছি, যদিও আপনি কেন আসল যুক্তি যুক্তর GLSurfaceViewপরিবর্তে প্রসারিত করতে পারেন তা এই প্রশ্নটি আরও লক্ষ্য করে GLSurfaceView.Renderer। যদিও পয়েন্ট 1 এ, আমি আমার ক্রিয়াকলাপে রেন্ডারকে পরিবর্তনশীল হিসাবে রাখি। তত্ত্ব আমি প্রসঙ্গ কাস্ট করে যে কোন জায়গা থেকে পেতে পারেন: ((MyActivity)view.getContext()).getRenderer()। প্রসঙ্গের অবজেক্টটি অগত্যা নাও সম্ভবত খানিকটা বেশি বিপজ্জনক হতে পারেMyActivity
চামচ থাম্ব

যদি আপনার একজন রেন্ডারার থাকে তবে এটি ঠিক আছে। তবে যেমনটি আমি আগেই বলেছি, আমাদের অনেক রেন্ডার রয়েছে এবং তারা বিভিন্ন সারফেসভিউয়ের সাথে সংযুক্ত হয়ে যায় - একটি গণ্ডগোল!
অ্যালেক্স কোহন

0

জিএলসুরফেসভিউকে বাড়ানোর কমপক্ষে একটি ভাল কারণ হ'ল এটি অন্য কোনও উইজেটের মতো একটি লেআউট এক্সএমএল ফাইল থেকে সরাসরি ইনস্ট্যান্ট করতে সক্ষম হবে:

    <RelativeLayout ... >
      <com.example.MyGlSurfaceView
        android:id="@+id/my_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
      />
     </RelativeLayout>

1
আপনি যেভাবেই এটি ব্যবহার করতে পারেন<android.opengl.GLSurfaceView android:id="@+id/graphics_glsurfaceview1" android:layout_width="fill_parent" android:layout_height="fill_parent" />
চামচ থাম্ব

ভাল যুক্তি. পার্থক্যটি হ'ল আমার উদাহরণে অ্যান্ড্রয়েড কাঠামো কোডের অতিরিক্ত লাইনের প্রয়োজন ছাড়াই সবকিছু স্ফীত করে দেয় এবং সেটআপ করে। আপনার পদ্ধতিটি আরও কোড, তবে বাস্তবায়ন প্রতিস্থাপনের জন্য নমনীয়। তা ছাড়া উভয় পথই একই রকম মনে হয় seem
আমির উয়াল

-1

আচ্ছা ... জিএলসুরফেসভিউ হ'ল, আমি যেমন নিশ্চিত যে আপনি খেয়াল করেছেন, সাধারণ ভালোর জন্য কেবল একটি মোড়ক। এটিকে অ্যান্ড্রয়েড ভিউ হায়ারার্কির সাথে সুন্দরভাবে অন্তর্ভুক্ত করার বিকল্প থাকা ওপেনজিএল দিয়ে রেন্ডার করতে হবে এমন সমস্ত কার্যকারিতা এটির মধ্যে রয়েছে।

আপনি আপনার বিকল্পটি সরবরাহ করেন নি তাই তুলনা করা অসম্ভব তবে আমি আশা করি আপনি GLSurfaceView এর মতো উপস্থাপনের জন্য অন্য থ্রেড তৈরি করেছেন বা আপনার ব্যবহারকারী ইনপুট পিছিয়ে থাকতে পারে।

আবারও: জিএলসুরফেসভিউ রেন্ডারিংয়ের জন্য একটি নতুন থ্রেড সরবরাহ করে, তাই আপনাকে ব্যবহারকারীর ইনপুট ল্যাগ সম্পর্কে চিন্তা করতে হবে না


2
হ্যাঁ, তবে GLSurfaceViewআপনি এটি প্রসারিত না করলেও এটি (একটি রেন্ডারিং থ্রেড শুরু করে)। আমি ব্যবহার করি GLSurfaceView, তবে আমি এটি প্রসারিত করি না। আমি এটি বাড়িয়ে দেওয়া এবং এর মধ্যে বিভিন্ন পদ্ধতি ওভাররাইড করা থেকে কী কী সুবিধা রয়েছে তা জিজ্ঞাসা করছি যে সমস্ত কিছু থাকার বিপরীতেRenderer
চামচ থাম্ব

ওয়েলপ, আমি চেষ্টা করেছি :) আমি পরে এটি সন্ধান করতে হবে, এখন আমিও আগ্রহী!
গ্রেগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.