为什么我无法将此纹理统一附加到我的 GLSL 片段着色器?

2024-06-23

在我的 Mac 应用程序中,我根据来自所连接相机的 YUV 4:2:2 数据定义了一个矩形纹理。使用标准顶点和纹理坐标,我可以将其绘制到屏幕上的矩形区域,没有任何问题。

但是,我想使用 GLSL 片段着色器在 GPU 上处理这些图像帧,但在将矩形视频纹理作为统一的片段传递给片段着色器时遇到问题。当我尝试这样做时,纹理只是显示为黑色。

着色器程序编译、链接并通过验证。我从着色器程序收到制服的正确地址。其他制服(例如浮点值)会正确传入,并且片段着色器会响应这些值的更改。片段着色器接收正确的纹理坐标。我还在我的代码中大量使用了 glGetError() ,并且在任何地方都没有看到错误。

顶点着色器如下:

void main()
{
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

    gl_FrontColor = gl_Color;
    gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
}

片段着色器如下:

uniform sampler2D videoFrame;

void main()
{
    gl_FragColor = texture2D(videoFrame, gl_TexCoord[0].st);
}

这应该只是在我的矩形几何体上显示纹理。

相关绘图代码如下:

static const GLfloat squareVertices[] = {
    -1.0f, -1.0f,
    1.0f, -1.0f,
    -1.0f,  1.0f,
    1.0f,  1.0f,
};

const GLfloat textureVertices[] = {
    0.0, videoImageSize.height,
    videoImageSize.width, videoImageSize.height,
    0.0, 0.0,
    videoImageSize.width, 0.0
};

CGLSetCurrentContext(glContext);

if(!readyToDraw)
{
    [self initGL];
    readyToDraw = YES;
}


glViewport(0, 0, (GLfloat)self.bounds.size.width, (GLfloat)self.bounds.size.height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); 

glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glEnable(GL_TEXTURE_2D);

glGenTextures(1, &textureName);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_RECTANGLE_EXT, textureName);

glTexImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, GL_RGBA, videoImageSize.width, videoImageSize.height, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, videoTexture);  

glUseProgram(filterProgram);    

glUniform1i(uniforms[UNIFORM_VIDEOFRAME], 0);   

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glTexCoordPointer(2, GL_FLOAT, 0, textureVertices);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

[super drawInCGLContext:glContext pixelFormat:pixelFormat forLayerTime:interval displayTime:timeStamp];

glDeleteTextures(1, &textureName);

此代码驻留在 CAOpenGLLayer 中,其中超类的-drawInCGLContext:pixelFormat:forLayerTime: displayTime:只需运行glFlush().

使用如下代码读取统一地址:

uniforms[UNIFORM_VIDEOFRAME] = glGetUniformLocation(filterProgram, "videoFrame");

正如我所说,如果我注释掉glUseProgram() and glUniform1i()线,这个纹理矩形绘制正确。将它们留在里面会导致绘制一个黑色矩形。

什么可能阻止我的纹理统一传递到我的片段着色器中?


