سؤال

قراءة مواصفات GLSL 1.40:

يمكن أن تكون مخرجات الشظية تعويم فقط أو ناقلات النقاط العائمة أو أعداد صحيحة موقعةة أو غير موقعة أو ناقلات عدد صحيح أو صفائف لأي هذه. لا يمكن إخراج المصفوفات والهياكل. يتم الإعلان عن مخرجات الشظية كما في الأمثلة التالية:

خارج vec4 figmentcolor؛ من لمعان uint؛

يتم تعريف لون الجزء في الكتابة GL_FRAGCOLOR ... هل هذا صحيح؟ يمكن لأي شخص مسح أفكاري حول هذه المخرجات؟ هل لي أن أكتب "مجززات" فقط "من مثال لتحديد لون الجزء؟ هل لي أن أقرأهم ("لمعان" على سبيل المثال)؟

هل كانت مفيدة؟

المحلول

مثالك لديه 2 مخرجات. لديهم فتحات FBO المقابلة المرتبطة بعد ربط برنامج GLSL. يمكنك إعادة توجيههم باستخدام glBindFragDataLocation.

بمجرد تنشيط Shader و FBO المنضم، كل هذا يتوقف على قناع رسم glDrawBuffers. وبعد على سبيل المثال، إذا مرت GL_COLOR_ATTACHMENT0 و GL_COLOR_ATTACHMENT2 هناك، من شأنه أن يعني أن مؤشر الإخراج 0 سيذهب إلى المرفق 0، وسيذهب مؤشر الإخراج 1 إلى مرفق اللون 2.

نصائح أخرى

يتم إهمال متغير الناتج العالمي GL_FRAGCOLOR GL_FRAGCOLOR بعد إصدار GLSL 120. الآن يجب عليك منحه اسما واكتب بنفسك، كما هو الحال في مثالك. فيما يتعلق بالعديد من المخرجات، يمنحك هذا الرابط معلومات حول التعيين: http://www.opengl.org/wiki/glsl_objects#program_linking.

(ووجدت أن الرابط في: http://www.opengl.org/discussion_boards/ubberheads.php؟ubb=showflat&number=270999. )

أتمنى أن يساعدك هذا! :د

عذرا! أرى أن Kvark أعطى المعلومات ذات الصلة. على أي حال، ربما حصلت على شيء من النص الخاص بي أيضا.

أريد أن أعطي بعض الأمثلة:

void add(in float a, in float b, out float c)
{
    //you can not use c here. only set value
    //changing values of a and b does not change anything.
    c = a + b;
}

void getColor(out float r, out float g, out float b)
{
   //you can not use r, g, b here. only set value
   r = gl_FragColor.r;
   g = gl_FragColor.g;
   b = gl_FragColor.b;
}

void amplify(inout vec4 pixelColor, in value)
{
   //inout is like a reference
   pixelColor = pixelColor * value;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top