عند استخدام GL_RGBA16F_ARB-الملمس يحتوي على مجرد هراء, ولكن أنا لا أحصل على رسالة خطأ

StackOverflow https://stackoverflow.com/questions/640095

  •  11-07-2019
  •  | 
  •  

سؤال

لقد تولد الملمس مثل هذا:

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(...) ...بعد :)

  1. نسيت للتحقق من وجود أخطاء في مكان/الطريقة التي أنا لم أفكر به ؟
  2. هل GL_RGBA16F_ARB-القوام تتطلب أي معاملة خاصة أنني لم يعطى ؟
  3. هل هناك أي شيء آخر يمكن أن يكون خطأ ؟

أنا الحيرة ، لأن كل شيء يعمل بسلاسة مع GL_RGBA16... :(

تحرير: عند استخدام GL_RGBA16F_ARB, أول الإطار حاولت أن تجعل الشاشة لا تجعل.يبدو لي أنني يجب أن تحصل على رسالة خطأ في مكان ما..?

تحرير: من خلال تفتيش ShadowIce عمل التعليمات البرمجية المثال اكتشفت أن المشاكل اختفت لو غيرت منطقة عازلة بعمق على FBO ، وإعطاء glRenderBufferStorageEXT(...) GL_DEPTH_COMPONENT24 كما المعلمة الثانية ، بدلا من GL_DEPTH_COMPONENT16.ليس لدي أي فكرة لماذا يعمل هذا, ولكن على ما يبدو أنها لا تعمل.

أيضا ، ShadowIce رمز فواصل مثل الألغام إذا كنت تفعل العكس استبدال هناك.

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

المحلول

يجب أن لا يكون هناك أي شيء خاص القيام به من أجل إعداد framebuffer مع تعويم القوام.بعض الأشياء أود أن تحقق:

  1. هو FBO مقيدة السحب/قراءة ضبط مخزن بشكل صحيح قبل الاتصال glCheckFramebufferStatusEXT?أيضا محاولة اختبار ذلك الحق قبل أن يوجه إليها.
  2. هل نسيج ننظر موافق بعد فترة بسيطة glClear محددة واضحة اللون ؟ إذا كان الجواب نعم ، قد يكون هناك شيء خاطئ مع تظليل (إذا كنت تستخدم أي) أو الطريقة التي يوجه FBO.
  3. هي برامج التشغيل الخاصة بك حتى الآن ؟ و هل المشكلة لا تزال موجودة على جهاز كمبيوتر مع مختلف الأجهزة ؟
  4. ماذا عن GL_RGBA32F_ARB?

تحرير:

  1. التحقق من هوية framebuffer والملمس ، تحقق أيضا إذا كان نسيج الهوية مباريات واحدة تعلق بك fbo (مع glGetFramebufferAttachmentParameteriv).عادة أنا أظن أن كل شيء على ما يرام مع ذلك ما اذا كان يعمل مع RGBA الملمس ولكن بيانات عشوائية (خاصة الأرجواني) هو علامة جيدة على أن شيئا كان مكتوبا في الملمس أو لم يكن تطهيرها بشكل صحيح.

كنت قد كتبت صغيرة سبيل المثال التطبيقات التي يجب أن تعمل ، ربما هذا يساعد.لدي فقط اختباره على ويندوز ، لذلك لينكس قد تحتاج إلى تغيير ذلك قليلا: الرابط

نصائح أخرى

GL_HALF_FLOAT_ARB قد تعمل النوع بدلا من GL_FLOAT.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top