问题标签 [glsl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6241 浏览

iphone - iPhone 使用什么版本的 GLSL?

我知道 iPhone 使用的是 OpenGL ES 2.0,但我不知道底层语言 GLSL 的版本。是 1.3、1.4、2.0 还是其他?

0 投票
4 回答
10879 浏览

performance - 如何在没有 ("<<" || ">>") 运算符的情况下有效地执行位移?

我正在开发一个 OpenGL ES 2.0 着色器,并且我有紧密打包的数据,例如两个字节块内的三个 5 位无符号整数。要解压这些数据,我显然需要移位,但 OpenGL ES 着色语言不支持此功能(参见第 29 页http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf

因此,我执行了一些 *2 和 /2 操作来模拟位移。

有谁知道更有效/更优雅的方式来做到这一点?有什么我不知道的技巧吗?

谢谢!

0 投票
2 回答
11154 浏览

opengl-es - OpenGL ES 2.0 中的纹理点?

我正在尝试在 OpenGL ES 2.0 中为粒子系统实现纹理点(例如点精灵)。我遇到的问题是所有点都呈现为纯黑色方块,而不是正确映射纹理。

我已经验证 gl_PointCoord 实际上返回从 0.0 到 1.0 的 x/y 值,这将映射到整个纹理。不过,texture2D 调用似乎总是返回黑色。

我的顶点着色器:

还有我的片段着色器:

有问题的纹理是 16x16。我能够成功地将这个纹理映射到其他几何体,但由于某种原因不能映射到点。

我的平台是摩托罗拉 Droid,运行 Android 2.2。

0 投票
3 回答
4101 浏览

c++ - GLM + STL:运算符 == 缺失

我尝试在 STL 容器中使用 GLM 矢量类。只要我不尝试使用<algorithm>. 大多数算法依赖于==没有为 GLM 类实现的运算符。

有人知道解决此问题的简单方法吗?无需(重新)实现 STL 算法 :(

GLM是一个很棒的数学库,在 c++ 中实现了 GLSL 函数

更新

我刚刚发现 glm 实际上在扩展中实现了比较运算符(here)。但是我如何在 stl 中使用它们?

更新 2

这个问题已经被这个问题所取代:如何在stl算法中使用glm的operator==?

0 投票
2 回答
8211 浏览

opengl - GLSL - 为什么保留按位运算符?使用按位运算(模拟按位的浮点运算)有什么好的替代方法

我正在 WebGL 中进行一些实验,其中一个是 XOR 效果片段着色器。由于某种原因,所有按位运算符都保留在 GLSL 中,并且在使用时会导致编译器错误。为什么这些运营商是非法的?我可以用什么代替 | 在这种情况下?

0 投票
3 回答
1769 浏览

macos - 我需要做什么才能让这个 OpenGL 极好的顶点着色器在 OS X 上编译?

OpenGL Superbible 第 5 版最近发布,它记录了 OpenGL 3.3。不幸的是,OS X 只支持 OpenGL 2.1 和 GLSL 1.20 版。他们为您提供的第一个重要的顶点着色器无法编译并显示错误消息:

着色器是这样写的:

0 投票
5 回答
39072 浏览

opengl - GLSL 中的多个纹理 - 只有一个有效

我的问题是在 GLSL 着色器中可以访问多个纹理。这就是我正在做的事情:

着色器:

因此,我只是根据统一变量在两个颜色值之间进行选择。很简单(这是一个测试),但是当 blend <= 0.5 时,我不是预期的行为,而是全黑。

OpenGL代码:

着色器在这一切之前被编译和绑定。该过程中的所有健全性检查都表明一切正常。 正如我所说,col着色器程序中的值反映了纹理中的片段;的值为col2黑色。显示的纹理是最后一个活动纹理 - 如果我将最后一个更改glBindTexture为 bind Texture0.Handle,则纹理会更改。根据 Bahbar 的回复修复。

事实上,场景渲染为全黑,即使我添加了类似gl_FragColor.r = blend;着色器最后一行的内容。但是,如果我注释掉调用glActiveTexture(GL_TEXTURE1);,着色器会再次工作,并且相同的纹理会出现在 sampler0 和 sampler1 中。

这是怎么回事?有问题的行glActiveTexture(GL_TEXTURE1);, 似乎工作得很好,随后的glGetIntegerv(GL_ACTIVE_TEXTURE, &anint). 为什么它会如此可怕地破坏一切?我已经尝试升级我的显示驱动程序。

0 投票
5 回答
2006 浏览

opengl - ATI 显卡上的 GLSL 3D 噪声实现

我已经尝试了很多不同的策略来获得可用的噪声函数,但它们都不起作用。那么,如何在 GLSL 中的 ATI 显卡上实现 perlin 噪声?

以下是我尝试过的方法: 我尝试将排列和渐变数据放入 GL_RGBA 1D 纹理并调用 texture1D 函数。然而,一次调用此噪声实现会导致 12 次纹理调用并杀死帧率。

我尝试将排列和梯度数据上传到统一的 vec4 数组中,但编译器不会让我在数组中获取元素,除非索引是常量。例如:

将给出一个编译器错误:

错误:0:43:使用临时数组间接索引时不支持。

这意味着我只能像这样检索数据:

我也尝试将数组直接编程到着色器中,但我遇到了同样的索引问题。我听说 NVIDIA 显卡实际上会允许这种方法,但 ATI 不会。

我尝试制作一个根据输入索引返回特定硬编码数据点的函数,但是该函数被调用 12 次并有 64 个 if 语句,使得链接时间难以忍受。

ATI 不支持 glsl 的“内置”噪声函数,我不能只预先计算噪声并将其作为纹理导入,因为我正在处理分形。这意味着我需要在运行时计算噪声的无限精度。

所以最重要的问题是……

如何?

0 投票
3 回答
1327 浏览

opengl - 使用 GLSL 对顶点数组进行广告牌?

我有一个三角形的向量数组,它基本上由一堆需要广告牌的正方形组成。看起来像的东西

之后,glDrawArray使用适当的参数调用以绘制总共 10 个正方形。

是否可以编写一个着色器程序,可以将存在于同一个顶点数组上的所有这些多边形分别放在广告牌上?

0 投票
2 回答
86 浏览

opengl-es - 关于变量构造函数的问题:

如果...

那么下面代表什么?

谢谢 。