একাধিক শেডারে ক্রিয়াকলাপ ভাগ করে নেওয়া


10

সহজ প্রশ্ন:

জিএলএসএল-তে, একাধিক শেডারের জুড়ে ফাংশনগুলি ভাগ করে নেওয়ার কোনও উপায় আছে, বা প্রতিটি শ্যাডারে প্রয়োজনীয় সমস্ত ফাংশনগুলির আমি কী সংজ্ঞা দিতে পারি?

উত্তর:


12

আপনি একটি শিরোনাম ফাইলটিতে কিছু ফাংশন সংজ্ঞায়িত করতে পারেন এবং এগুলি আপনার শ্যাডারে অন্তর্ভুক্ত করতে পারেন। এটি সি / সি ++ এর থেকে কিছুটা আলাদা যে আপনি নিজের ফাংশনগুলির মৃতদেহগুলি শিরোনামগুলিতে রেখেছিলেন কেবল তাদের প্রোটোটাইপগুলি নয় (যেহেতু শেডারের পৃথক সংকলন এবং সংযোগ করার কোনও ধারণা নেই), তবে এটি সি / সি ++ এর মতোই অন্যরকম other হেডার।


2
কমপক্ষে নোট করুন যে # অন্তর্ভুক্তি আসলে GLSL এর কোনও সংস্করণে 3.30 এর মধ্যে সমর্থিত নয়, এমন কোনও এক্সটেনশন যা সর্বজনীনভাবে উপলভ্য নয় except যে কোনও শ্যাডারের শেডারের কাঠামোতে এই বৈশিষ্ট্যটি সরবরাহ করতে ভাষাটি প্রসারিত করা উচিত, যদিও (সিজি সহ)।
শান মিডলডিচ

7

# অন্তর্ভুক্তটি উপলভ্য না হলে আপনি ভাগ করা জিনিসগুলি নির্দিষ্ট করতে glShaderSource এর আর্গুমেন্ট ব্যবহার করবেন। উদাহরণ:

char *sharedcode = "...shared code here...";
char *fs1 = "...fragment shader 1...";
char *fs2 = "...fragment shader 2...";

char *awesomeeffect1[] = {sharedcode, fs1};
char *awesomeeffect2[] = {sharedcode, fs2};

glShaderSource (shader1, 2, awesomeeffect1, NULL);
glShaderSource (shader2, 2, awesomeeffect2, NULL);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.