问题标签 [glsles]

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 投票
1 回答
2670 浏览

opengl-es-2.0 - 在 GLSLES 顶点和片段着色器之间传递变量

每当我查看示例着色器时,似乎这种类型的东西几乎是魔法发生的。有时信息会保存到位置/颜色等特殊位置,但有时片段着色器使用参数以及片段着色器如何知道从哪里获取我无法遵循的数据。

谁能提供一个中等简单的 GLES 着色器,并解释它是如何工作的?

0 投票
2 回答
3376 浏览

android - 使用 OpenGL ES 2.0 进行坐标拾取

我尝试使用 OpenGL ES 2.0 实现坐标拾取功能。我无法实现我在桌面版本中实现的两个版本。

版本 1 是用唯一的颜色渲染每个三角形,它代表三角形的索引,而不是用光线投射计算坐标。此版本不起作用,因为在 OpenGL ES GLSL 版本 1.0 中没有变量 GL_PrimitiveID 也无法进行按位移位。

版本 2 是将坐标渲染为浮点纹理的值,但浮点纹理在 OpenGL ES 2.0 中不可用。

有没有人知道我可以实现什么?我不想对每个三角形都进行光线投射,因为它的性能不高。

感谢您的帮助和任何想法。

0 投票
3 回答
1036 浏览

algorithm - 具有 FP16 限制的 GLSL-ES 随机粒状噪声

我正在尝试编写一个具有严格FP16限制的紧凑而简单的噪声函数。到目前为止,这是我得出的结论,但我认为在操作的某个地方,对于fractsin来说,数字太小了,因为在 GPU 中我必须写这个,因为这些都在FP16限制之内。关于我做错了什么的任何想法?顺便说一句,我不能使用时间变量,也不能采样噪声纹理。我需要正确的功能必须紧凑、小巧且自给自足,并产生简单的颗粒状噪声效果。注意:下一个算法在任何桌面 GPU 卡上都可以正常工作,但在“ MALI 400 MP ”GPU 上完全失败,因为这个算法对浮点值有 FP16 限制。

如果有人可以为GLSL-ES推荐任何其他随机函数,但严格限制FP16,那也很好。我知道其他随机实现,例如单纯形噪声,但这些对于我需要做的事情来说太大而且太慢了。所以PerlinSimplex噪声算法不是一个选择。

0 投票
1 回答
1893 浏览

android - 在 Opengles 2.0 中在平滑着色到平面着色之间切换

我正在使用 opengles 2.0 为 android 中的 3d 应用程序绘制一些模型,但那些

盒状模型看起来太光滑,阴影平滑,我需要球体模型的阴影平滑。

我将 3d 模型导出到 .OBJ 文件中,并从搅拌机中获得平滑的阴影。

现在我的 3d 模型结构有

每个顶点法线。

使用顶点索引数组绘制模型。

由于我的模型的法线是每个顶点的法线,我处理这个问题的计划是创建一个每个面

正常并将我的所有绘图方法重建为不使用顶点索引数组导致它无法执行。

我不想做这个计划,因为顶点索引数组消耗的内存更少。

有没有办法用顶点索引数组使平面平滑,以便像函数一样使用插值变化或其他方式的中间值来制作 GLSL?

感谢您的帮助,并为我糟糕的英语感到抱歉。

0 投票
0 回答
455 浏览

opengl-es - 片段着色器距离精度

我的片段着色器有问题。我想在 2d 中实现每帧照明。我使用distance函数来测量到光源的距离。如果我的对象靠近原点 (0, 0),它可以正常工作。如果我的对象远离那里(比如说 (5000, 0)),那么我的不精确性非常明显。我试过highp但没有帮助。哪个是测量模型坐标中任意点到片段的距离的好方法?

0 投票
1 回答
8734 浏览

java - Mac 上的 GLSL 着色器错误,但 Windows 上没有:无法从 'const int' 转换为 '4-component vector of float'

