当我发现以下代码及其许多变体产生非空内存地址时,我感到非常惊讶.我尝试的变化包括:
glXGetProcAddressARB而不是glXGetProcAddress.使用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函数不可查询.
我正在尝试使用 wglSwapIntervalEXT(int Interval) 在 OpenGl 中使用 WGL_EXT_swap_control 禁用垂直同步。
我试图包含 wglext 标头,但经过多次搜索后,它似乎没有安装在我的电脑上(使用 opengl 扩展查看器来找到它)。我已尝试安装Windows sdk并更新.net框架,但仍然无法安装此扩展。
无论如何,有没有包括这个。我的显卡是 nVidia GTX 770m。或者有没有更简单的方法来禁用垂直同步。
谢谢
在我的(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);\nRun Code Online (Sandbox Code Playgroud)\n\n我发现各向异性过滤可以帮助我增强场景的外观。因此,我使用这一行来实现它:
\n\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);\nRun Code Online (Sandbox Code Playgroud)\n\n虽然我在我的笔记本电脑(有 AMD GPU 供应商)上编译这行代码没有任何问题,但我无法在使用 Intel(R) HD Graphics 530 (Skylake GT2) 的另一台计算机上编译这段代码。\n具体来说,尝试使用 g++ 编译该代码段会输出以下错误:
\n\nerror: \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);\nRun Code Online (Sandbox Code Playgroud)\n\n更具体地说,在我的 Linux 终端中运行以下命令:
\n\nglxinfo | grep -i opengl\nRun Code Online (Sandbox Code Playgroud)\n\n显示有关我的 GPU 供应商和 OpenGL 支持的以下详细信息:
\n\n\n\n我知道在 中启用了各向异性过滤ARB_texture_filter_anisotropic,但老实说,我不知道如何检查我的 GPU 供应商是否支持该扩展,如果支持,我如何才能使用各向异性过滤? …
我正在通过使用发现着色器,并且遇到了一个奇怪的问题.
我需要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继续他的建议,扩展的名称确实出现在输出中.
当我尝试运行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文件)
我究竟做错了什么?