不确定您使用的 GLSL 版本,但从 1.40 开始,有以下类型sampler2DRect专门用于访问非二次幂纹理。Might是你正在寻找的,但是我不知道在 glsl 1.40 之前如何处理矩形纹理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我无法将此纹理统一附加到我的 GLSL 片段着色器? 的相关文章

  • GCC 4.7/4.8 作为 Xcode 的 C/C++ 编译器

    我现在正在开发一个 C 项目 我希望使用 C 11 功能 在这个项目中 我正在使用该库NTL用于数论的东西 由于 Xcode 具有舒适自动完成功能 我使用 Xcode 编写代码 并且 NTL 库与标志 lntl 静态链接 现在 我希望使用一
  • DropDelegate Safari 拖动图像

    我正在尝试实施DropDelegate模式以允许将图像拖到我的视图中并加载它们 这对于取景器中的图像效果很好 但是当将图像从 safari 拖到我的视图中时 这不起作用 我注意到typeIdentifier or UTType所提供的信息
  • OS X bash:目录名

    我想创建一个简单的 bash 脚本来在 OS X 上启动 Java 程序 文件名 文件路径和直接工作文件夹都包含空格 当我这样做时 bin sh cd dirname 0 I get usage dirname path 我也尝试过在各种不
  • OpenGL 中的 VBO 到底是什么?

    我正在尝试了解 OpenGL 背后的理论 目前正在研究 VBO 到目前为止我的理解是 当我们声明一系列顶点时 比如说形成一个三角形基元的 3 个顶点 我们基本上不会将它们存储在任何地方 它们只是在代码中声明 但是 如果我们想将它们存储在某个
  • 我可以在 Mac OS X 上将 enthought python 重新链接到新版本的 openssl 吗?

    今天早上 我在 Mac OS X 10 6 8 上使用 EPD 7 3 时遇到了与 SSL 相关的问题 当我运行 pip 版本 1 3 1 时 我得到 pip install requests Downloading unpacking r
  • Mac OS X 的自动热键替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 如何获取片段的当前颜色?

    我正在尝试了解 GLSL 中的着色器 并且找到了一些有用的资源和教程 但我一直在寻找一些应该是基本且微不足道的东西 我的片段着色器如何检索当前片段 你通过说设置最终颜色gl FragColor whatever 但显然这是一个仅输出值 如何
  • 子类化 NSSlider:需要解决丢失鼠标向上事件的问题(Cocoa OSX)

    我正在尝试对 NSSlider 进行子类化以创建一个称为滚轮的控件 基本上我需要的是一个滑块 它总是从中间开始 当它移动到左侧或右侧时 它会经常发送通知 由可以设置的属性确定 通知其容器其当前值 然后当您放开旋钮 它会回到中间 我希望实现将
  • 为什么在 MAC OSX 上编译简单的 mysql c 应用程序时不断收到未定义的符号?

    我正在使用 MACOS 并尝试编写一个 测试 mysql 应用程序 该应用程序仅测试与本地数据库的连接 include
  • 如何阻止我的应用程序设置“隔离”位?

    从 OS X 10 7 3 开始 我的文本编辑器就在它接触的任何文件上设置 隔离 位 我的文本编辑器设计用于处理 shell 脚本 如果设置了隔离位 则无法从命令行执行 shell 脚本 直到您在 Finder 中双击它并浏览 此应用程序是
  • bash - 从文本文件中删除多行不同的文本

    我正在处理大量日志文件 并且大多数日志文件都有大量被记录多次的重复字符串 为了使与此类事情没有太多关系的其他人 也为我自己 轻松查看日志 我想制作一个脚本来删除一些可能对其他人造成 误报 的文本行 嘿管理员 我多次出现这些错误 gt 叹息
  • GCC、字符串化和内联 GLSL?

    我想使用宏字符串化来声明内联 GLSL 着色器字符串 define STRINGIFY A A const GLchar vert STRINGIFY version 120 n attribute vec2 position void m
  • OpenGL 中的像素间隙从何而来?

    我遇到的问题是 渲染场景中有一些像素 似乎丢失 看不见 因此与我的透明颜色相同 颜色 有趣的是 只有当 MSAA 关闭时才会发生这种情况 我的第一个想法是 这可能与以下事实有关 所有三角形都是重叠的 并且被投影矩阵以某种方式扭曲 但这些伪像
  • 错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379

    我试图允许我的nodeJs docker 映像与我的redis docker 映像 Mac OS X 环境 之间进行通信 NodeJs Dockerfile FROM node 4 7 0 slim EXPOSE 8100 COPY nod
  • 使用 pip 安装软件包时出现“SSL 证书验证失败”

    我正在尝试使用 pip 安装适用于 python 的 Scrapy 包 以及其他包 我尝试使用 python 3 和 python 2 进行安装 我已经安装 升级了 setuptools 如下所示 pip3 install upgrade
  • Apple doc的GCD生产者-消费者解决方案错误?

    在 Apple 并发编程指南的 从线程迁移 部分中 有 改变生产者 消费者实施 http developer apple com library ios documentation General Conceptual Concurrenc
  • iPhone 到 Mac 开发

    我是一名 iPhone 开发人员 非常了解该框架 随着 Mac 应用商店即将推出 我想了解有关 Mac 开发的更多信息 有没有好的指南 教程 等等 帮助过渡 我环顾四周并没有发现太多 谢谢您的帮助 您基本上需要了解之间的区别UIKit an
  • 推荐用于 Delphi 棋盘游戏的 2D Sprite 引擎? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于 Delphi 精灵引擎 我应该考虑哪些选择 我知道 GLScene 安道尔 2D 我还缺少什么吗 最好是依赖 OpenGL 仅 Di
  • OS X 终端上 Vim 开关的永久语法

    我使用终端来 vim 进入现有的和新的程序 我讨厌这样一个事实 我总是需要介入 syntax on在命令行上使语法变得丰富多彩 有谁知道如何确保我的终端始终以彩色语法启动 Put syntax on在你的 vimrc file
  • 如何在 Swift Playground 中将文本转换为 OSX 语音

    我正在尝试学习如何为 OSX 进行文本转语音 notiOS 在 Swift 中 我有一个带有代码的游乐场 import Cocoa let synth NSSpeechSynthesizer synth startSpeaking Hell

