问题标签 [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 回答
1630 浏览

three.js - 为什么我在 Three.js 中实现置换贴图会断开球体两极的顶点?

我正在尝试通过将带有柏林噪声的置换贴图应用于球体来创建小行星。除了球体的两极被扭曲之外,一切都按预期工作。看起来好像两极上的顶点是断开的。

Frontview:看起来像预期的那样 小行星前视图 Topview:看起来很丑;-) 小行星顶视图

起初,我认为这与我的置换贴图有关,并且我将它应用在球面上,但如果我将它应用在立方体上,面之间也会有间隙。

我不确定,我能做些什么来缩小这些差距。在后面的步骤中,置换贴图一般是通过渲染到纹理并使用随机种子生成噪声来生成的,因此我不能使用 Blender 或 Photoshop 等外部程序来修改置换贴图。我在着色器中做错了什么,还是这是“正常”行为?我能做些什么来避免这种情况吗?我读到了立方体贴图。这可能是一个解决方案吗?如果是这样,是否有 Three.js r57 或更高版本的工作示例?

这是我的着色器代码:

这是制服和球体代码:

我刚刚看到,代码使用二十面体而不是球体,但同样的事情也发生在球体上。

0 投票
2 回答
3179 浏览

hlsl - 将混合 cg/hlsl 着色器转换为 glsl es

我正在寻找一种可以将 cg/hlsl 混合着色器转换为 glsl es 着色器的工具。我尝试了 hlsl2glsl,它不理解关键字“extern”,尽管它是一个可行的 hlsl 关键字并且已经查看了 cgc,但没有找到关于如何为 glsl es 编译的文档。

谢谢

0 投票
1 回答
558 浏览

ios - iPad Opengl ES 程序在模拟器上运行良好,但在设备上运行良好

对于该设备,我所有的着色器都可以正常加载,除了一个。对于这个着色器程序,当我调用 glGetProgramInfoLog(...); 时,我得到“片段程序无法使用当前上下文状态编译”错误,然后是顶点着色器的类似错误。

顶点着色器:

片段着色器:

我不确定发生了什么,特别是因为我有一个与上面完全相同的类似程序,并添加了纹理坐标。此外,当我使用 glGetShaderiv(theShader, GL_COMPILE_STATUS, &result) 链接程序时,我检查了每个着色器的编译状态,它们都检查得很好。有任何想法吗?

0 投票
1 回答
588 浏览

opengl-es-2.0 - GLSL 着色器程序是如何在图形硬件管线上执行的?

随着我越来越多地玩弄 OpenGL ES 2.0 和 GLSL,我开始质疑着色器程序是如何在硬件上执行的。我很好地理解了顶点和片段着色器程序背后的概念,但是关于它们如何在金属上工作仍然很不清楚。在阅读有关 GPU 的信息时,我经常遇到术语管道,并且 GPU 具有给定数量的管道。

我了解管道的作用,它提供一组顶点(表示几何图元)并使用给定参数执行顶点着色器,并通过一些基于这些输出执行操作的固定功能硬件发送顶点着色器的输出。顶点着色器还输出在图元的每个片段上插值的值并输入到片段着色器中,从而使用通用算法轻松执行大量复杂的渲染。

但这是否意味着如果 GPU 有 n 条管道,那么在任何给定时刻,n 条管道中的每一条都可以执行单个几何图元的着色器程序的实例?

我一直在阅读 OpenGL ES 2.0 编程指南(根据 kindle 大约读了 60%),但也许我仍在不断发展的理解导致我错过了这个问题的答案。

我问这个问题的一个实际原因是关于应该或不应该在 CPU 而不是 GPU 上完成哪些工作。例如,如果我正在操作单个更新和渲染线程,那么在 CPU 上执行矩阵到矢量乘法是否明智,它必须在所有对象的一行中完成?或者将执行多个几何图元绘制的着色器程序外包给 GPU 会更好吗?

我正在优化一些代码,以使用 VBO 在屏幕上绘制许多四边形,而不是为每个四边形单独绘制调用。但由于这被认为是数组渲染,我需要将每个顶点的所有矩阵发送到 GPU,即使四边形的每 4 个顶点的 mvp 矩阵都是相同的,这可以被认为是对带宽的影响。但是,如果着色器程序是同时执行的,而不是在我的 CPU 上的渲染线程上一个接一个地执行,也许这是一个值得权衡的选择。但是我没有那种水平的专业知识可以说一种或另一种方式。

0 投票
1 回答
126 浏览

