问题标签 [glteximage2d]

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 回答
104 浏览

javascript - A-Frame - 导入图像问题的路径 - 从 Web 源更改为本地项目

我在这里部署了一个可用的 A-Frame 站点:https ://clevrar.co.za/robben-island-demo

这是使用 IdeaSpace CMS 创建的。

我已经下载了该站点,以便尝试向其中添加一个 service-worker 脚本(我对此部分很好,不需要那里的帮助),它工作得非常好并且符合预期,除了在由于源指向在线域,因此未显示场景。请参阅此处的部署尝试:https ://boundless-hole.surge.sh/和此处的错误:

错误截图

目前我本地项目中图片的路径是:public/assets/user/photospheres/

如何在 index.html 文件夹中正确引用它们以便它们可见?

0 投票
0 回答
593 浏览

opengl - RAM 中的 glTexImage2D 内存使用情况(与 FBO 结合使用)

glTexImage2D用于将纹理附加到帧缓冲区对象 (FBO) 时,我发现RAM中的内存使用量上升。看起来纹理不仅由 OpenGL 在 GPU 上分配,而且在主内存中。为什么会这样?
它有什么用吗?
可以防止主内存中的内存分配吗?

我正在使用以下 GL 调用将纹理附加到 FBO:

使用glTexStorage2D如下(而不是glTexImage2D调用)时也会发生同样的情况:

为什么会这样?我不明白为什么必须在 RAM 中创建内存,而不仅仅是在 GPU 上。有更好的/其他方法吗?

0 投票
1 回答
358 浏览

opengl - TextureArray 与 image2D/Computeshader

我目前正在尝试将多个纹理绑定到 Computeshader。因为只有少量有限的图像单元可用,所以我想到了绑定 a TextureArray,其优点是使用更多纹理进行更少的绑定。据我所知TextureArrays,Sampler 只能用sampler2DArrays. 但是,我正在使用图像,所以我可以使用imageLoad()/imageStore(). 是否有解决方法可以使用TextureArraysimage2D或者我是否被迫使用其他方法,例如Texture Atlases

0 投票
1 回答
348 浏览

opengl - glTexImage2D() 参数和生成帧缓冲区

根据opengl的参考页,glTexImage2D的结构是这样的:

据我所知,最后 3 个参数是函数应该如何解释由const GLvoid * data

同时,我正在研究帧缓冲区的主题。在此链接https://learnopengl.com/Advanced-Lighting/HDR的“浮点帧缓冲区”部分中,作者创建了一个帧缓冲区的颜色附件,如下所示

我的问题是,他为什么给 GL_FLOAT 作为参数GLenum type?如果无论如何,const GLvoid * data是否NULL需要使用 GL_FLOAT?我首先认为它与 相关GL_RGBA16F,但 16 位是 2 个字节,浮点数是 4 个字节,所以我想它根本不相关。

此外,在本教程之前,作者曾经制作这样的颜色附件:

在这种情况下,他为什么要使用GL_UNSIGNED_BYTE参数GLenum type

0 投票
0 回答
416 浏览

react-native - expo 上的 webgl 纹理给出了黑屏

我第一次尝试 webGL,事情是我正在使用 expo-gl 包在 Expo 上工作,旨在构建一个用于照片编辑的过滤器组件。到目前为止,我已经能够成功地创建一个上下文。创建着色器时一切正常(我可以渲染一个三角形、两个三角形等......)当我尝试将图像加载为纹理时出现问题,我没有收到任何错误,但我得到的只是黑屏模拟器和手机(都是安卓)。我已经检查了 powOf2 图像和 image.onload,并且我为 gl.texImage2D 做了一个 console.log,但没有定义。对于这个问题,我真的很感激任何见解或帮助。我将我认为与此问题相关的代码分为 4 个部分。

1.shaders(模板文字):

2.ReactNative(expo) 状态和生命周期:

3.gl上下文:

4.纹理的代码,以及_onContextCreate的结束:

提前致谢!

0 投票
1 回答
771 浏览

image-processing - 在 WebGL 中对整数纹理进行采样会返回奇怪的值

我正在尝试通过在片段着色器中应用窗口调平,从 WebGL2 中的 16 位数组缓冲区渲染灰度图像。我生成的纹理如下:

并尝试使用以下片段着色器中的数据:

但这只会呈现黑屏。实际上,经过一些调试,我发现所有像素texture(u_image, v_texCoord)的值为零,并且(alpha)字段的值非常大(2^29 ~ 2^30)。我试过改变着色器的精度,但结果是一样的。rgba

为了缩小问题范围,我尝试了一种不同的方法,将 16 位整数拆分为gl.RGBA4,每个 RGBA 通道中包含 4 位:

并将 RGBA 值组合回片段着色器中的 16 位整数。

