问题标签 [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.
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 文件夹中正确引用它们以便它们可见?
opengl - RAM 中的 glTexImage2D 内存使用情况(与 FBO 结合使用)
当glTexImage2D
用于将纹理附加到帧缓冲区对象 (FBO) 时,我发现RAM中的内存使用量上升。看起来纹理不仅由 OpenGL 在 GPU 上分配,而且在主内存中。为什么会这样?
它有什么用吗?
可以防止主内存中的内存分配吗?
我正在使用以下 GL 调用将纹理附加到 FBO:
使用glTexStorage2D
如下(而不是glTexImage2D
调用)时也会发生同样的情况:
为什么会这样?我不明白为什么必须在 RAM 中创建内存,而不仅仅是在 GPU 上。有更好的/其他方法吗?
opengl - TextureArray 与 image2D/Computeshader
我目前正在尝试将多个纹理绑定到 Computeshader。因为只有少量有限的图像单元可用,所以我想到了绑定 a TextureArray
,其优点是使用更多纹理进行更少的绑定。据我所知TextureArrays
,Sampler 只能用sampler2DArrays
. 但是,我正在使用图像,所以我可以使用imageLoad()/imageStore()
. 是否有解决方法可以使用TextureArrays
,image2D
或者我是否被迫使用其他方法,例如Texture Atlases
?
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
?
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的结束:
提前致谢!
image-processing - 在 WebGL 中对整数纹理进行采样会返回奇怪的值
我正在尝试通过在片段着色器中应用窗口调平,从 WebGL2 中的 16 位数组缓冲区渲染灰度图像。我生成的纹理如下:
并尝试使用以下片段着色器中的数据:
但这只会呈现黑屏。实际上,经过一些调试,我发现所有像素texture(u_image, v_texCoord)
的值为零,并且(alpha)字段的值非常大(2^29 ~ 2^30)。我试过改变着色器的精度,但结果是一样的。rgb
a
为了缩小问题范围,我尝试了一种不同的方法,将 16 位整数拆分为gl.RGBA4
,每个 RGBA 通道中包含 4 位:
并将 RGBA 值组合回片段着色器中的 16 位整数。
这个版本很好地呈现了预期的图像,尽管由于转换,结果有点嘈杂。我也尝试过其他一些格式,浮点类型的很好,整数类型的格式都不起作用。所以我认为程序的其他部分都很好。我想知道我的程序有什么问题。
webgl2 - 在着色器程序之间传递数据
好的,我会尽可能简单。我想在着色器程序之间传递数据。我目前正在使用 readPixels 来做到这一点,但我觉得它可能会减慢操作速度,我正在探索更快的选择。
我的程序做什么:
- program1 对画布进行渲染。
- program2 在我想传递给 program1 的着色器中执行了一些精彩的操作。
我的问题:
- 是否可以使用program2中的vbo并将其传递给program1进行渲染?从我在下面给出的链接中听起来,您不能跨上下文共享数据,这意味着来自一个缓冲区的数据不能用于另一个缓冲区。但也许我错过了一些东西。
- 我相信本文中提到的方法可以通过渲染到画布然后使用 texImage2D 更新 program1 来完成我正在寻找的工作(将帧缓冲区数据从一个 WebGLRenderingContext 复制到另一个?)。我对么?如果是这样,这会比使用 readPixels 更快吗?(我问是因为如果使用 texImage2D 大致相同,我不会打扰)。
提前感谢任何回答的人。
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 重新包装在新数组上来很好uBuffer
地vBuffer
修复byte[]
崩溃ByteBuffer
。
但是我正在不必要地复制数据,并且每秒复制 30 倍。
我可以不将ByteBuffer
s 包裹在带有偏移量的连续字节 [] 上,并出于某种原因在 OpenGL 中使用它们吗?我真的必须一直复制吗?
texture2D()
通过删除涉及违规采样器的调用,我检查了这不是我的着色器文件中的问题。- 即使只是在我的构造中添加 1 的偏移量,
yBuffer
它也会在 0 的情况下崩溃,它可以正常工作。(rawYUVData.length 始终 > yBufferSize + 1)
c++ - write_imagef 似乎没有改变任何值
我正在尝试使用 opencl 编写纹理数据并使用 opengl 显示它。目标是比较具有和不具有互操作性的性能。但现在我无法生成纹理本身。我首先想尝试在没有互操作性的情况下做到这一点:
cl 缓冲区初始化和内核创建:
内核执行(发生在循环中):
OpenCL 内核:
我为类似问题找到的所有解决方案都与 glTexImage2D 中使用的内部格式和格式(在 OpenGL 渲染部分的开头使用)有关,所以这里实际上可能是同样的问题,但我没有看到我做错了什么。
预期的结果将是一个红色的四边形。但它只显示初始化的纹理(在这种情况下为白色。如果用 0.0f 初始化,则为黑色。如果用 0.4f 初始化,则为灰色)。通过将 writeImage 也加入队列,我能够缩小内核似乎根本没有更改缓冲区的范围。如果 writeImage 被注释掉,它会显示一个黑色四边形。所以读取缓冲区似乎有效,因为在这种情况下它读取一个空缓冲区(导致黑色四边形)。
事实强化了这一点,花哨的输出(在内核执行部分的末尾使用)仅打印初始化值(例如 1s 或 0.4s。或者在不使用 writeImage 时打印 0s)