问题标签 [opengl-3]

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

opengl - OpenGL 4.1 和 3.1+,主要区别是什么?

我知道 OpenGL 4 和 3 非常相似,尤其是 3.1 和 4.1。由于两者基本上是一起发布的,因此很难理解 OpenGL 4.0/4.1 的基本原理。

在以前的 OpenGL 版本中,次要版本会向上递增,直到大量更改累积到新的主要版本中。OpenGL 3.x 和 4.x 引入了向后不兼容的 API 更改,然后 OpenGL 3.2 和 3.3 被称为 3 系列的特定分支,它们不向前兼容,而 3.1 与 4.1+ 兼容

与 OpenGL 3.1 相比,OpenGL 4.1 提供了哪些关键差异,从而保证它被归类为新的主要版本?

奖励:是否有任何差异在 GL3 或仅可访问性的任何情况下提供了性能提升?

编辑:基于答案的一些额外发现


OpenGL 3.3 是对 OpenGL 4.0 的补充,将尽可能多的功能整合到旧硬件中。在 OpenGL 3 和 4 之间进行选择,有时3.3 可能是更好的选择。然而,4.1 增加了 GL ES 2.0 兼容性和一些不错的功能。


更大的工作流程差异之一是通过新的曲面细分着色器在管道中添加 GPU 编程步骤。另一个是要渲染到的多个视口。我相信新的详细程度功能会改变我正在使用的工作流程,也许还会改变其他很多,尽管我没有深入研究过这个功能。

如果您发现任何误解或需要改进的地方,请告诉我。

主题演讲(显然在询问元数据时从答案中删除了。用于临时参考实际答案是什么。)

附录 G - K对于OpenGL 3.1功能到OpenGL 4.1 功能

Khronos Group 发布的 OpenGL 4.0可能“更容易阅读”:)

  • 采样器对象
  • 实例化数组和着色器
  • texture_cube_map_array 和 texture_gather

  • GLSL 4.0动态 LOD

  • shader_subroutinesample_shading
  • 分离着色器对象
  • 增加纹理/渲染缓冲区所需的大小
  • 64位浮点顶点属性
  • get_program_binary
  • +2镶嵌着色器
0 投票
2 回答
1987 浏览

c++ - 代码辅助,OpenGL VAO/VBO 类不绘制

编辑二:
当前代码效果很好!感谢大家。我继续在底部包含了我的着色器代码以供参考,尽管它们在这一点上完全没有做任何事情。

我正在尝试使用 OpenGL 4.1 并且仍处于开发初期。目前我什至还没有在这个项目中真正使用 4.0 功能,所以这也是一个 OpenGL 3 问题。

我最初的目标是制定两个类来处理 VAO 和 VBO。我有一些误解,但最终通过了空白屏幕。

基本上我只是希望在这一点上能在屏幕上看到任何东西。我正在使用 glfw 和 glew。我是完全遗漏了一些东西还是只需要纠正一些东西?抱歉,目前代码有些混乱。

基础.vert

基础片段

0 投票
2 回答
551 浏览

opengl - 在OpenGL中使用索引作为坐标

我想实现一个允许用户缩放和平滑平移的时间序列查看器。

我以前做过一些即时模式opengl,但现在不赞成使用VBO。我能找到的所有 VBO 示例都存储了每个点的 XYZ 坐标。

我怀疑我需要将所有数据保存在 VRAM 中,以便在平移期间获得可以称为“平滑”的帧速率,但我只有 Y 数据(因变量)。X 是一个自变量,可以从指数中计算出来,Z 是常数。如果我必须存储 X 和 Z,那么我的内存需求(缓冲区大小和 CPU->GPU 块传输)将增加三倍。而且我有数以千万计的数据点,用户可以通过这些数据点进行平移,因此内存使用量将不小。

是否有一些技术可以绘制一维顶点数组,其中索引用作另一个坐标,或者存储一维数组(可能在纹理中?)并使用着色器程序生成 XYZ?我的印象是在新的无固定特征管道模型下无论如何我都需要一个简单的着色器来实现缩放和平移,所以如果我可以结合 X 和 Z 坐标的生成以及 Y 的缩放/平移,那将是理想的。

这甚至可能吗?您知道执行此操作的任何示例代码吗?或者你至少能给我一些伪代码,说明以什么顺序调用哪些 GL 函数?

谢谢!

编辑:为了确保这一点很清楚,这是等效的立即模式代码和顶点数组代码:

请注意,v[]它的大小是 的两倍y[]

0 投票
2 回答
1461 浏览

c++ - 每个网格有多个顶点缓冲区

我遇到了这样一种情况,即我的网格及其所有顶点和索引的大小大于(最佳)顶点缓冲区对象上限(~8MB)。我想知道我是否可以在多个顶点缓冲区中细分网格,并以某种方式保持索引的有效性。即一个在第一个顶点有一个索引,在最后一个顶点有一个索引的三角形(即在单独的 VBO 中)。

一直在顶点数组对象中保持这一点。我的想法是,省去麻烦,对于像这样的网格(混乱:P),只需使用必要的大小(> 8MB);这就是我目前所做的。但理想情况下,我的缓冲区管理器(wip)目前正在使用最佳尺寸;那我可能只需要做一个特殊情况。