这个版本很好地呈现了预期的图像,尽管由于转换,结果有点嘈杂。我也尝试过其他一些格式,浮点类型的很好,整数类型的格式都不起作用。所以我认为程序的其他部分都很好。我想知道我的程序有什么问题。

0 投票
2 回答
1003 浏览

webgl2 - 在着色器程序之间传递数据

好的,我会尽可能简单。我想在着色器程序之间传递数据。我目前正在使用 readPixels 来做到这一点,但我觉得它可能会减慢操作速度,我正在探索更快的选择。

我的程序做什么:

  1. program1 对画布进行渲染。
  2. program2 在我想传递给 program1 的着色器中执行了一些精彩的操作。

我的问题:

  1. 是否可以使用program2中的vbo并将其传递给program1进行渲染?从我在下面给出的链接中听起来,您不能跨上下文共享数据,这意味着来自一个缓冲区的数据不能用于另一个缓冲区。但也许我错过了一些东西。
  2. 我相信本文中提到的方法可以通过渲染到画布然后使用 texImage2D 更新 program1 来完成我正在寻找的工作(将帧缓冲区数据从一个 WebGLRenderingContext 复制到另一个?)。我对么?如果是这样,这会比使用 readPixels 更快吗?(我问是因为如果使用 texImage2D 大致相同,我不会打扰)。

提前感谢任何回答的人。

0 投票
1 回答
422 浏览

opengl - 在 OpenGL 中创建纯色纹理

我有一个关于在没有文件的情况下创建纹理的问题。我的目标是制作一个将 vec3 颜色作为输入并返回该纹理的纹理 ID 的函数。

这是我到目前为止所拥有的,但它给出了带有随机混杂颜色条纹的奇怪输出:

这是它的一个示例(请注意,它适用于从加载的文件生成的常规纹理): 生成纹理的奇怪输出

0 投票
0 回答
174 浏览

android - Android OpenGL - glTexImage2D 导致崩溃使用 ByteBuffer 包裹在字节 [] 与偏移

问题:当且仅当没有偏移量时,将包含图像数据的包装传递给我对我有用-否则ByteBuffer(如果有偏移量集)它会无用地崩溃,例如:byte[]GLES20.glTexImage2D(...)ByteBuffer


背景:我有一个byte[]720p 图像的 YUV (I420) 数据 - 我需要将其作为 3 个单独的 s 读取出来ByteBuffer以传递给具有 3 个不同 sampler2D 通道(每个缓冲区 1 个通道)的 OpenGL 着色器。

理想情况下,由于所有信息都在内存中,我将创建三个 ByteBuffers 包装不同的部分,byte[]如下所示:

然后在我的渲染器代码中,我glTexImage2D还调用了 OpenGL 三次:

这是崩溃的。我可以通过将上面的内容复制到新的 s 中,然后将 s 重新包装在新数组上来很好uBuffervBuffer修复byte[]崩溃ByteBuffer

但是我正在不必要地复制数据,并且每秒复制 30 倍。

我可以不将ByteBuffers 包裹在带有偏移量的连续字节 [] 上,并出于某种原因在 OpenGL 中使用它们吗?我真的必须一直复制吗?

  • texture2D()通过删除涉及违规采样器的调用,我检查了这不是我的着色器文件中的问题。
  • 即使只是在我的构造中添加 1 的偏移量,yBuffer它也会在 0 的情况下崩溃,它可以正常工作。(rawYUVData.length 始终 > yBufferSize + 1)
0 投票
1 回答
84 浏览

c++ - write_imagef 似乎没有改变任何值

我正在尝试使用 opencl 编写纹理数据并使用 opengl 显示它。目标是比较具有和不具有互操作性的性能。但现在我无法生成纹理本身。我首先想尝试在没有互操作性的情况下做到这一点:

cl 缓冲区初始化和内核创建:

内核执行(发生在循环中):

OpenCL 内核:

我为类似问题找到的所有解决方案都与 glTexImage2D 中使用的内部格式和格式(在 OpenGL 渲染部分的开头使用)有关,所以这里实际上可能是同样的问题,但我没有看到我做错了什么。

预期的结果将是一个红色的四边形。但它只显示初始化的纹理(在这种情况下为白色。如果用 0.0f 初始化,则为黑色。如果用 0.4f 初始化,则为灰色)。通过将 writeImage 也加入队列,我能够缩小内核似乎根本没有更改缓冲区的范围。如果 writeImage 被注释掉,它会显示一个黑色四边形。所以读取缓冲区似乎有效,因为在这种情况下它读取一个空缓冲区(导致黑色四边形)。

事实强化了这一点,花哨的输出(在内核执行部分的末尾使用)仅打印初始化值(例如 1s 或 0.4s。或者在不使用 writeImage 时打印 0s)