Search code examples
c++opengltexture2dshadow-mapping

OPENGL Texture2D manipulation directly/indirectly


Following this tutorial, I am performing shadow mapping on a 3D scene. Now I want to manipulate the raw texel data of shadowMapTexture (see the excerpt below) before applying this using ARB extensions

//Textures
GLuint shadowMapTexture;  
...
...

**CopyTexSubImage2D** is used to copy the contents of the frame buffer into a 
texture. First we bind the shadow map texture, then copy the viewport into the 
texture. Since we have bound a **DEPTH_COMPONENT** texture, the data read will 
automatically come from the depth buffer.

//Read the depth buffer into the shadow map texture
glBindTexture(GL_TEXTURE_2D, shadowMapTexture);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, shadowMapSize, shadowMapSize); 
  • N.B. I am using OpenGL 2.1 only.

Solution

  • Tu can do it in 2 ways:

    float* texels = ...;
    glBindTexture(GL_TEXTURE_2D, shadowMapTexture);
    glTexSubImage2D(GL_TEXTURE_2D, 0, x,y,w,h, GL_DEPTH_COMPONENT, GL_FLOAT, texels);
    

    or

    Attach your shadowMapTexture to (write) framebuffer and call:

    float* pixels = ...;
    glRasterPos2i(x,y)
    glDrawPixels(w,h, GL_DEPTH_COMPONENT, GL_FLOAT, pixels);
    

    Don't forget to disable depth_test first in above method.