问题标签 [transform-feedback]

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

opengl - glBindBufferRange 与变换反馈的使用

我有一个缓冲区,我想填充连续的变换反馈,我想知道如何做到这一点。

glBindBufferRange有五个论点,我知道前三个等价于 的论点,但我对和论点glBindBufferBase有几个疑问。offsetsize

如果我的第一个变换反馈产生n基元,从 检索GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN,我的基元是点,并且我想从缓冲区中的那个位置继续,是否应该将偏移量glBindBufferRange设置为n*4*sizeof(GLfloat)?(假设我正在检索 vec4 几何着色器输出)

文档只是这么说offset并且size应该在基本机器单元中(尽管它们有两种不同的类型,GLintptr 和 GLsizeiptr),但我不确定这意味着什么,所以我假设字节,这是正确的吗?

0 投票
0 回答
258 浏览

opengl - 是否可以为变换反馈和渲染绑定缓冲区?

我读了一个关于变换反馈的教程,它做了这样的事情:

我的问题是,是否可以只使用一个缓冲区来实现上述目标?

0 投票
0 回答
778 浏览

opengl - 转换反馈仅在第一帧有效

转换反馈在第一帧起作用,但在那之后就不行了。

这是基于“GLSL Cookbook”示例的粒子系统,尽管我将其转换为 OpenGL 3.3。

我的程序设置:

对于每个属性,我有两组顶点数组缓冲区(2 个用于位置,2 个用于速度,2 个用于 startTime)。2个VAO,第一个对应第一组缓存,第二个VAO对应第二组缓存。VAO 为相应的缓冲区设置顶点属性。

有两个着色器程序,第一个执行变换反馈,第二个渲染。

在每一帧上,首先使用变换反馈着色器程序和 VAO 执行变换反馈,然后使用其他 VAO 渲染渲染着色器。在每个连续的帧上,VAO 被交换。

如果我使用查询,GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN我可以看到只有第一次写入所有原语,之后写入的原语值为0. 我还可以通过看到屏幕上的点闪烁(在点的起始位置和它们在第一帧中变换的位置之间闪烁)来直观地看到第一遍的工作。

我只在 Mac OS X 上看到这个问题(它在 Linux 和 Windows 上完美运行)。我知道 Mac 在某些 OpenGL 功能方面有点落后,但我找不到任何表明在这种情况下会出现问题的东西。

此外,我在渲染时检查了 OpenGL 错误,但没有。

在链接变换反馈着色器之前:

这是我正在使用的渲染功能代码:

变换反馈着色器的顶点着色器 ( m_transformShader):

渲染顶点着色器:

我正在使用 OpenGL 3.3 上下文。

0 投票
1 回答
550 浏览

ios - Real time OpenGL ES raytracing\raycasting on iOS with transform feedback?

We have an MRI scan and we would like to perform real time raycasting in OpenGL on iOS in order to render the surface from different angles without polygonizing it. In fact we are only interested in the depth map generated by rendering.

Ive seen a number of examples of this in the appstore so Im sure its possible (eg. ImageVis3d). Can we used glTexImage3D to perform rendering? Is there a good online resource for using this function in iOS? Better yet is there a GitHub project or something similar which demonstrates the use of glTexImage3D in iOS?

Now assuming that a 2d or 3d texture exists in OpenGL ES memory is it possible to write to the same memory using a fragment shader and then rerender it without copying it back to the CPU? Im imagining a sculpting scenario that can deform the volume using a fragment shader.

0 投票
1 回答
262 浏览

opengl-es - 使用 OpenGL ES 3.0 从顶点着色器访问 VBO

我有四个 VBO(BufferA、BufferB、BufferC 和 BufferD)和两个程序(program1 和 program2)。逻辑的主要步骤是:

问题:我需要做什么才能从 program2 访问 BufferB?我可以以某种方式将 BufferB 绑定为纹理并使用 texelfetch 读取它吗?

我正在使用 iOS 7 和 OpenGL es 3.0

0 投票
0 回答
101 浏览

c++ - OpenGL 变换反馈定义完全在着色器内部

我正在尝试让我的转换反馈运行。我想完全从使用核心 4.4 的着色器或使用布局 (xfb_offset=xx) 声明器的 GL_ARB_enhanced_layouts 扩展指定我的缓冲区布局。我假设在顶点着色器中声明这些之后我可以调用

获取要写入变换反馈缓冲区的潜在变量的数量。但是我的 opengl 一直为“iTransformFeedbackVars”返回 0。我尝试在链接程序之前和之后调用上述命令。

我在这里遗漏了什么,或者甚至可以让着色器指定它想要写入的变量,并且我的代码根据着色器的意愿创建缓冲区?

0 投票
1 回答
467 浏览

opengl - 在没有帧缓冲区的情况下转换反馈?

我有兴趣使用顶点着色器来处理缓冲区而不产生任何渲染输出。这是相关的片段:

这工作正常,直到glDrawElements()调用,这导致GL_INVALID_FRAMEBUFFER_OPERATION. 并glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);返回GL_FRAMEBUFFER_UNDEFINED

我认为这是因为我的 GL 上下文没有默认帧缓冲区,并且我没有绑定另一个 FBO。但是,由于我不关心渲染的输出并且我已经启用GL_RASTERIZER_DISCARD_EXT,我认为帧缓冲区应该是不必要的。

那么,有没有一种方法可以在没有 framebuffer 的情况下使用转换反馈,或者即使我不关心它的内容,我也需要生成和绑定一个 framebuffer?

0 投票
1 回答
291 浏览

c++ - 几何着色器只创建一个图元

我目前正在尝试使用几何着色器。

我的输入是一组点,应该为其创建多个三角形

这是几何着色器

这是相应的 C++ 代码

根据查询,只写了一个原语。

输入点 (10,20,30) 的输出:

我的代码有什么问题,只有 1 个三角形而不是 27 个?

0 投票
2 回答
672 浏览

ios - iOS OpenGL ES 3.0 上的变换反馈变量重新声明错误

我目前正在尝试从 GPU 中获取像素信息,以便可以通过循环对其进行处理/保存/反馈。

为此,我正在尝试实现转换反馈。我遇到了拆分 GPU 管道的问题。顶点和片段着色器程序的这种分离也意味着编译和着色器程序创建的分离。在实现这一点时,编译器给了我 catch-22 反馈,它告诉我如果我分离着色器,那么我需要重新声明某些内置的每个顶点变量,例如 gl_Position。

但是当我这样做时,它告诉我不允许重新声明内置变量:

错误:0:1:可能不会重新声明常规非数组变量“gl_Position”。

我尝试按照我找到的示例重新定义 gl_PerVertex ,但它无法识别 gl_PerVertex 是一个内置的东西:

错误:0:1:标识符名称“gl_PerVertex”不能以“gl_”开头

有谁知道要在 iOS 的顶点着色器中重新声明哪些变量以有效地重新声明 gl_Position?还是我已经尝试过的两件事中的任何一个有问题?

0 投票
1 回答
410 浏览

c++ - 三角网格的变换反馈丢失顺序

我正在尝试在顶点(或几何)着色器中计算我的一些顶点。当我最终绘制顶点时,它们丢失了我给顶点数组对象(使用 GL_ELEMENT_ARRAY_BUFFER)的顺序。glDrawElements 函数在这种情况下不起作用,我必须使用 glDrawArrays。我错了吗?

如何保存变换反馈的三角形索引顺序?