Ошибки GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT - PullRequest
4 голосов
/ 18 августа 2008

Я использую FBO s в своем коде OpenGL и вижу ошибки компиляции на GL\_FRAMEBUFFER\_INCOMPLETE\_DUPLICATE\_ATTACHMENT\_EXT. В чем причина этого и как я могу это исправить?

1 Ответ

4 голосов
/ 18 августа 2008

Причиной этой ошибки является более старая версия glext.h от NVIDIA, которая все еще имеет это определение. В то время как самые последние версии GLEW этого не делают. Это приводит к ошибкам компиляции в коде, который вы написали ранее или получили из Интернета.

Определение GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT для FBO присутствовало в спецификации (и, следовательно, в заголовочных файлах). Но позже он был удален. Причину этого можно найти в спецификации расширения FBO (см. Выпуск 87):

(87) What happens if a single image is attached more than once to a
     framebuffer object?

     RESOLVED: The value written to the pixel is undefined.

     There used to be a rule in section 4.4.4.2 that resulted in
     FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT if a single
     image was attached more than once to a framebuffer object.

         FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT   0x8CD8

         * A single image is not attached more than once to the
           framebuffer object.

           { FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT }

     This rule was removed in version #117 of the
     EXT_framebuffer_object specification after discussion at the
     September 2005 ARB meeting.  The rule essentially required an
     O(n*lg(n)) search.  Some implementations would not need to do that
     search if the completeness rules did not require it.  Instead,
     language was added to section 4.10 which says the values
     written to the framebuffer are undefined when this rule is
     violated.

Чтобы исправить эту ошибку, удалите из своего кода все GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT .

Если это невозможно в настройках, добавьте фиктивное определение в файл glext.h или glew.h , например:

#define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 0x8CD8
...