android - Galaxy SII 和 SIII 上的非常慢的分数运算

我的地形使用着色器,它本身使用四种不同的纹理。它在 windows 和 linux 机器上运行良好,但在 android 上它在两个星系上都只有 ~25FPS。我认为,纹理是问题,但不是,因为看起来问题在于我划分纹理坐标并使用 frac 获得平铺坐标的部分。没有它,我得到 60FPS。

注意:还有一些用于光照计算和雾的代码,但没有使用。我指出了未注释时会导致大量滞后的行。我尝试使用地板并手动计算小数部分,但滞后是相同的。可能有什么问题?

编辑:现在这是我不明白的。

这个:

运行良好。

这个:

在 SIII 上运行平均。

这个:

滞后...

这个:

嗯 5FPS 还是比我预想的好...

那么给了什么?为什么会这样?据我了解,这不应该有任何区别。但确实如此。还有一个巨大的。

0 投票
1 回答
1876 浏览

opengl-es-2.0 - OpenGL(和 OpenGL ES)是否支持预处理器“续行”字符?

我的 OpenGL ES 片段着色器中有一个宏,如下所示:

这在我的桌面和各种 Android 设备上运行良好。(是的,我需要摆脱显式流控制,但它得到了我现在想要的输出。)问题是一些设备无法编译这个着色器,错误如下:

(第 257 行是"if ( x"行,第 260 行是"} \"行,这里没有显示 263,这是CHECK宏的第一次使用。在着色器的其他地方没有其他全大写“DELTA”的实例。)

我认为这个错误意味着他们在换行符上绊倒了?这真的是只有某些 GLSL 编译器支持的东西吗?

我正在构建我的着色器,#version 100以便在桌面和 Android 之间尽可能兼容。

0 投票
1 回答
1550 浏览

javascript - webgl 阴影映射 gl.DEPTH_COMPONENT

嘿,我正在尝试使用此示例在 webgl 中实现阴影映射: 教程

我想做的是

初始化深度纹理和帧缓冲区。使用简单的着色器将场景绘制到该帧缓冲区,然后使用具有深度纹理作为纹理的框绘制新场景,以便我可以使用其他着色器查看深度图。

我认为我的颜色纹理看起来不错,但不能让我使用全白的深度纹理。

我把代码放在Dropbox上: 源代码 大部分在文件索引html webgl_all js objects js中

有一些我目前没有使用的灯光着色器。

真的希望有人能帮助我。

来自丹麦的问候

0 投票
2 回答
1705 浏览

opengl-es - Webgl GLSL / 打开 GL ES 2.0

我目前正在将使用 OpenGLES 2.0 为 android 和 IOS 设备编写的引擎移植到 webgl,我偶然发现了使用着色器的问题。大多数为移动应用程序编写的着色器都不适用于 webGL。例子 :

(在编译之前,预处理器将 $ 替换为一个值)

顶点着色器:

片段着色器:

它在 OpenGLES 上就像一个魅力,但在 webGL 上,我收到了关于 const float 被初始化为非常量值的报告。在声明 const 时,我所做的操作总是返回相同的结果。

有什么我可以做的,还是我必须重写所有着色器以匹配 WebGL GLSL 细节?

0 投票
1 回答
2094 浏览

opengl-es - GLSL ES 2.0 - UBO 的替代品?

从我读到的invariantGLSL ES 2.0 的关键字来看,这听起来有点像可以被认为是统一缓冲区对象提供的功能的同义词,因为多个着色器程序可以“共享”提供的数据各种输入。我想知道的是这是否可以以任何方式用作 UBO 的替代品。由于 OpenGL ES 2.0 似乎不提供对 UBO 的支持,并且如果invariant关键字不能作为替代,是否可以使用扩展或其他方式获得类似的功能?

0 投票
1 回答
422 浏览

android - 三星 Galaxy S3 上的 GLSL 错误中的 length()

我在 GLSL 中为一个安卓游戏制作了一个着色器。在这个着色器中,我必须计算当前像素和 FX 中心之间的长度

此着色器包含以下行:

MCPosition 是一个 highp vec2,它包含当前像素的坐标。center 是一个 highp vec2,它包含 FX 的中心

此着色器在许多设备(Galaxy Nexus、kindle fire、...)上运行良好,但在三星 Galaxy S3 上,当预期结果超过 256 时,length(tc) 返回不正确的值,就像它将所有浮点值管理为 mediump 一样。

有人可以解释一下为什么吗?