问题标签 [opengl-4]

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

macos - 在 OSX 上安装 OpenGL 4.0

我想知道是否有任何可能的方法可以在 OSX 上更新到最新版本的 OpenGL。有没有办法在 OSX 上运行使用 OpenGL 4.0 调用的程序?

0 投票
1 回答
86 浏览

opengl - 如果我不指定着色器,OpenGL 3.x+ 会发生什么

我正在使用新的核心 OpenGL 4,所以我只使用 VAO 以及顶点和片段着色器。

但是,如果我根本不指定任何着色器怎么办,系统是否提供默认着色器?例如,使用当前 glColor 和 mvp 绘制片段的着色器?

0 投票
1 回答
1372 浏览

opengl - 更新 OpenGL mipmaped 纹理

我无法完全理解 OpenGL 中的纹理更新。假设我使用这样的 mipmap 创建 OpenGL 纹理:

现在第一个问题: 这是否意味着,当我想更新包含所有 mipmap 级别的纹理时,我是否必须遍历每个级别并使用适当的 mipmap 尺寸和图像字节调用 glTexSubImage2D?如果答案是 YES,那么我有:

第二个问题:如何检索每个 mipmap 维度和数据以传递到纹理中?

或者,我可以只做更新:

然后立即重新生成mipmap?

0 投票
1 回答
1066 浏览

opengl - 为什么超过 2048 的纹理层中只有垃圾数据?

我正在尝试使用多达 8192 层的 texture_2d_array。但是第 2048 层之后的所有层都只包含垃圾数据(通过在四边形上映射各个层以可视化纹理进行测试)。查询最大层数

为我的显卡(AMD 5770)返回 8192,与 AMD 7850er 相同。我唯一可用的其他显卡是 NVidia 480,它仅支持 2048 层。

我使用以下代码来创建纹理:

(在这里https://mega.co.nz/#!FJ0gzIoJ!Kk0q_1xv9c7sCTi68mbKon1gDBUM1dgjrxoBJKTlj6U你可以找到该程序的精简版)

我没有想法:

  1. 将 glTexStorage3D 更改为 glTexImage3D - 没有变化
  2. 使用基本/最高级别 - 没有变化
  3. Min_Filter 到 GL_LINEAR - 没有变化
  4. 生成 mipmap (glGenerateMipmaps) - 没有变化
  5. 将层的大小减小到例如 4x4 - 没有变化
  6. 将层数减少到例如 4096 - 没有变化
  7. 切换到 AMD 7850 - 没有变化
  8. 启用调试上下文 - 没有错误
  9. 等等以及很多其他的东西

所以,这可能是一个驱动程序错误,驱动程序报告了错误的 GL_MAX_ARRAY_TEXTURE_LAYERS 编号,但也许我错过了一些东西,你们中的一个人有一个想法。

编辑:我知道这样的纹理会占用大量内存,即使我的显卡有那么多可用的 OpenGL 也不能保证我可以分配它,但是启用调试上下文时我没有收到任何错误,尤其是没有OUT_OF_MEMORY,我还尝试了每层 4x4 的大小,只有 512kb

0 投票
1 回答
115 浏览

c++ - 设置 OpenGL 4 构建/单元测试服务器?

我正在尝试找到设置 OpenGL 构建服务器的解决方案。我的偏好是拥有虚拟或云服务器,但据我所知,使用软件渲染只能达到 3.0/3.1。我有一台运行 Windows 的服务器,但我的测试是特定于 Linux 的,我必须在 VM 中运行它,据我所知,它也只支持 OpenGL 3.1。

那么,是否可以设置 OpenGL 4 构建/单元测试服务器?

0 投票
2 回答
13939 浏览

opengl - 什么时候应该在 OpenGL 中使用 STD140?

何时在 OpenGL 中将 STD140 用于统一块?

虽然我不是 100% 确定,但我相信有一种替代方案可以实现相同的目标,称为“共享”。

它只是对编码器的偏好吗?还是有理由使用其中一个?

0 投票
1 回答
781 浏览

opengl - ARB_separate_shader_objects 函数在哪里?(例如 glUseProgramStages、glCreateShaderProgramv)

我似乎无法在我的系统上找到这些函数的进程地址。我正在使用支持一切的 GLEW 1.9。我正在为我的上下文加载 4.3 核心配置文件...我的 nVidia 驱动程序完全是最新的。我下载了一个名为 GPU Caps 的程序,它显示了可用的扩展。有任何想法吗?

更新 - 我必须启用 glewExperimental 才能让它工作。我认为程序分离是自 4.1 以来的核心。如果没有见解,我会将其标记为已解决。

0 投票
1 回答
3573 浏览

opengl - 如何获取当前绑定的顶点数组对象?

如何获取当前绑定的顶点数组对象的名称?

我查看了手册,但找不到与 glGet() 一起使用的枚举。

0 投票
2 回答
883 浏览

opengl - 在 nvidia opengl 上混合 glGetTexImage 和 imageStore 的问题

我写了一些代码,太长了,无法粘贴到这里,它通过使用无绑定 imageLoad 和 imageStore 的片段着色器渲染成 3D 1 组件浮动纹理。

该代码肯定有效。

然后我需要解决一些 GLSL 编译器错误,因此想通过 glGetTexImage 将上面的 3D 纹理读回主机。是的,我确实做了一个 glMemoryBarrierEXT(GL_ALL_BARRIER_BITS)。我确实通过 glGetTexLevelparameteriv() 检查了纹理信息,并且我看到的所有内容都匹配。我确实检查了 OpenGL 错误,但没有。

可悲的是,glGetTexImage 似乎从未读取片段着色器所写的内容。相反,它只返回我在调用 glTexImage3D() 来创建纹理时输入的假值。

这是预期的行为吗?文档另有暗示。

如果 glGetTexImage 确实以这种方式工作,我如何读回该 3D 纹理中的数据(驻留在设备上?)显然,驱动程序可以像纹理非驻留时那样执行此操作。当然有一个简单的方法来做这个简单的事情......


我在问 glGetTexImage 是否应该以这种方式工作。这是代码:

这是创建无绑定数组的代码:

我分配数组,通过 OpenGL 片段程序渲染给它,然后我调用 dump_array() 来读回数据。可悲的是,我只得到了我在 allocate 调用中加载的内容。

渲染程序看起来像

片段程序是:

0 投票
1 回答
1884 浏览

opengl - When to use Texture Views

I am reading about Texture Views in the new Red Book. On the page 322 is said:

OpenGL allows you to share a single data store between multiple textures,each with its own format and dimensions.

(via Texture Views)

Now,my questions are:

Does it mean a single texture source is being referenced by multiple instances (in this case texture views) ?

How is it different from using the same texture object,for example but with different samplers?

Also, does it mean that changing the texture pixels via texture view will change the pixels in the original texture object?(I suppose the answer is positive as the doc says it is alias to the texture store)