在 OpenGL 着色器的 main 之外进行计算是否合理?

2023-12-10

我有一些类似于以下的顶点着色器代码(这是一个简化的示例):

attribute vec2 aPosition;
attribute vec4 aColor;

varying lowp vec4 vColor;

uniform  vec4 uViewport;
mat4 viewportScale = mat4(2.0 / uViewport.z, 0, 0, 0,    0, -2.0 / uViewport.w, 0,0,    0, 0,1,0,    -1,+1,0,1);

void main() {
  vec2 pos = aPosition;
  gl_Position = viewportScale * vec4(pos, 0, 1);
  vColor = vec4(aColor.rgb*aColor.a, aColor.a);
}

特别是,viewportScale矩阵计算自uViewport制服在主函数之外。从浏览器(WebGL)使用它,它似乎在我测试过的每台机器上都能正常工作......特别是,viewportScale当我更改时矩阵会正确更新uViewport多变的。这样做和在主函数内部进行相同的计算有什么区别吗?我找不到与此相关的任何示例或讨论。

我遇到了一个相关问题这让我对这个问题有点偏执——至少,我想了解到底发生了什么。


这不是 GLSL ES 1.00 中的合法着色器,GLSL ES 1.00 是与 ES 2.0 一起使用的 GLSL 版本。 WebGL 共享相同的 GLSL 定义,但 WebGL 规范中指定了一些例外情况。我在 WebGL 规范中找不到对此的例外,因此我认为该着色器在 ES 2.0 和 WebGL 中都是非法的。

来自 GLSL ES 1.00 规范,第 29 页的“4.3 存储限定符”部分(添加了重点):

不带存储限定符或仅带 const 限定符的全局变量声明可能包含初始化程序,在这种情况下,它们将在执行 main() 的第一行之前初始化。这样的初始化器必须是常量表达式.

第 49 页的“5.10 常量表达式”部分定义了常量表达式是什么。这包括:

以下可能not在常量表达式中使用:

  • Uniforms、属性和变化。

您的情况中的表达式包含一个制服,这使其成为一个非常量表达式。因此它不能用作全局变量的初始值设定项。

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

