opengl - 如何在 glium 中填充非 RGB OpenGL 纹理?
问题描述
我使用 OpenGL 着色器进行从 YUV 到 RGB 的颜色转换。例如,在 YUV420P 上,我创建了 3 个纹理(一个用于 Y,一个用于 U,一个用于 V)并使用texture
GLSL 调用来获取每个纹理。然后我使用矩阵乘法来获得 RGB 值。每个纹理都有 format GL_RED
,因为它们只存储 1 个组件。
这一切都适用于 C++。现在我正在使用安全的 OpenGL Rust 库 glium。我正在创建这样的纹理:
let mipmap = glium::texture::MipmapsOption::NoMipmap;
let format = glium::texture::UncompressedFloatFormat::U8;
let y_texture = glium::texture::texture2d::Texture2d::empty_with_format(&display, format, mipmap, width as u32, height as u32).unwrap();
let u_texture = glium::texture::texture2d::Texture2d::empty_with_format(&display, format, mipmap, (width as u32)/2, (height as u32)/2).unwrap();
let v_texture = glium::texture::texture2d::Texture2d::empty_with_format(&display, format, mipmap, (width as u32)/2, (height as u32)/2).unwrap();
看到U
和纹理的大小V
是 Y 纹理的 1/4,正如 YUV420P 所预期的那样。
如您所见,对于我选择的 YUV420P glium::texture::UncompressedFloatFormat::U8
,我认为与GL_RED
.
问题是我不知道如何用数据填充这个纹理。它的write
方法期望可以转换为RawImage2D
. 但是,所有填充方法都RawImage2D
需要 RGB 图像。
我需要一种方法来仅将 Y 填充到第一个纹理,然后仅将 U 填充到第二个纹理,并且仅将 V 填充到第三个纹理。
解决方案
推荐阅读
- android - Android studio:Socket.io 服务器和客户端
- jira - 启动jira提示找不到/root/Tools/tomcat_thank/bin/setclasspath.sh
- php - 仅从以下数组中获取浮点值
- bash - 迭代地找到一个字符串并用bash中表中的相应值替换:问题将输出存储到循环中的变量
- node.js - 当 better-sqlite3 在 package.json 中时,npm install 在 Windows 上失败
- genetic-algorithm - 如果我的 GA 快速收敛到正确的解决方案,如何知道我是否强制收敛太多?
- amazon-web-services - AWS SES 限制请求
- compilation - 如何用多个模块编译 julia?
- javascript - 如何使用 Google Chrome 扩展在网页中插入 HTML
- uml - 我应该设计多少个活动图?