В зависимости от того, на какую документацию вы ссылаетесь glTexParameteri()
, закрепление текстур имеет 2 различные интерпретации.
В документации Microsoft вы найдете GL_CLAMP , а в документации Хроноса вы найдете GL_CLAMP_TO_EDGE .
Я думал, что они синонимичны по функциям, но это не так.
На моем Ubuntu 18.04.2 у меня есть следующее.
/usr/include/GL/gl.h
#define GL_CLAMP_TO_EDGE 0x812F
#define GL_CLAMP 0x2900
#define GL_CLAMP_TO_BORDER 0x812D
В то время как в моей сборке Windows 10 16299 Enterprise у меня есть следующее.
C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\gl\GL.h
#define GL_CLAMP 0x2900
Они отображаются на разные значения, поэтому можно ожидать и другого поведения.
Я пытаюсь избавиться от артефактов, которые мы получаем при использовании GL_REPEAT. См. Зеленые кружки на следующем изображении (источник изображения - freepik.com ).
GL_CLAMP
действительно избавляет от артефактов, однако я не могу найти достаточно подробностей о том, как различаются различные режимы зажима и когда один из них предпочтительнее одного.
Я пишу код на моей машине с Windows и позже могу портировать то же приложение на GNU / Linux.
Обновление 1 : GL_CLAMP
избавить меня от большинства артефактов, но не от всех, в конце концов я добавил прозрачную рамку размером 10 пикселей для всех своих текстур. Вопрос все еще стоит однако.
Обновление 2 : Вопрос не в том, как GL_CLAMP отличается между реализациями, а в чем GL_CLAMP отличается от GL_CLAMP_TO_EDGE?