在 OpenGL 着色器的 main 之外进行计算是否合理? 的相关文章

  • 渲染脚本渲染在Android上比OpenGL渲染慢很多

    背景 我想根据Android相机应用程序的代码添加实时滤镜 但Android相机应用程序的架构是基于OpenGL ES 1 x 我需要使用着色器来自定义我们的过滤器实现 然而 将相机应用程序更新到OpenGL ES 2 0太困难了 然后我必
  • 解决 Three.js / webGL 中的 gl_PointSize 限制

    我正在使用 Three js 创建交互式数据可视化 此可视化涉及渲染 68000 个节点 其中每个不同的节点具有不同的大小和颜色 最初我尝试通过渲染网格来实现此目的 但事实证明这非常昂贵 我当前的尝试是使用 Three js 粒子系统 每个
  • Android中的OpenGL用于视频显示

    是否可以使用 OpenGL 来显示视频并能够在运行时调整视图大小 是的 它的工作原理是通过 glTexSubImage2D 将每个帧作为纹理上传 我已经测试了基于 FFmpeg 的解码器的输出 效果很好
  • OpenGL ES 2.0 中的纹理点?

    我正在尝试在 OpenGL ES 2 0 中为粒子系统实现纹理点 例如点精灵 我遇到的问题是所有点都渲染为实心黑色方块 而不是正确映射纹理 我已经验证 gl PointCoord 实际上返回从 0 0 到 1 0 的 x y 值 这将映射到
  • GL_CULL_FACE使所有对象消失

    我正在尝试在 openGL3 3 中创建一些简单的多边形 我有两种类型的对象 具有以下属性 对象 1 10 个顶点 按顺序在下面列出 存储在GL ARRAY BUFFER并使用GL TRIANGLE FAN v x y z w v 0 0
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • 将自己的结构传递到 opengl es 2.0 着色器中

    我想尝试 OpenGL ES 2 0 编程指南 一书中的照明示例 在着色器中他们制作了两种结构 struct directional light vec3 direction normalized light direction in ey
  • Cocos2d - 将 GLImageProcessing 效果应用于 CCSprite

    苹果的oplenglGL图像处理 http developer apple com library ios samplecode GLImageProcessing Introduction Intro html加载图像并应用图像调整 亮度
  • 径向渐变绘制性能 - OpenGL-ES 可以改进吗?

    我正在开发一个图像处理应用程序 它将径向渐变叠加在从照片库加载的图像上 在屏幕上 我有一个滑块可以动态地增大 减小径向渐变的半径 我发现模拟器上的性能很好 但在 iPhone 3G 或 3GS 上就很糟糕了much移动滑块时重绘速度较慢 我
  • 使用 JOGL 和 Android OpenGL 编写可移植 Java 应用程序

    我计划编写一款可以在 PC 和 Android 上运行的 Java 3D 游戏 不幸的是 这两个平台似乎没有通用的 OpenGL API API 是否有显着差异 有没有办法在两个版本中使用相同的 3D 代码 这是不是一个好主意 Androi
  • OpenGL:伽玛校正图像看起来不线性

    我使用 OpenGL 进行渲染 当我将线性值写入默认帧缓冲区 没有任何伽玛校正 时 它们在我的显示器上显示为线性 这违背了我认为我所知道的关于伽马校正的一切 如下所述 http gamedevelopment tutsplus com ar
  • OpenGL - 我应该存储属性/统一位置吗?

    Are glGetUniformLocation and glGetAttribLocation耗时 哪种方式更好 Call glGetAttribLocation or glGetUniformLocation每次我需要它 将位置存储在变
  • 从 Android 模拟器使用 WebView WebGL

    据我了解 WebGL 仅在 Android Lollipop 中的 WebView 更新 Play 商店中的 WebView 组件 和较新版本 无需 Play 商店更新 中受支持 但是 我有一个使用 Android 7 1 1 的模拟器 并
  • Google 的 Android OpenGL 教程是否教授了错误的线性代数?

    在帮助另一位用户解决有关该问题的问题后响应触摸事件 http developer android com training graphics opengl touch htmlAndroid教程 我下载了源代码 并且对我所看到的感到非常困惑
  • cocos2d-iphone-2.1-beta2 中的 CCScrollLayer 问题

    您好 我遇到了最新 cocos2d beta 中 CCScrollLayer 中所述的问题 主要是在编译时我得到 use of undeclared identifier CC GL BLEND 有没有办法解决这个有人发现的问题 您可以安全
  • OpenGL-ES、iPhone 和间歇性错误:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES (0x8CD6)

    我有一个在 UIView 中使用 OpenGL ES 和 EAGLContext 的应用程序 非常类似于 Apple 的 GLPaint 示例代码应用程序 我在 iPhone 4 上看到这个错误 但在 iPad 上却没有 这可能很重要 大多
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • 为什么 GDB 调试器不断冻结 Xcode 4?

    这真是一个奇怪的错误 我正在开发一个使用相机源的 iPhone 项目 并通过 OpenGL 着色器运行它以对其应用效果 然而 每次我在代码中简单地创建一个新的 GLfloat 时 调试器都会在启动时冻结 我无法复制和粘贴文本 因为整个 XC

