标签: opengl-extensions

对于以"gl"开头的任何procName,glXGetProcAddress返回非null

当我发现以下代码及其许多变体产生非空内存地址时,我感到非常惊讶.我尝试的变化包括:

  • 打电话glXGetProcAddressARB而不是glXGetProcAddress.
  • 拥有使用GLFW创建的活动GL上下文.
  • 使用GLFW提供的跨平台替代方案:glfwGetProcAddress.

    #include <GL/glx.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        void *ptr;
    
        ptr = glXGetProcAddress((const GLubyte *)"glottis");
    
        printf("ptr: %x\n", ptr);
    
        return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)

程序是用-lGL(并-lglfw在需要时)编译的,没有警告也没有错误.

获得的唯一途径0输出的NULL指针,是通过询问他的名字不启动函数的地址gl,例如manny.

我对此行为感到非常惊讶,因为glottis并且manny应该同样不存在,并且我希望两者都产生一个NULL指针.

资源

这是glXGetProcAddress文档的摘录.

笔记

如果在被查询的实现中没有支持请求的函数,则返回NULL指针.

由于在查询时可能未加载库,因此GLU函数不可查询.

完整文件

有关此主题的更多信息

opengl opengl-extensions

4
推荐指数
1
解决办法
652
查看次数

wglext - 扩展未安装在 OpenGL 上下文中

我正在尝试使用 wglSwapIntervalEXT(int Interval) 在 OpenGl 中使用 WGL_EXT_swap_control 禁用垂直同步。

我试图包含 wglext 标头,但经过多次搜索后,它似乎没有安装在我的电脑上(使用 opengl 扩展查看器来找到它)。我已尝试安装Windows sdk并更新.net框架,但仍然无法安装此扩展。

无论如何,有没有包括这个。我的显卡是 nVidia GTX 770m。或者有没有更简单的方法来禁用垂直同步。

谢谢

windows opengl vsync opengl-extensions

2
推荐指数
1
解决办法
1642
查看次数

如何让各向异性过滤扩展发挥作用?

在我的(C++/OpenGL)程序中,我加载一组纹理并设置纹理参数,如下所示:

\n\n
//TEXTURES\nglGenTextures(1, &texture1);\nglBindTexture(GL_TEXTURE_2D, texture1);\n// set the texture wrapping parameters\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);\n// set texture filtering parameters\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\n\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我发现各向异性过滤可以帮助我增强场景的外观。因此,我使用这一行来实现它:

\n\n
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);\n
Run Code Online (Sandbox Code Playgroud)\n\n

虽然我在我的笔记本电脑(有 AMD GPU 供应商)上编译这行代码没有任何问题,但我无法在使用 Intel(R) HD Graphics 530 (Skylake GT2) 的另一台计算机上编译这段代码。\n具体来说,尝试使用 g++ 编译该代码段会输出以下错误:

\n\n
error: \xe2\x80\x98GL_TEXTURE_MAX_ANISOTROPY\xe2\x80\x99 was not declared in this scope\n glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);\n
Run Code Online (Sandbox Code Playgroud)\n\n

更具体地说,在我的 Linux 终端中运行以下命令:

\n\n
glxinfo | grep -i opengl\n
Run Code Online (Sandbox Code Playgroud)\n\n

显示有关我的 GPU 供应商和 OpenGL 支持的以下详细信息:

\n\n

在此输入图像描述

\n\n

我知道在 中启用了各向异性过滤ARB_texture_filter_anisotropic,但老实说,我不知道如何检查我的 GPU 供应商是否支持该扩展,如果支持,我如何才能使用各向异性过滤? …

c++ opengl textures glfw opengl-extensions

1
推荐指数
1
解决办法
5450
查看次数

GLEW和我的着色器不同意 - 我是否有延伸?

我正在通过使用发现着色器,并且遇到了一个奇怪的问题.

我需要ARB_robustness片段着色器的扩展才能正常运行.GLEW肯定我有这个扩展:

assert(GLEW_ARB_robustness); // Passes
Run Code Online (Sandbox Code Playgroud)

...但是当我require在我的着色器中...

#extension GL_ARB_robustness : require
Run Code Online (Sandbox Code Playgroud)

...着色器编译器无法识别它.

0(3) : error C0202: extension ARB_robustness not supported
Run Code Online (Sandbox Code Playgroud)

GLEW已正确初始化,只要我不尝试使用该扩展,一切正常.

可能是这个问题的原因,我怎么能解决它?提前致谢.

更新:我在朋友的帮助下嘲笑我,我glxinfo继续他的建议,扩展的名称确实出现在输出中.

opengl glew glsl opengl-extensions

0
推荐指数
1
解决办法
115
查看次数

GLAD,扩展未加载

当我尝试运行GLSL3.3着色器时,我的应用程序向我发送了此消息

#version 330
layout(location = 0) in vec2 position;
layout(location = 1) uniform float TimeUniform = 0.0f;
out float TimeUniformFrag;
void main() {
    gl_Position = vec4(position.x - 1.0f, position.y - 1.0f, 0.0f, 1.0f);
    TimeUniformFrag = TimeUniform;
}
...
Vertex Shader: 0:3(1): error: uniform explicit location requires GL_ARB_explicit_uniform_location and either GL_ARB_explicit_attrib_location or GLSL 3.30.
Run Code Online (Sandbox Code Playgroud)

所以我回去并将所述扩展添加到GLAD生成器:您可以在下面看到我的选择!
http://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3&extensions=GL_ARB_explicit_uniform_location

之后,我将我的glad.c和glad.h文件复制粘贴回我的文件并编译......令我惊讶的是,我得到了同样的错误!(未包含KHR.h文件)

我究竟做错了什么?

opengl glsl opengl-extensions

0
推荐指数
1
解决办法
204
查看次数

标签 统计

opengl ×5

opengl-extensions ×5

glsl ×2

c++ ×1

glew ×1

glfw ×1

textures ×1

vsync ×1

windows ×1