问题标签 [vertex-buffer]

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 投票
2 回答
1309 浏览

ios - 内存使用量随着时间的推移不断增加(GLKit - iOS)

我几乎完成了我的应用程序。其中一个视图使用 GLKit。我只是记忆有问题。基本上发生的情况是,当显示 GLKView 时,内存消耗不断增加(通过 Instruments 看到)。在某个时刻,它显然会崩溃。我对GLKit不太了解,所以希望你能帮助我。

问题是我正在显示的 3d 箭头。如果我不画它,所有其他的东西都不会造成任何问题。这是包含箭头顶点数据的头文件:

这是绘制代码:

有什么建议吗?非常感谢您的帮助!

0 投票
1 回答
1358 浏览

opengl - OpenGL GL_POLYGON 无法正常运行

我有一个与 OpenGL 相关的问题。每当我尝试使用顶点缓冲区中的四个顶点绘制一个简单的多边形时......什么都没有发生。但是,它会在 GL_TRIANGLES 或 GL_TRIANGLE_STRIP 模式下绘制形状,尽管会变形。难道我做错了什么?

相关代码:

顶点数组:http: //i.imgur.com/nEcbw.png

GL_POLYGON:http: //i.imgur.com/idfFT.png

GL_TRIANGLES:http: //imgur.com/84ey3,idfFT,nEcbw#0

GL_TRIANGLE_STRIP:http: //i.imgur.com/JU3Zl.png

0 投票
2 回答
343 浏览

direct3d - Z-fighting Direct3D9,只有动态缓冲

我用我的 blendshape 代码中的数据锁定并填充 Direct3d9 中的每一帧的顶点缓冲区。我的着色使用两个步骤,所以我用一个着色器渲染一次,然后用我的另一个着色器绘制一个加法混合。

出于我以外的原因,我的顶点缓冲区中的数据(显然)在这两个绘图调用之间略有不同,因为我有闪烁的 z-fighting,其中第二遍有时会在第一遍渲染“后面”。

这一切都在一个线程中完成,并且缓冲区在渲染调用之前很长时间被解锁。此外,不会对任何着色器指令进行任何更改,因此两次调用中的数据应该完全相同。如果 blendshape 碰巧没有改变,则不会发生 z-fighting。

现在我在我的着色器中“推动”一点深度,但这是一个非常不雅的解决方案。

为什么这些数据会被改变?为什么 DirectX 会在我解锁缓冲区后更改缓冲区中的数据?我可以强迫它不改变它吗?

0 投票
2 回答
4638 浏览

opengl - 为什么 OpenGL 的 glDrawArrays() 在 Core Profile 3.2 下失败并显示 GL_INVALID_OPERATION 而不是 3.3 或 4.2?

