Hi,

my program works fine on ATI cards but I have problems on Nvidia cards.
I tried Geforce 8400GS with driver 266.58 and it has the problem but with the latest driver it seems to work fine.

I successfully create a FBO with Render Buffer storage of type gl_DEPTH_COMPONENT to store the shadow map:

Code :
            _fbo = gl.GenFramebuffersEXT();
            gl.BindFramebufferEXT(gl.FRAMEBUFFER_EXT, _fbo);
            _renderBuffer = gl.GenRenderbuffersEXT(1)[0];
            gl.BindRenderbufferEXT(gl.RENDERBUFFER_EXT, _renderBuffer);
            gl.RenderbufferStorageEXT(gl.RENDERBUFFER_EXT, gl.DEPTH_COMPONENT, (int) shadowMapSize,
                                      (int) shadowMapSize);
            gl.FramebufferRenderbufferEXT(gl.FRAMEBUFFER_EXT, gl.DEPTH_ATTACHMENT_EXT, gl.RENDERBUFFER_EXT, _renderBuffer);
 
            InitTexture(shadowMapSize, ref _texture);
            gl.FramebufferTexture2DEXT(gl.FRAMEBUFFER_EXT, gl.DEPTH_ATTACHMENT_EXT, gl.TEXTURE_2D, _texture,
                                       0);
 
            gl.DrawBuffer(gl.NONE);
            gl.ReadBuffer(gl.NONE);
The InitTexture() method above initializes the texture:

Code :
        internal static void InitTexture(uint shadowMapSize, ref uint texture)
        {
            gl.GenTextures(1, names);
            texture = names[0];
 
            gl.ActiveTexture(TextureUnit);
            gl.BindTexture(gl.TEXTURE_2D, texture);
 
            gl.TexImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, (int) shadowMapSize, (int) shadowMapSize, 0,
                          gl.DEPTH_COMPONENT, gl.UNSIGNED_BYTE, null);
 
            gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
            gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
            gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP);
            gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP);
            gl.ActiveTexture(gl.TEXTURE0);
 
            gl.BindTexture(gl.TEXTURE_2D, 0);
       }

After the creation the Framebuffer status is gl_FRAMEBUFFER_COMPLETE_EXT.

Then I bind the Framebuffer object and draw my scene.

Now I want to copy the FBO picture on another texture (which have been previously created of the right size and type):

Code :
            gl.BindTexture(gl.TEXTURE_2D, otherTexture);
 
            gl.CopyTexSubImage2D(gl.TEXTURE_2D, 0, x, y, 0, 0, (int) shadowMapSize, (int) shadowMapSize);

After the gl.CopyTexSubImage2D call I have a GL_INVALID_OPERATION error.
Is this a known bug of the driver or am I doing something wrong?