我目前正在制作阴影贴图,并且我不希望静态对象在灯光的阴影贴图(深度纹理)中的每一帧都进行渲染。我想要做的是在纹理A中只渲染一次静态物体,然后在onDrawFrame中,用纹理A清除纹理B,每帧绘制动态物体。
所以我测试了是否可以直接使用 glTexSubImage2D 深度缓冲。
GLES32.glGenTextures(1,depthTexture,0);
GLES32.glBindTexture(GLES32.GL_TEXTURE_2D,depthTexture[0]);
GLES32.glTexStorage2D(GLES32.GL_TEXTURE_2D,1,GLES32.GL_DEPTH_COMPONENT24,1024,1024);
GLES32.glTexParameteri(GLES32.GL_TEXTURE_2D, GLES32.GL_TEXTURE_MAG_FILTER,GLES32.GL_NEAREST);
GLES32.glTexParameteri(GLES32.GL_TEXTURE_2D, GLES32.GL_TEXTURE_MIN_FILTER,GLES32.GL_NEAREST);
GLES32.glTexParameteri(GLES32.GL_TEXTURE_2D, GLES32.GL_TEXTURE_WRAP_S,GLES32.GL_CLAMP_TO_EDGE);
GLES32.glTexParameteri(GLES32.GL_TEXTURE_2D, GLES32.GL_TEXTURE_WRAP_T,GLES32.GL_CLAMP_TO_EDGE);
/*CLEARING DATA*/
v = ByteBuffer.allocateDirect(1024*1024*4).order(ByteOrder.nativeOrder()).asFloatBuffer();
for(int i=0;i<1024*1024;i++){
v.put(1);
}
GLES32.glTexSubImage2D(GLES32.GL_TEXTURE_2D,0,0,0,1024,1024,GLES32.GL_DEPTH_COMPONENT,GLES32.GL_FLOAT,v);
/*CLEARING DATA*/
我还为定向光的阴影贴图删除了 glClear()。
然而,这似乎不起作用。一切都和不使用 glTexSubImage2D 一样。
编辑 (我发现它导致了 1282 错误)