opengl - 复制 mipmap 时 OpenGL 直通着色器跳过像素
问题描述
我正在尝试使用简单的直通着色器将纹理级别从一个纹理复制到另一个纹理:
#version 330 core
in vec2 TexCoord;
out vec4 FragColor;
uniform sampler2D scene;
uniform int level;
void main()
{
FragColor = textureLod(scene, TexCoord, level);
}
我将图像渲染到 FBO,生成 mipmap,然后将该 FBO 逐层复制到另一个 FBO,然后将其中一个层渲染到默认帧缓冲区,始终使用最基本的直通着色器。使用以下数据执行复制:
float quadVertices[] = {
// positions texture Coords
//---------------- -----------
-1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
-1.0f, -1.0f, 0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 0.0f, 1.0f, 1.0f,
1.0f, -1.0f, 0.0f, 1.0f, 0.0f,
};
这在复制级别 0 和 1 时效果很好:
我可以将第 2 层从一个 FBO 直接复制到默认帧缓冲区,而且看起来还不错。
但是由于某种原因,当先复制到另一个 FrameBuffer,然后再复制到默认帧缓冲区时,看起来有些问题:
所有这些副本都使用相同的直通着色器。着色器如何在某些情况下工作,而在其他情况下却不行?
我的过滤器设置为 GL_LINEAR 和 GL_LINEAR_MIPMAP_LINEAR。我根本没有收到任何 OpenGL 错误报告。
解决方案
推荐阅读
- selenium - 量角器 browser.manage().logs().get('performance') 未检索服务器响应正文
- java - UriComponentsBuilder - 如何替换一些查询参数并删除未使用的?
- java - Apollo GraphQL Android 无法解决“无法解析 http 响应”错误
- html - z-index 会影响线性背景吗?
- unix - 计算文件中存在的日期与今天日期之间的天差
- php - 通过PHP和curl发送短信(无效号码状态400)
- typescript - TypeScript:在泛型中使用命名空间类型参数
- javascript - 快照测试失败
在反应原生和开玩笑 - php - 如何使用php连接wsdl api
- laravel - Laravel 5.6:如何使用查询生成器创建子查询