gpt4 book ai didi

Android NDK SDL2 OpenGL ES 2 阴影映射(定向)- 可能吗?

转载 作者:行者123 更新时间:2023-11-30 05:32:25 24 4
gpt4 key购买 nike

尝试在 OpenGL 上使用定向阴影贴图。需要生成一个深度纹理,它不是 渲染缓冲区(需要能够从中读取)以供将来通过。在 Android 上运行时不断获取 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT(作为 glCheckFramebufferStatus 的结果)(在 OSX 上运行时不会出错)。

这是我的代码:

 //Shadow
//gen tex
gl_shadow_bogus_texture_active_n = 7;
glActiveTexture(GL_TEXTURE0+gl_shadow_bogus_texture_active_n);
glGenTextures(1, &gl_shadow_bogus_texture_buff_id);
glBindTexture(GL_TEXTURE_2D, gl_shadow_bogus_texture_buff_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,tex_dim.x,tex_dim.y,0,GL_RGB,GL_UNSIGNED_BYTE,0);

//gen depth
gl_shadow_texture_active_n = 4;
glActiveTexture(GL_TEXTURE0+gl_shadow_texture_active_n);
glGenTextures(1, &gl_shadow_texture_buff_id);
glBindTexture(GL_TEXTURE_2D, gl_shadow_texture_buff_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT16,1024,1024,0,GL_DEPTH_COMPONENT,GL_FLOAT,0);

glGenFramebuffers(1, &gl_shadow_framebuffer_id); //gen fb
glBindFramebuffer(GL_FRAMEBUFFER, gl_shadow_framebuffer_id); //bind fb
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gl_shadow_bogus_texture_buff_id, 0); //attach tex
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, gl_shadow_texture_buff_id, 0); //attach depth

请注意,整个 gl_shadow_bogus_texture_buff_id 事情(颜色纹理的生成和绑定(bind))只是尝试填充帧缓冲区,从而消除错误。我实际上并不关心颜色数据。

进一步注意,“color tex gen/bind”在 mac 上不是必需的,可以用 glDrawBuffer(GL_NONE)glReadBuffer(GL_NONE) 代替.但是我不能用 android 中的那些编译...

最佳答案

您没有模板附件,这可能是您收到 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 错误的原因。尽管规范中没有明确说明,但大多数驱动程序在存在深度附件时都需要模板附件。但是,根据实现情况,您可能会遇到问题,因为将 GL_DEPTH_COMPONENT16 与模板附件一起使用可能不是受支持的组合(事实上,根据我的经验,通常不是)。每个驱动程序只需要支持至少一种组合——不幸的是,没有办法准确查询组合可能是什么。你基本上只需要猜测并希望它成功。

大多数 Android 实现都支持 packed depth stencil format DEPTH24_STENCIL8_OES ,并且扩展隐含地支持深度是可以采样的纹理。使用它可能会取得更大的成功(但不能保证成功!)。

关于Android NDK SDL2 OpenGL ES 2 阴影映射(定向)- 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com