У меня возникли проблемы с конвейером шейдеров OpenGLES. У меня есть шейдер с 3 мундирахНекоторые формы работы другие не
attribute vec4 position;
uniform mat4 modelViewProjection;
uniform vec3 objectColor;
uniform vec2 positionObject;
void main()
{
vec4 pos = vec4(-positionObject.x + objectColor.x, 0, -positionObject.y, 0);
gl_Position = modelViewProjection * (position + pos);
}
modelViewProjection и positionObject работы просто отлично, однако при попытке получить фрагмент шейдера на работу я заметил, что objectColor ничего не делает, поэтому я попытался экспериментировать в вершинном шейдере, а затем в конце концов, выяснилось, что он всегда оставался начальное значение независимо от того, в каком порядке оно определено, какой тип оно, это имя и т.д.
я после стандартной процедуры шейдера трубопровода:
компилирования -> linking -> use program -> get location -> initia Лизе равномерной
и равномерная objectColor даже получает идентификатор, будучи активным равномерным и подсчитано к активной форме, однако всякий раз, когда я пытаюсь изменить это значение всегда остается на нуле.
Вот отрывки кода:
Равномерное расположение:
private void BindUniforms()
{
glUniforms[(int)UNIFORMS_T.MODEL_VIEW_PROJECTION] = GL.GetUniformLocation(glProgramId, "modelViewProjection");
glUniforms[(int)UNIFORMS_T.OBJECT_POSITION] = GL.GetUniformLocation(glProgramId, "positionObject");
glUniforms[(int)UNIFORMS_T.OBJECT_COLOR] = GL.GetUniformLocation(glProgramId, "objectColor");
}
Rendering часть 1:
protected override void OnRenderFrame(FrameEventArgs e)
{
base.OnRenderFrame(e);
GL.ClearColor(0f, 0f, 0f, 1f);
GL.Clear((uint)All.ColorBufferBit);
GL.UseProgram(shader.glProgram);
GL.UniformMatrix4(shader.GetUniform(Shader.UNIFORMS_T.MODEL_VIEW_PROJECTION), 1, false, ref modelViewProjection.Row0.X);
GL.Uniform3(shader.GetUniform(Shader.UNIFORMS_T.OBJECT_COLOR), 1, 1, 1);
lattice.Draw();
SwapBuffers();
}
Rendering часть 2:
public void Draw()
{
//Update Uniform
GL.Uniform2(shader.GetUniform(Shader.UNIFORMS_T.OBJECT_POSITION), 1, ref m_vec2Position.X);
GL.Uniform3(shader.GetUniform(Shader.UNIFORMS_T.OBJECT_COLOR), 1, 1, 1);
var colVal = new Vector3(-1, -1, -1); //becomes 0, 0, 0
var posVal = new Vector2(-1, -1); //becomes arbitrary value
GL.GetUniform(shader.glProgram, shader.GetUniform(Shader.UNIFORMS_T.OBJECT_COLOR), ref colVal.X);
GL.GetUniform(shader.glProgram, shader.GetUniform(Shader.UNIFORMS_T.OBJECT_POSITION), ref posVal.X);
// Update attribute values.
GL.BindBuffer(All.ArrayBuffer, glVBO);
GL.VertexAttribPointer((int)Shader.ATTRIBUTES_T.VERTEX_POSITION, 3, All.Float, false, sizeof(float) * 3, IntPtr.Zero);
GL.EnableVertexAttribArray((int)Shader.ATTRIBUTES_T.VERTEX_POSITION);
GL.BindBuffer(All.ElementArrayBuffer, glVBI);
GL.DrawElements(All.LineStrip, Indices.Length, All.UnsignedShort, IntPtr.Zero);
GL.BindBuffer(All.ArrayBuffer, 0);
GL.BindBuffer(All.ElementArrayBuffer, 0);
}
Я скорее всего, неправильно петь что-то тривиальное, но я не могу найти его ... Использование Xamarin с Android.