有任何想法吗?

注意:我还在gamedev stack上交叉发布了这个,因为我不确定哪个更合适(它部分是设计问题)。

0 投票
2 回答
7526 浏览

c++ - glGenerateMipmap- 找不到标识符?

我正在尝试实现 glGenerateMipmap 以便我可以继续重新着色我渲染的立方体的每个级别,除了程序不会编译给出错误

'错误 C3861:'glGenerateMipmap':找不到标识符'

我已经包含了'#include'并且在标题中定义似乎存在(虽然在IF语句中?见下文)所以我想知道是否有办法以某种方式重新定义/定位它,以便程序编译或运行,如果没有,是否有另一种自动生成 mipmap 的方法?

非常感谢,克里斯

0 投票
2 回答
1272 浏览

opengl - glDelete 访问冲突*

我在这里遇到了一个奇怪的问题:我有一个潜在的大(高达 500mb)3d 纹理,每秒创建几次。纹理的大小可能会发生变化,因此并非每次都可以重用旧纹理。避免内存消耗的逻辑步骤是在每次不再使用纹理时删除纹理(使用 glDeleteTexture),但程序很快就会因读取或写入访问冲突而崩溃。当在我用来更新纹理的缓冲区上调用 glDeleteBuffer 时,也会发生同样的事情。

在我看来,这不可能发生,因为 glDelete* 函数非常安全。如果你给他们一个不是对应对象的 gl 句柄,他们就什么也不做。

有趣的是,如果我不删除纹理和缓冲区,程序运行良好,直到它最终耗尽显卡上的内存。

它运行在 Windows XP 32 位、NVIDIA Geforce 9500GT 和 266.58er 驱动程序上,Visual Studio 2005 中的编程语言是 c++。

更新

显然 glDelete 不是唯一受影响的功能。我刚刚在其他几种方法中遇到了违规行为(昨天不是这种情况)......看起来这里有些东西该死了。

更新 2

这不应该失败吗?

失败:

最佳猜测:有什么东西弄乱了程序内存?

0 投票
4 回答
5730 浏览

performance - OpenGL 低级性能问题

与任何优化问题一样,这个主题受到了很多关注,但我就是找不到我(认为)我想要的东西。

很多教程,甚至SO问题都有类似的提示;一般涵盖:

  • 使用 GL 面剔除(OpenGL 函数,不是场景逻辑)
  • 仅将 1 个矩阵发送到 GPU(projectionModelView 组合),因此将 MVP 计算从每个顶点减少到每个模型一次(应该如此)。
  • 使用交错顶点
  • 尽可能减少 GL 调用,在适当的地方进行批处理

可能还有一些/许多其他人。我(出于好奇)使用多个顶点缓冲区在我的应用程序中渲染 2800 万个三角形。我已经尝试了上述所有技术(据我所知),几乎没有收到任何性能变化。

虽然我在实现中收到大约 40FPS,这绝不是问题,但我仍然很好奇这些优化“提示”实际上在哪里使用?

我的 CPU 在渲染过程中闲置了大约 20-50%,因此我假设我受制于 GPU 以提高性能。

注意:我现在正在研究 gDEBugger

交叉张贴在游戏开发

0 投票
5 回答
7437 浏览

macos - 如何使用 GeForce 9400 在 OS X 上进行 OpenGL 3 编程

我有一台配备 GeForce 9400 显卡的 MacBook Pro。维基百科说这张卡支持 OpenGL 3。

但是 OS X 10.6 附带的头文件和库似乎只是 OpenGL 2(我检查了 中的文件/usr/X11/include/)。

我需要做一些 OpenGL 3 编程。我可以用我当前的硬件和操作系统来做吗?我需要获取和安装什么?

0 投票
2 回答
1152 浏览

c - 无法从 OpenGL 3.2 / 3.3 检索版本信息

我在这里遵循了基本说明:

http://www.opengl.org/wiki/Tutorial:_OpenGL_3.1_The_First_Triangle_%28C%2B%2B/Win%29#Rendering_Context_Creation

我唯一调整的是将上下文创建为 3.2 或 3.3:

然后在创建上下文(成功返回 TRUE)后,我检查版本:

但是,pszGLVersion 为 NULL,并且 glVersion[0] 和 glVersion[1] 都未初始化!

为什么 OpenGL 3.2 & 3.3 上下文创建成功,但无法获取版本信息?

0 投票
5 回答
2530 浏览

opengl - 为跨平台桌面应用程序选择什么 OpenGL 版本

我正在开发一些带有大量二维图形的跨平台桌面应用程序。我使用 OpenGL 2.0 规范,因为我需要顶点着色器。我喜欢 3.2+ 核心 API,因为它简单且强大。我认为 3.2+ 核心可能是未来的选择。但我担心现在这个功能在某些平台上可能不可用(我的意思是旧的显卡和缺乏(?)现代 Linux 驱动程序)。也许,我应该使用类似 OpenGL ES 2.0 的 API 以便将来移植。

3.2+ 内核、显卡和 linux 驱动程序的情况如何?