   Difference in nVidia and ATI shader implementation?
  I am writing an OpenGL game engine in C#, and encountered an issue where everything renders blank on ATI Radeon 5770, while it works just fine on my computer (with GeForce 9800)Since this started the second I switched from the fixed function pipeline, there has to be some difference between ATI with either glUseProgram, glUniform etc.So I hope someone has encountered the same issue, and resolved it. Since i don't have a ATI card myself, it's kind of difficult to debug. I have however figured that glGetUniformLocation, glGetAttribLocation works just fine. There might however be issues with either attributes not getting bound, or matrices not getting fed to the shader. But without a Radeon card to test this against it's really hard to debug.So anyone encountered this before?   
  This is most probably an issue with your glsl shader code. NVidia is know to be not so strict about handling syntax errors etc. Try to validate your shader with GLSLvalidate.   ;  Both compilation and linking is successful, glValidateProgram does not report anything at all.I suspect that maybe glUniform or glAttribPointer does not work for some reason (but glGetUniformLocation and glAttribLocation reports values other than -1)I call glUseProgram before i call glUniform* and similar, since the shader tutorial at lighthouse 3D suggested that some drivers might require this.Here is a short, mockup version of what happens extrapolated form the source code:prog = glCreateProgram();vs = glCreateShader (GL_VERTEX_SHADER)fs = glCreateShader (GL_FRAGMENT_SHADER)glCompile(vs);glAttach(vs, prog);glCompile(fs);glAttach(fs, prog);glLinkProgram(prog);glValidateProgram(prog);Material:modelview = glUniformLocation(prog, "modelview_mat");projection = glUniformLocation(prog, "projection_mat");pos_attribute = glAttribLocation(prog, "in_position");normal_attribute = glAttributeLocation(prog, "in_normal");etc.All these return valid valuesRendering:glUseProgram(prog);glBindFragDataLocation(prog, 0, "out_frag");glUniform for all uniformsglBindBuffer(vertex_buffer)glBindBuffer(index_buffer)for all attributes in vertex buffer{  glEnableVertexAttribArray(...);  glVertexAttributePointer(...);}glDrawElements(...);This is obviously not the source code 1:1 but what should be relevant.Maybe i've misunderstood glBindFragDataLocation...   