عند استخدام GL_RGBA16F_ARB-الملمس يحتوي على مجرد هراء, ولكن أنا لا أحصل على رسالة خطأ
سؤال
لقد تولد الملمس مثل هذا:
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(
GL_TEXTURE_2D, 0,
GL_RGBA16,
//GL_RGBA16F_ARB, //< Won't work
256, 256, 0, GL_RGBA, GL_FLOAT, NULL
);
glBindTexture(GL_TEXTURE_2D, 0);
أنا إرفاقه framebuffer كائن (FBO) من أجل التقديم.كل هذا يعمل مثل السحر عندما أريد الداخلية تنسيق GL_RGBA16
.ومع ذلك أحتاج أعلى النطاق الديناميكي و كنت أفكر أن GL_RGBA16F_ARB
قد تفعل خدعة.
للأسف لو كنت محل GL_RGBA16
مع GL_RGBA16F_ARB
في التعليمات البرمجية المذكورة أعلاه, نسيج يبدو أن التوقف عن العمل.لا أحاول أن تجعل FBO/نسيج العصي ، عند استخدام نسيج يحتوي على عشوائية القمامة.(الكثير من الأرجواني ، كما اتضح) هذا لن يكون محبطا جدا إذا كنت قد حصلت على رسالة خطأ ملمحا إلى ما قد يكون خطأ ولكن أنا لا يمكن أن يبدو للعثور على واحد.وبعبارة أخرى ، glGetError()
يعود 0
بعد glTexImage2D
-دعوة ، glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)
يعود GL_FRAMEBUFFER_COMPLETE_EXT
عندما يكون لدي تعلق الملمس
لم عبث glClampColorARB(...)
...بعد :)
- نسيت للتحقق من وجود أخطاء في مكان/الطريقة التي أنا لم أفكر به ؟
- هل
GL_RGBA16F_ARB
-القوام تتطلب أي معاملة خاصة أنني لم يعطى ؟ - هل هناك أي شيء آخر يمكن أن يكون خطأ ؟
أنا الحيرة ، لأن كل شيء يعمل بسلاسة مع GL_RGBA16
... :(
تحرير: عند استخدام GL_RGBA16F_ARB
, أول الإطار حاولت أن تجعل الشاشة لا تجعل.يبدو لي أنني يجب أن تحصل على رسالة خطأ في مكان ما..?
تحرير: من خلال تفتيش ShadowIce عمل التعليمات البرمجية المثال اكتشفت أن المشاكل اختفت لو غيرت منطقة عازلة بعمق على FBO ، وإعطاء glRenderBufferStorageEXT(...)
GL_DEPTH_COMPONENT24
كما المعلمة الثانية ، بدلا من GL_DEPTH_COMPONENT16
.ليس لدي أي فكرة لماذا يعمل هذا, ولكن على ما يبدو أنها لا تعمل.
أيضا ، ShadowIce رمز فواصل مثل الألغام إذا كنت تفعل العكس استبدال هناك.
المحلول
يجب أن لا يكون هناك أي شيء خاص القيام به من أجل إعداد framebuffer مع تعويم القوام.بعض الأشياء أود أن تحقق:
- هو FBO مقيدة السحب/قراءة ضبط مخزن بشكل صحيح قبل الاتصال glCheckFramebufferStatusEXT?أيضا محاولة اختبار ذلك الحق قبل أن يوجه إليها.
- هل نسيج ننظر موافق بعد فترة بسيطة glClear محددة واضحة اللون ؟ إذا كان الجواب نعم ، قد يكون هناك شيء خاطئ مع تظليل (إذا كنت تستخدم أي) أو الطريقة التي يوجه FBO.
- هي برامج التشغيل الخاصة بك حتى الآن ؟ و هل المشكلة لا تزال موجودة على جهاز كمبيوتر مع مختلف الأجهزة ؟
- ماذا عن GL_RGBA32F_ARB?
تحرير:
- التحقق من هوية framebuffer والملمس ، تحقق أيضا إذا كان نسيج الهوية مباريات واحدة تعلق بك fbo (مع glGetFramebufferAttachmentParameteriv).عادة أنا أظن أن كل شيء على ما يرام مع ذلك ما اذا كان يعمل مع RGBA الملمس ولكن بيانات عشوائية (خاصة الأرجواني) هو علامة جيدة على أن شيئا كان مكتوبا في الملمس أو لم يكن تطهيرها بشكل صحيح.
كنت قد كتبت صغيرة سبيل المثال التطبيقات التي يجب أن تعمل ، ربما هذا يساعد.لدي فقط اختباره على ويندوز ، لذلك لينكس قد تحتاج إلى تغيير ذلك قليلا: الرابط
نصائح أخرى
GL_HALF_FLOAT_ARB قد تعمل النوع بدلا من GL_FLOAT.