由于某些原因,试图在第一个以外的任何一方画画似乎都没有效果。
这就是我创建立方体贴图的方式:
GLuint frameBuffer;
glGenFramebuffers(1,&frameBuffer);
GLuint texture;
glGenTextures(1,&texture);
glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);
glBindTexture(GL_TEXTURE_CUBE_MAP,texture);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_R,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_DEPTH_TEXTURE_MODE,GL_LUMINANCE);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_COMPARE_FUNC,GL_LEQUAL);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_COMPARE_MODE,GL_COMPARE_R_TO_TEXTURE);
for(int i=0;i<6;i++)
{
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X +i,0,GL_DEPTH_COMPONENT,size,size,0,GL_DEPTH_COMPONENT,GL_FLOAT,0);
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_CUBE_MAP_POSITIVE_X +i,texture,0);
glDrawBuffer(GL_NONE);
}
从立方体贴图写入/读取:
glBindFramebuffer(GL_DRAW_FRAMEBUFFER,frameBuffer);
glBindTexture(GL_TEXTURE_CUBE_MAP,texture);
float *pixels = new float[size *size];
for(int j=0;j<(size *size);j++)
pixels[j] = 1.f;
for(int i=0;i<6;i++)
{
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_CUBE_MAP_POSITIVE_X +i,texture,0);
glTexSubImage2D(
GL_TEXTURE_CUBE_MAP_POSITIVE_X +i,
0,
0,0,
size,size,
GL_DEPTH_COMPONENT,
GL_FLOAT,
&pixels[0]
);
}
glBindFramebuffer(GL_READ_FRAMEBUFFER,frameBuffer);
for(int j=0;j<6;j++)
{
glFramebufferTexture2D(GL_READ_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_CUBE_MAP_POSITIVE_X +j,texture,0);
glReadPixels(0,0,size,size,GL_DEPTH_COMPONENT,GL_FLOAT,&pixels[0]);
for(int k=0;k<(size *size);k++)
{
if(pixels[k] != 1.f)
{
// Incorrect pixel
break;
}
}
}
所有这一切应该是将立方体贴图的所有边的所有像素的深度分量设置为1然后再次读出它们。但是,在读取像素时,似乎只对第一面有效,对于所有其他边,深度成分为0。