问题标签 [opengl-extensions]
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.
opengl - GLSL 扩展在应该可用时不可用
我在华硕 RoG fx553 笔记本电脑的 Nvidia GeForce GTX 1050 上进行 GPU 计算,出于某种原因,尽管 Nvidia 官方网站将此 GPU 列为与线程内在指令(GL_NV_shader_thread_group
等)兼容,但使用#extension GL_NV_shader_thread_group : require
不断抛出错误和报告扩展名不可用,即使我使用的是 4.3 上下文#version 430
(我也尝试了 4.4 无济于事)。由于我是加载扩展的新手,我不知道我是否缺少 Glad/GLFW 端的一些设置。
编辑:我下载了 OpenGL 扩展查看器,它继续告诉我我的 GPU 应该支持GL_NV_shader_thread_group
,即使在 OpenGL 4.3 上下文中也是如此。
opengl - GLSL 中“pixel_interlock_ordered”的语法是什么?
我正在尝试使用 OpenGL 4.5 中的 ARB_fragment_shader_interlock 扩展,但在尝试使用 pixel_interlock_ordered 时无法编译着色器。
以下着色器编译失败:
对于任何随机名称而不是 pixel_interlock_ordered,您都会得到相同的错误。我猜语法有所不同,但规范(https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_fragment_shader_interlock.txt)将其称为“布局限定符”。
谷歌搜索“pixel_interlock_ordered”只是链接到官方规格,所以我找不到一个例子。什么是正确的语法?
c++ - 如何使各向异性过滤扩展工作?
在我的(C++/OpenGL)程序中,我正在加载一组纹理并设置纹理参数,如下所示:
我发现各向异性过滤可以帮助我增强场景的外观。因此,我使用这条线来实现它:
虽然我在我的笔记本电脑(有 AMD GPU 供应商)上编译这行代码没有问题,但我无法使用 Intel(R) HD Graphics 530 (Skylake GT2) 在我的另一台计算机上编译这段代码。具体来说,尝试使用 g++ 编译那段代码会输出以下错误:
更具体地说,在我的 Linux 终端中运行以下命令:
揭示了有关我的 GPU 供应商和 OpenGL 支持的以下详细信息:
我知道 ANISOTROPIC FILTERING 已在 中启用ARB_texture_filter_anisotropic
,但老实说,我不知道如何检查我的 GPU 供应商是否支持扩展,如果他支持,我如何才能使用 ANISOTROPIC 过滤?
顺便说一句:我正在使用 glfw3 和 GLAD 加载程序。
opengl - gl3w 和 GL 扩展
我的目标是 Linux 上的 GL Core Profile。当我像这样直接使用系统 GL 标头时:
...然后一切都按预期工作,我也可以使用 GL 扩展,例如glPushGroupMarkerEXT()
调用。
但是由于我已经集成了 imgui,我不得不通过一个GL 加载器(没有加载器我无法使 imgui 工作。)所以我遵循了 imgui 示例,现在使用gl3w。
现在我通过了 gl3w,我不能再使用那些 GL 扩展:
我看了看,但是 gl3w 似乎没有像 glew 那样带有单独的扩展头:glxew.h
文件。
glPushGroupMarkerEXT()
这是否意味着如果我将 gl3w 用作 GL 加载程序,我将无法使用?
android - 如何在 Android 上的 OpenGL ES 3.1 中使用 GL_MAP_PERSISTENT_BIT?
我最近从 using 切换glBufferData
到glMapBufferRange
which 让我可以直接访问 GPU 内存,而不是每帧都将数据从 CPU 复制到 GPU。
这工作得很好,在 OpenGL ES 3.0中我每帧执行以下操作:
- 通过 .获取指向我的 GPU 缓冲内存的指针
glMapBufferRange
。 - 使用此指针直接更新我的缓冲区。
- 用于
glUnmapBuffer
取消映射缓冲区以便我可以渲染。
但是某些 Android 设备可能至少具有 OpenGL ES 3.1,并且据我所知,可能还具有EXT_buffer_storage扩展名(如果这是错误的扩展名,请纠正我?)。使用此扩展,可以设置不需要使用标志映射/取消映射每个帧的持久缓冲区指针。GL_MAP_PERSISTENT_BIT
但是我无法弄清楚或在网上找到很多如何访问这些功能的方法。
我如何在 Android 上的 OpenGL ES 3.1 中glMapBufferRange
使用set 调用?GL_MAP_PERSISTENT_BIT
检查glGetString(GL_EXTENSIONS)
似乎确实显示扩展程序存在于我的设备上,但我似乎无法找到GL_MAP_PERSISTENT_BIT
某个地方,例如在GLES31
orGLES31Ext
中,我只是不确定如何继续。
c++ - vkEnumerateInstanceExtensionProperties : pLayerName 参数的含义是什么?
我想知道运行我的软件的 PC 是否具有特定的 GPU 扩展。为了实现这一点,我使用了这个函数vkEnumerateInstanceExtensionProperties,但我不明白第一个参数。
如果我用 NULL 为 pLayerName 参数调用此函数,则 pPropertyCount 设置为 12。
但根据OpenGL Extensions Viewer,我的 GPU 上有超过 12 个可用的扩展。OpenGL Extensions Viewer 按前缀(GL_KHR、GL_EXT、GL_NV、GL_ARB...)对扩展进行排序,这是“层”吗?