我有调用 glDrawArrays 的 OpenGL 渲染代码,当 OpenGL 上下文(自动/隐式获得)4.2 时,它可以完美地工作,但在显式请求的 OpenGL 核心上下文 3.2 时始终失败(GL_INVALID_OPERATION)。(在这两种情况下,着色器总是设置为#version 150,但我怀疑这不是重点。)

根据规范,当 glDrawArrays() 因 GL_INVALID_OPERATION 失败时,只有两种情况:

  • “如果非零缓冲区对象名称绑定到启用的数组并且缓冲区对象的数据存储当前已映射” - 此时我没有进行任何缓冲区映射

  • “如果几何着色器处于活动状态并且模式与 [...] 不兼容”——不,目前还没有几何着色器。

此外:

  1. 我已经验证并仔细检查了它只是 glDrawArrays() 调用失败。还仔细检查了传递给 glDrawArrays() 的所有参数在两个 GL 版本下是否相同,缓冲区绑定也是如此。

  2. 这发生在 3 个不同的 nvidia GPU 和 2 个不同的操作系统(Win7 和 OSX,都是 64 位——当然,在 OSX 中我们只有3.2 上下文,反正没有 4.2)。

  3. 集成的“Intel HD”GPU 不会发生这种情况,但对于那个,我只得到一个自动隐式 3.3 上下文(尝试通过 GLFW 显式强制使用此 GPU 的 3.2 核心配置文件会导致窗口创建失败,但这是一个完全不同的问题...)

对于它的价值,这里是从渲染循环中摘录的相关例程,在 Golang 中:

所以当然这是一个更大的渲染循环的一部分,尽管现在整个“*TMesh”结构只是两个实例,一个是简单的立方体,另一个是简单的金字塔。重要的是,整个绘图循环完美无缺,当查询 GL 以查找 3.3 和 4.2 下的错误时,没有报告任何错误,但在 3 个具有显式 3.2 核心配置文件的 nvidia GPU 上失败,错误代码根据规范仅在两种具体情况,据我所知,没有一种情况适用于此。

这里有什么问题?你遇到过这种情况吗?有什么想法我一直在想念吗?

0 投票
2 回答
667 浏览

opengl-es-2.0 - OpenGL ES 2.0 上的 VBO 不显示任何内容

我正在学习 OpenGL ES。我已经成功地绘制了一些立方体,了解相机位置背后的基本矩阵逻辑等。现在我正在尝试为 VBO 构建一个示例,但它没有在屏幕上绘制任何内容。我将粘贴我的代码,可能有人会意识到我做错了什么。

片段着色器代码

顶点着色器

纹理加载

顶点对象结构

VBO创作

VBO 绘图

正如我之前指出的那样,对于我之前完成的更简单的示例(纹理、转换矩阵),我一直使用基本相同的代码。我还检查了错误,并且没有代码错误存在。

如果有人强调我的代码可能有什么问题,我将不胜感激。

0 投票
1 回答
8402 浏览

python - 如何让 VBO 与 Python 和 PyOpenGL 一起工作

以下 Python 程序应在窗口的右上象限中绘制一个白色三角形。

它不会抛出任何错误,但不幸的是它不会绘制三角形。

我还尝试将缓冲区数据作为 NumPy 数组提交:

也没有绘制三角形。PyOpenGL... YU NO 绘制 VBO 吗?

我的系统:Python 2.7.3;OpenGL 4.2.0;Linux Mint Maya 64 位

0 投票
2 回答
2080 浏览

opengl - glMapBuffer 不断返回 0x00000000

我已经初始化了 glewInit() 和任何其他 openGL 的东西。在我做任何这些电话之前。

这就是我创建缓冲区对象的方式 ii 执行 glBufferData 是因为我在 openGL 文章中读到,如果您不至少调用一次它,您根本没有任何存储空间,这将使 glMapBuffer 总是给您 0x00000000。

稍后我调用 glMapBuffer 来获取我的存储位置以在我使用 glMapBuffer 时开始保存数据我这样称呼它

我的缓冲区1中总是得到0x00000000。为什么是这样?我发现的唯一 2 个原因是我没有正确初始化 glewInit 并且我没有调用 glBindBufferData 至少一次。

0 投票
0 回答
3263 浏览

opengl - OpenGL glTexCoordPointer 似乎没有应用纹理

我有代码:

我很困惑为什么四边形绘制得非常好,但纹理根本没有被映射。

将部分展开到调用中glTexCoord2f并且glVertex3f效果很好,所以我只能假设我的纹理绑定有问题。

texcoords 正在初始化:

现在保持不变,它的对数与我的顶点数组具有顶点三元组的数量相同。

我得到 GL_NO_ERROR 并且面部都被着色为初始调用时设置的默认值glColor3f(0.9f, 0.1f, 1.0f);

知道我可能会错过什么吗?

0 投票
2 回答
4429 浏览

c++ - C++:OpenGL、glm 和结构填充

我可以安全地使用 glm::* 类型(例如 vec4、mat4)来填充顶点缓冲区对象吗?

我不太确定,因为 struct padding(成员对齐)在我看来可能会造成一些麻烦,尽管我测试过的所有编译器都会返回预期的大小。

我正在为 C++11 编译器开发(也许这会有所不同)。

0 投票
2 回答
2905 浏览

c++ - 无法创建顶点缓冲区

我有一个带有 DirectX 组件的 Windows Phone 8 C#/XAML 项目。我正在尝试渲染一些粒子。我创建了一个顶点缓冲区,我看到它进入了要创建的函数,但是当它到达更新顶点缓冲区时,缓冲区为 NULL。我还没有释放缓冲区。你知道为什么会这样吗?任何输出消息有帮助吗?谢谢。

我的输出窗口上的打印输出和错误:

在 CreateDeviceResources 中,我调用了 CreateVertexShader、CreateInputLayout、CreatePixelShader、CreateBuffer。然后我开始创建采样器和顶点缓冲区,代码如下:

我的顶点是位置、纹理和颜色:

顶点着色器.HLSL:

调用后: m_d3dDevice->CreateBuffer(&vertexBufferDesc, &vertexBufferData, &m_vertexBuffer) m_vertexBuffer 不为空。

但是当我到达我的 Update() 函数时,m_vertexBuffer 为 NULL!