2014-08-30 6 views
2

Я начал собирать OpenGL, используя http://www.opengl-tutorial.org.
Он использует following code для загрузки и компиляции шейдеров (Linked потому, что код слишком долго для этой должности, и я думаю, что это что-то с моими шейдерами)Corrupt Vertex и фрагментарный шейдер

При выполнении этого кода, он печатает «ОШИБКА: Составитель Vertex Shader повреждена» и «ОШИБКА: Скомпилированный шейдер фрагмента поврежден». Мои шейдеры следующие

Vertex Shader

#version 330 core 
out vec3 color; 

void main(){ 
    color = vec3(1,0,0); 
} 

пиксельный шейдер

#version 330 

layout (location = 0) in vec3 position; 

void main() 
{ 
    gl_Position.xyz = position; 
    gl_Position.w = 1.0; 
} 

Я использую XCode 5.1.1, OpenGL 3.3 и GLSL 3,30.

Было бы здорово, если бы вы, ребята, могли помочь мне пройти мимо этого момента. Я застрял в учебнике YouTube, который не использовал VAO, поэтому я сам изучил эти вещи, чтобы написать учебник в своем собственном коде.

Заранее спасибо

+0

Я думаю, что это именно то, как вы скопировали их в своем вопросе, но у вас есть вершинные и фрагментарные шейдеры неправильным образом. – GuyRT

ответ

1

Это общая проблема, которая обнаруживается с XCode и обычно вызывается кодировкой или неправильно нулевыми байтами. В конце могут быть непечатаемые символы.

Вы можете просмотреть строки VertexShaderCode и FragmentShaderCode в отладчике и выяснить, имеются ли какие-либо ошибочные символы или если они не завершены нулем.

Я нашел людей, столкнувшихся с теми же ошибками here и here.

Чтобы исправить их, откройте файлы GLSL с текстовым редактированием, текстовым матчем или возвышенным текстом (некоторым действительно основным текстовым редактором) и преобразуйте их только в текст и сохраните их в виде новых файлов.

+1

Первая проблема, с которой я сталкиваюсь, - «if (VertexShaderStream.is_open())» возвращает false. Я добавил блок else, который генерирует фатальную ошибку, когда файл не открыт, и программа останавливается там. –

+1

EDIT: Я исправил эту проблему. Теперь шейдеры компилируются так, как должны (без ошибок). Теперь, когда я пытаюсь использовать программу, ничего не происходит (я получаю простой черный экран). Я добавлю проверку ошибок GL –

+1

Я ПОЛУЧИЛ ЭТО! Шейдеры скомпилированы отлично. Проблема, с которой я столкнулась, была (конечно же) довольно глупой. У меня была двойная буферизация, но я не менял свои окна. –

Смежные вопросы