随机推荐

  • Class.getResource 和 ClassLoader.getSystemResource:是否有理由选择其中之一?

    我都看到了Class getResource and ClassLoader getSystemResource用于在 Java 中定位资源 有什么理由更喜欢其中一个而不是另一个 加载资源有多种方式 每种方式的含义略有不同 ClassLoa
  • 协作投票算法的用户分布

    我的应用程序 实际上是一个游戏 的用户回答问题即可获得积分 问题由其他用户提供 由于数量有限 我无法亲自检查所有内容 因此我决定将过滤过程众包给用户 玩家 规则很简单 每个用户都会看到一个问题来评价好 坏 不确定 当问题被评为 差 5 次时
  • 在 SQL Developer 中设置 sybase DB 连接?

    我们可以使用 SQL Developer 连接到 sybase 数据库服务器吗 如果是的话我们需要进行哪些配置设置 我们可以在Oracle目录中使用相同的tnsname ora文件还是需要单独安装sybase客户端来获取连接信息 在 Ora
  • 客户端设置了 multipart/form-data 请求的文件部分的内容类型错误

    我正在尝试发送multipart form data使用以下 JavaScript 和 jQuery var formData new FormData formData append projectName projectNameInpu
  • SRC_URI 在 bitabake 配方中不起作用

    我创建了一个用于安装的 bitbake 配方https pypi python org pypi Adafruit GPIO 1 0 3 https pypi python org pypi Adafruit GPIO 1 0 3蟒蛇包 以
  • 使用制表符作为空格时删除制表符

    我知道一般的制表符与空格的关系由来已久 并且主要取决于个人喜好 坚持团队的风格 我只是想问一个有关在 Visual Studio 中使用空格的实际问题 关于选项卡的某些事情让我烦恼 当我们是一个小团队时 我不介意更改为空格 这对于首先编写代
  • 核心数据实体关系在启动之间不会保存

    我正在编写一个应用程序 它有四个主要实体 它们都通过关系链接 有些是一对一 有些是一对多 初始加载时 三个实体从本地存储的 XML 文件加载数据到应用程序 其中一个实体从 Web 下载 XML 并从中加载数据 当应用程序加载时 它会执行检查
  • Mercurial:应用从稳定命名分支到开发分支的错误修复更改

    我的仓库中有这两个命名分支 稳定且开发 我的问题是如何将稳定版中更改的错误修复补丁复制到开发分支 我真的很想在框架内执行此操作 而不是使用任何扩展 EDIT 我为这个问题设置了赏金 因为我真的想要解决方案 有一个很好的解决方案 但中途被搁置
  • 如何统计MONGODB中所有唯一值? [复制]

    这个问题在这里已经有答案了 date 2017 09 04 description DD from my employer1 amount 1000 33 date 2017 09 06 description DD from my emp
  • 此版本的 OSX 无法执行必要的 dSYM 转换

    31merror could not complete submission of dSYM at Users XXUSERXX Library Developer Xcode DerivedData ProjectName flcouee
  • 使用 Google 帐户作为登录...下一步是什么?

    我正在开发一个 Android 应用程序 它将有一个类似 api 的服务器端 而且这个应用程序将有用户登录机制 我想使用 google fb twitter 帐户作为登录信息 因为该应用程序的用途非常社交化 我已经阅读过有关使用手机中存储的
  • .Net 中忽略 PC 区域和语言设置

    我知道我并不孤单 但我还没有找到解决方案 我的电脑区域和语言设置均为英语 英国 但 Net 使用美国格式的日期和货币 我检查了机器配置和 Web 配置 没有全球化设置 我不想添加它们 还有我错过的其他设置吗 您使用 ASP NET 标记 我
  • $.Post 不包含任何回复

    我有一个 php来自另一台处理数据的服务器的文件 该数据已制成表格 所以每当我使用调用此页面时 post如果参数正确 它的反应就不会是什么 我检查了我的代码 也许标题是对此负责的 我实际上想要的是返回我的表格数据 以便我可以将其填充到另一个
  • JavaScript 重定向 - 新窗口

    我正在尝试使用 Javascript 从空白 iframe 内部创建一个重定向 该重定向将定向到新窗口或选项卡内的 URL 更具体地说 我试图使 Facebook 选项卡指向我公司的网页 而不是将页面加载到选项卡的 iframe 内 该 i
  • 无法在 servlet 过滤器中写入新响应

    我正在尝试读取当前响应并尝试用新数据覆盖响应 但目前我还无法这样做 我总是以 GetWriter 已经被调用的异常结束 这就是我想做的 我想读取响应 修改它并在过滤器中写入新的响应 我无法正常执行此操作 因为该过程是由 swagger sp
  • HTML 日期时间本地更改事件?

    有没有办法处理 日期时间选择 事件
  • wordpress 利用浏览器缓存

    当我使用 W3 Total Cache 并正确启用所有内容时 不明白为什么 PageSpeed 对 利用浏览器缓存 的评分很差 https developers google com speed pagespeed insights url
  • 使用 Python 捕获 TCP 数据包

    我尝试使用 dpkt 和 pcap 通过 Python 捕获 HTTP 下载 代码看起来像 pc pcap pcap iface for ts pkt in pc handle packet pkt def handle packet pk
  • 尽管 python selenium 中的文档可用,但元素不可见

    页面链接 https contacts google com u 1 pageId none https contacts google com u 1 pageId none Desired 我想通过单击附图中突出显示的 SVG 插入符号
  • 为什么我无法将此纹理统一附加到我的 GLSL 片段着色器?

    在我的 Mac 应用程序中 我根据来自所连接相机的 YUV 4 2 2 数据定义了一个矩形纹理 使用标准顶点和纹理坐标 我可以将其绘制到屏幕上的矩形区域 没有任何问题 但是 我想使用 GLSL 片段着色器在 GPU 上处理这些图像帧 但在将