随机推荐

  • 用于匹配任何和所有 HTML data-* 属性的通用 CSS 选择器 [重复]

    这个问题在这里已经有答案了 是否可以匹配所有具有data 属性使用only CSS 以下是我想要匹配的属性示例 data scope data sessionlink data visibility tracking 我可以 data sc
  • Python 压缩运行长度编码

    我正在尝试了解游程编码 但我在网上发现了这个挑战 但我无法做到 它要求您编写一个名为compression strg 的压缩函数 该函数将长度为64的二进制字符串strg作为输入 并返回另一个二进制字符串作为输出 输出二进制字符串应该是输入
  • Python 子进程在什么情况下会收到 SIGPIPE?

    我正在阅读子进程模块部分中有关 Popen 类的 Python 文档 我遇到了以下代码 p1 Popen dmesg stdout PIPE p2 Popen grep hda stdin p1 stdout stdout PIPE p1
  • 为什么 IUpdateSession::WebProxy 不能在 Windows 10 上运行?

    我有一些内部代码 可以使用 Windows Update API 执行 Microsoft Update 扫描 由于某些客户端无法直接访问互联网 因此我明确设置了WebProxy属性指向我们的本地代理服务器 在测试期间 在 Windows
  • 如何在 Swift 3.0 中使用 Alamofire 解析 JSON,无需任何第三方库

    这里我想通过url解析JSON 这是 url 上可用的实际 JSON 数据 所以我需要解析它并使用 Alamofire 在我的应用程序中读取 但我做不到 我的 url 中的 JSON 数据 main date 2017 01 11 USDA
  • 将 JSON 数据解析为 Excel 工作表

    我正在尝试使用以下代码将 JSON 数据作为表格提取到 Excel 工作表中 Sub test Dim httpObject As Object Set httpObject CreateObject MSXML2 XMLHTTP sURL
  • 如何在按钮单击时调用小部件的 onUpdate 方法?

    基本上 我有一个简单的应用程序小部件 它显示文件中的值并每 24 小时更新一次 它工作正常 但后来我想将刷新按钮添加到我的小部件中 并且每次单击该按钮时我想调用 onUpdate 我一直在寻找一些答案 但它们似乎与我想做的事情不符 应用程序
  • Android SQLite 更新/插入

    我想要UPDATE我的桌子上有一排 WHERE 键 最后选择的如果具有该键的行不存在 我想要INSERT it 我可以得到UPDATE如果该行已经存在 则可以工作 但不会INSERT如果丢失 我已经尝试过这些 第一个正确更新 但不插入 St
  • Elmah 无法使用 ASP.NET 网站

    我尝试在我的 asp net 网站上使用 elmah 但每当我尝试访问http localhost 端口 elmah axd我得到资源未找到异常 我的 web config 如下
  • Git Config 仅排除一个分支的文件

    我想在我的公共分支中排除一个名为 config dbconfig js 的文件 我用它推送到 github 但仍然能够从 master 推送到我的 noester com git 存储库以推送到生产环境 我将配置文件更改为 core rep
  • Typescript 给出“找不到模块‘xmlhttprequest’的声明文件。”

    Using import XMLHttpRequest from xmlhttprequest 在 Node 上 当我使用以下命令进行编译时 出现以下错误tsc index ts 4 col 32 错误 7016 QF 可用 找不到模块 的
  • JVM 缺少 Rhino

    我有一个使用 ScriptEngine 处理一些 javascript 的项目 并且在我的机器上运行良好 但是当我将项目的 jar 发送到服务器时 我发现服务器的 JVM 没有内置 Rhino 当该代码调用 new ScriptEngine
  • 发送至:网络无法访问

    我有两台机器正在测试我的代码 一台工作正常 另一台我遇到了一些问题 我不知道为什么会这样 我正在使用一个对象 C 作为我项目的网络部分 在服务器端 我这样做 为了清楚起见 删除了错误检查 res getaddrinfo NULL port
  • 在 Android 中完成父级和当前活动

    我有 3 项活动 活动 A 会导致活动 B 活动 B 又可以返回活动 A 或启动活动 C 但是 如果我在活动 C 中按返回 应用程序应该关闭 总结 活动 A 启动活动 B 紧迫Back活动 B 应该导致 A 活动 B 开始活动 C 紧迫Ba
  • 使用星号 * 量词的奇怪结果

    我正在尝试在一个简单的字符串上练习星号 量词 但是虽然我只有两个字母 但结果包含第三个匹配项 结果出来了 array 1 0 gt array 3 0 gt string 1 a 1 gt string 0 2 gt string 0 据我
  • 如何在不同的系统文化中转换日期时间?

    我需要转换DateTime不同文化格式中的值 无论系统中设置如何 没有选择任何特定的时区进行转换 任何区域性格式都使用转换日期时间值 DateTimeFormatInfo ukDtfi new CultureInfo CultureInfo
  • MFMailComposeViewController 和隐私 - 隐藏“收件人:”字段?

    我正在创建我的第二个 iPhone 应用程序 并且我已经使用 MFMailComposeViewController 包含了一个反馈表单 这可以正常显示和工作 但我不确定是否希望所有用户都能看到我的电子邮件地址 有没有办法将 to 字段设置
  • CSS - 渐变文本阴影

    I want to make a gradient text shadow like this Is it possible to do that with CSS or and Javascript Thanks for help 你可以
  • 如何在Asp.Net MVC中导出到Excel?

    SCRIPT function PostExportValues meter id range type id start date end date returnUrl var meter meter selection val 0 aj
  • 在 OpenGL 着色器的 main 之外进行计算是否合理?

    我有一些类似于以下的顶点着色器代码 这是一个简化的示例 attribute vec2 aPosition attribute vec4 aColor varying lowp vec4 vColor uniform vec4 uViewpo