একটি সফল গ্লিংক প্রোগ্রামের পরে, আমি কি আমার ছায়ারগুলি মুছতে / আলাদা করতে পারি?


45

আমার কোনও লিঙ্কযুক্ত প্রোগ্রাম হওয়ার পরে এবং রক্ষণাত্মক প্রোগ্রামিংয়ের কথা চিন্তা করার পরে, আমি কি এই প্রোগ্রামটি লিঙ্ক করতে ব্যবহৃত ছায়াগুলি মুছতে এবং আলাদা করতে পারি?

যদি হ্যাঁ, এটি কোনও সংস্থান মুক্ত করতে চলেছে? অথবা এই শেডার অবজেক্টগুলি কি কেবল গ্লডিলেটপ্রগ্রাম কল করার পরে মুক্ত হতে চলেছে?

সম্পাদনা করুন: আমি যা করছি তা স্পষ্ট করার জন্য (যা উত্তরের সাথে সামঞ্জস্যপূর্ণ):

glCreateShader -> glShaderSource -> glCompileShader -> glCreateProgram -> glAttachShader -> glLinkProgram -> glDetachShader -> glDeleteShader -> এই শেডার প্রোগ্রামটি ব্যবহার করে আঁকুন -> এবং যখন আমার আর এই শেডারের দরকার নেই তখন glDeleteProgram

উত্তর:


46

হ্যাঁ, আপনার সর্বদা এটি করা উচিত। সাম্প্রতিককালের আগে পর্যন্ত আমি এটি সম্পর্কে সন্ধান করতে পারি নি, তবে একটি শেডার আসলে এটি মুছে ফেলা হবে না glDeleteShaderযতক্ষণ না এটি বিচ্ছিন্ন হয়ে যায়। ম্যান পেজে এটির জন্য উল্লেখ করা হয়েছেglDetachShader

সম্পাদনা : শেডারগুলি মুছে ফেলার বিষয়ে প্রায় কিছুটা মিস হয়েছে। হ্যাঁ, আপনার এটি করা উচিত কারণ এটি শেডার উত্স এবং লিঙ্কযুক্ত অবজেক্ট কোড সঞ্চয় করতে ব্যবহৃত মেমরিটিকে মুক্ত করে। এটি স্ট্যাকওভারফ্লো প্রশ্নটিতে আরও বিশদে ব্যাখ্যা করা হয়েছে ।


+1 এবং এটি পরিষ্কার করা আরও সহজ করে তোলে কারণ আপনি কেবলমাত্র একটি অবজেক্টকে ট্র্যাক করতে এবং glDelete করতে পারেন।
ম্যাক্সিমাস মিনিমাস

2

অর্ডারটি ঠিক আছে, তবে আপনাকে ছায়ারকে আলাদা করতে হবে না, কারণ glDeleteProgram কল করা সমস্ত সংযুক্ত শেডারের সাথে এটি করে এবং তারপরে সেগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলা হয় (যদি তারা glDeleteShader func দিয়ে মুছে ফেলার জন্য চিহ্নিত করা হত)।

তথ্যসূত্র: http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml


প্রতিটি প্রোগ্রামের তুলনায় শেডার অবজেক্টস প্রচুর স্মৃতি গ্রহণ করে। আপনার প্রোগ্রামগুলি সংকলন শেষ করার পরে এবং আরও গুরুত্বপূর্ণ কাজের জন্য আরও মেমরি উপলব্ধ হওয়ার পরে এগুলি মুছে ফেলা ভাল।
রবার্ট রুহানি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.