Я не уверен, что от того, что эта проблема, возникающая, я никогда не имел большого опыта работы с шейдерами, так что может быть не связан с фактическим шейдера (скорее всего, проблема заключается не в шейдере)GLSL шейдер мерцающий
у меня этот результат
Фрагмент шейдеры
#version 120
void main(void) {
gl_FragColor[0] = 0.0;
gl_FragColor[1] = 0.0;
gl_FragColor[2] = 0.0;
}
Vertex шейдер
#version 120
attribute vec2 coord2d;
void main(void) {
gl_Position = vec4(coord2d, 0.0, 1.0);
}
Моя оказывать функцию
(define (renderFunc)
(gl:Clear gl:COLOR_BUFFER_BIT)
(gl:UseProgram program)
(gl:EnableVertexAttribArray attribute_coord2d)
(gl:Begin gl:TRIANGLES)
(gl:Vertex3f 0.0 0.8 0)
(gl:Vertex3f -0.8 -0.8 0)
(gl:Vertex3f 0.8 -0.8 0)
(gl:End)
(gl:DisableVertexAttribArray attribute_coord2d)
(glut:SwapBuffers))
И мои INIT функцию
(define (initFunc)
(gl:ClearColor 1 1 1 1)
(gl:Enable gl:TEXTURE_2D)
(gl:Enable gl:LIGHTING)
(gl:Enable gl:BLEND)
(gl:BlendFunc gl:SRC_ALPHA gl:ONE_MINUS_SRC_ALPHA)
(set! program (CreatePorgram (list
(CreateShader gl:VERTEX_SHADER (LoadScript "vs.glsl"))
(CreateShader gl:FRAGMENT_SHADER (LoadScript "vf.glsl")))))
(set! attribute_coord2d (gl:GetAttribLocation program "coord2d"))
(print "attribute_coord2d: " attribute_coord2d)
(print "vbo_triangle: " vbo_triangle)
(print "program: " program)
(print (gl:GetError)))
Не уверен точно, почему, но шейдер получает правильно и так далее загружен. glGetError
не возвращает никаких ошибок, и все работает нормально.
я на основе моего кода на этом уроке, который компилируется и работает отлично на моей машине:
http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Introduction
У меня есть ощущение, что эта ошибка моей быть связано с моей схемы привязок. Когда шейдер привязан к памяти, мы можем освободить источник, отправленный в opengl. Я уверен, что исходный код для шейдера будет освобожден после создания шейдера.
Я довольно потерял, обнаружив, что в моем коде, что я по-другому, я слышал о glUniform, но я считаю, что в моем случае это не имеет большого значения.
Я использовал glBegin
и glEnd
, потому что у меня возникли проблемы с созданием VBOs. Если vbos является обязательным требованием, то я буду уверен, что он работает первым.
Кстати, мы должны видеть черный треугольник вместо треугольника черных точек.
Вот как это выглядит при наложении треугольников hundread. Выбранные черные пиксели не являются полностью случайными. Они фактически образуют какой-то шаблон, в то время как пиксели, которые все еще белые, всегда остаются белыми большую часть времени.
Вы случайно используете курицу с [аллегро яйцом] (http://wiki.call-cc.org/eggref/4/allegro/)? Трудно попытаться воспроизвести что-либо, не зная, с какой реализацией Scheme и с библиотеками вы работаете. –
Я использую Chicken Scheme с модифицированной версией яйца Opengl, я могу подтолкнуть его к github позже сегодня. –
@ ChrisJester-Young в случае, если вам это нравится, я добавил проект и свою работу на github https://github.com/llacroix/chicken-opengl-bindings, а другой проект называется чистотой. Я в основном переводил некоторые учебные пособия в Scheme, и я на самом деле не интриган, чтобы это выглядело как начало долгого путешествия. –