gpt4 book ai didi

opengl - 在 WebGL 中重现 Cinder 故障

转载 作者:行者123 更新时间:2023-12-04 19:57:05 28 4
gpt4 key购买 nike

在 Cinder 中使用 OpenGL 时会出现视觉故障,如果可能的话,我想在 WebGL 中重现。

效果来自初始化具有大小但没有任何数据的纹理。基本上它在 GPU 上显示垃圾内存(最终是桌面的碎片化变色图像等)

对于我正在处理的特定 WebGL 显示非常有用的效果。

下面的效果在this page上讨论,如果您向下滚动到 gl::Texture header :

http://libcinder.org/docs/v0.8.5/images_buffer.jpg

在 WebGL/js 上下文中有任何线索可以实现这一点吗?(如果它们在浏览器中产生效果,我完全愿意使用其他资源/框架)

最佳答案

在任何情况下都无法在 WebGL 中生成此内容。

在 OpenGL 和 OpenGL ES(WebGL 所基于的)中,分配内存的初始化不需要任何行为,这种“故障”效应是未定义行为的结果。

WebGL 实际上定义了缓冲区/纹理内存的额外要求以防止安全漏洞,其中之一是分配的内存总是初始化为0。因此,这种行为在 WebGL 中定义的,并且它的定义方式使您的“故障”效果是不可能的。

WebGL Specification - Version 1.0.2 - March 2013

4 Security

4.1 Resource Restrictions

WebGL resources such as textures and vertex buffer objects (VBOs) must always contain initialized data, even if they were created without initial user data values. Creating a resource without initial values is commonly used to reserve space for a texture or VBO, which is then modified using texSubImage or bufferSubData calls. If initial data is not provided to these calls, the WebGL implementation must initialize their contents to 0; depth renderbuffers must be cleared to the default 1.0 clear depth. This may require creating a zeroed temporary buffer the size of a requested VBO, so that it can be initialized correctly. All other forms of loading data into a texture or VBO involve either ArrayBuffers or DOM objects such as images, and are therefore already required to be initialized.

When WebGL resources are accessed by shaders through a call such as drawElements or drawArrays, the WebGL implementation must ensure that the shader cannot access either out of bounds or uninitialized data. See Enabled Vertex Attributes and Range Checking for restrictions which must be enforced by the WebGL implementation.

关于opengl - 在 WebGL 中重现 Cinder 故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069631/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com