I’m sorry for the double post, but I managed to get past the memory error. Switching glVertexPointer and glColorPointer to VertexAttribPointer seems to have done the trick. I still can’t get any rendering done, but at least I don’t get a memory error now. Id still appreciate any help, since I have no idea whats wrong:
Here’s my viewport setting up function:
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
Gl.glViewport(0, 0, 800, 600);
Here’s my shader setting up function. I cut parts dealing with glsl compiling and linking errors. Compiling and linking seems to work all right(I get correct errors, when I mess my shaders up, and no error when I don’t), but I’m not sure about the attribute location binding.
programObject = Gl.glCreateProgramObjectARB();
vertexShader = Gl.glCreateShaderObjectARB(Gl.GL_VERTEX_SHADER_ARB);
fragmentShader = Gl.glCreateShaderObjectARB(Gl.GL_FRAGMENT_SHADER_ARB);
loadVertexShader();
loadFragmentShader(); //Those functions load vertex and fragment shader sources into vertexShaderSource and fragmentShaderSource
Gl.glShaderSourceARB(vertexShader, 1, new string[1] { vertexShaderSource }, new int[1] { vertexShaderSource.Length });
Gl.glShaderSourceARB(fragmentShader, 1, new string[1] { fragmentShaderSource }, new int[1] { fragmentShaderSource.Length });
Gl.glCompileShaderARB(vertexShader);
Gl.glCompileShaderARB(fragmentShader);
Gl.glAttachObjectARB(programObject, vertexShader);
Gl.glAttachObjectARB(programObject, fragmentShader);
Gl.glDeleteObjectARB(vertexShader);
Gl.glDeleteObjectARB(fragmentShader);
Gl.glBindAttribLocation(programObject, 0, "Position");
Gl.glBindAttribLocation(programObject, 1, "Color");
Gl.glLinkProgramARB(programObject);
Those are my shaders. Vertex shader:
in vec3 Position;
in vec4 Color;
out vec4 color;
void main() {
vec4 pos=vec4(Position.xyz,1.0);
gl_Position=pos+vec4(0.0,0.0,-5.0,0.0);
color=Color;
}
Fragment shader:
in vec4 color;
out vec4 fragment_color;
void main() {
fragment_color=color;
}
Here’s my data setting function. Again, the data is correct, since it worked in 2.1, but I’m not sure about attribute pointers. I simply changed Gl.glVertexPointer and Gl.glColorPointer to Gl.glVertexAttribPointer with corresponding indices - 0 and 1(Position and Color attributes passed to shaders are of those indices).
Gl.glGenVertexArrays(1, out VAOadress);
Gl.glBindVertexArray(VAOadress);
Gl.glGenBuffers(1, out VBOadress);
Gl.glBindBuffer(Gl.GL_ARRAY_BUFFER, VBOadress);
Gl.glBufferData(Gl.GL_ARRAY_BUFFER, (IntPtr)getSize() , null, Gl.GL_STATIC_DRAW);
Gl.glBufferSubData(Gl.GL_ARRAY_BUFFER, (IntPtr)0, (IntPtr)64, new float[16] { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 });
Gl.glBufferSubData(Gl.GL_ARRAY_BUFFER, (IntPtr)64, (IntPtr)64, new float[16] { 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 });
Gl.glBufferSubData(Gl.GL_ARRAY_BUFFER, (IntPtr)128, (IntPtr)64, new float[16] { -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 });
Gl.glEnableVertexAttribArray(0);
Gl.glVertexAttribPointer(0,3, Gl.GL_FLOAT,false, 64, (IntPtr)0);
Gl.glEnableVertexAttribArray(1);
Gl.glVertexAttribPointer(1, 4, Gl.GL_FLOAT, false, 64, (IntPtr)48);
Gl.glBindVertexArray(0);
And last, but not least(:P) my rendering function:
Gl.glUseProgramObjectARB(programObject);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
Gl.glBindVertexArray(VAOadress);
Gl.glEnableVertexAttribArray(0);
Gl.glEnableVertexAttribArray(1);
Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 3);
Gl.glDisableVertexAttribArray(0);
Gl.glDisableVertexAttribArray(1);
Gl.glBindVertexArray(0);
Gl.glUseProgramObjectARB(0);