glTexSubImage2D 直接到帧缓冲区

时间:2021-02-14 12:15:44

标签: opengl-es

我目前正在制作阴影贴图,并且我不希望静态对象在灯光的阴影贴图(深度纹理)中的每一帧都进行渲染。我想要做的是在纹理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 错误)

0 个答案:

没有答案
相关问题