我是着色器的新手,我昨天开始玩其中的一些。它们在我的 Windows PC 上编译得很好,但是当它们在 Mac 上运行时,两者都有一个错误:

错误:0:14:“=”:无法从“const int”转换为“float 的 4 分量向量”

在 Android 上,只有第二个着色器给了我一个错误。它有上面的错误,提到没有匹配的函数点被重载。

他们使用相同的顶点着色器:

一个片段着色器(Mac 上的错误):

另一个片段着色器(mac和android上的错误):

0 投票
1 回答
1412 浏览

opengl-es - glsl 中的 sampler2DArrayShadow 是如何工作的

我无法理解如何使用 sampler2DAprayShadows 以及它是如何工作的。得到其中的一部分,我们需要使用深度纹理值(GL_DEPTH_COMPONENT)来获得与参考深度的比较结果。但是接下来如何使用返回的浮点值来获取纹素。

参考来自: http ://www.khronos.org/opengles/sdk/docs/manglsl/xhtml/texture.xml

我编写了一个小代码来测试它,如下所示: 我的片段着色器为:

创建 3D 纹理(texdata),并将其绑定为:

0 投票
0 回答
199 浏览

android - 三星 Galaxy Tab 2 上可能的 glsl 编译器错误?

这是取自一些真实代码的示例。这不能在我的三星 Galaxy Tab 2 上编译:

这个想法是参数列表中的“some_macro(FOO)”部分应该扩展为空。相反,这会生成一条错误消息,例如“错误:0:520:'(':语法错误”,我假设它指的是宏调用中的左父级。无参数宏(简单的#define)在同一个地方工作正常.

我并不十分担心必须重构我的代码以避免这种语法,但我想知道是否有人知道这段代码是否应该根据 GLSL ES 规范工作。这在其他设备上编译得很好(比如 Galaxy Note II)。

0 投票
1 回答
424 浏览

opengl-es - 我们可以mipmap深度纹理吗?

我想知道,是否可以对深度纹理进行 mipmap。如果是,那么它将如何工作以及如何使用它。

搜索了很多,但在任何地方都没有得到很好的解释。

0 投票
2 回答
1305 浏览

android - 在 OpenGL ES 中渲染期间编译着色器是一种好的/有效的做法吗?

系统:安卓4.03,OpenGL ES 2.0

问题:在第一帧已经用另一个程序/着色器渲染后调用 glAttachShader 时,某些设备 (Galaxy S3) 崩溃并出现“GL_INVALID_VALUE”错误(错误堆栈中没有更多详细信息)。其他设备(华硕 eee TF101)完全可以。该错误并不总是发生,有时它也是“GL_INVALID_ENUM”。如果我在第一次调用 onDrawFrame 时强制编译所有着色器,它适用于所有(我的)设备。

问题: 是否存在 openGL(ES) 机器无法编译着色器的状态?绑定的缓冲区、纹理或启用的属性数组是否可能会干扰将着色器附加到程序?如果是这样,在附加着色器和链接程序之前必须确保的理想状态是什么?在其他对象已经用其他着色器渲染之后编译着色器是否有效?

背景:我正在开发一个 Android 库,它允许我以更加面向对象的方式使用 openGL 图形(使用“场景”、“材质”、“模型”等对象),最终轻松编写游戏。场景、模型等是在与 GL 上下文不同的线程中创建的。只有当 onDrawFrame 遇到这些对象之一时,它才会在正确的线程中进行缓冲区对象绑定、纹理绑定和着色器编译。我想避免在代码开头编译所有着色器。根据材质、模型和场景的要求组装着色器源(例如:材质:包括凹凸贴图,模型:包括矩阵调色板浏览,场景:包括雾)。当从场景中删除模型时,我将再次删除着色器 - 如果我添加另一个模型,

在这一点上,我试图在不发布代码的情况下尽可能简洁——你可以想象从这个库中提取相关部分是很困难的。