zer*_*o57 4 c++ opengl vim arguments autocomplete
所以我在stackoverflow中发布了一个与此类似的问题,但解决方案似乎可以通过更简单的解决方案来解决.
基本上,我正在使用GLEW加载我的OpenGL头文件等,没有麻烦,但由于我正在使用VIM和Clang_Complete来完成参数,我只是完成了名称并且没有实际显示的参数.由于显然功能被定义为
#define FOO somefunction
Run Code Online (Sandbox Code Playgroud)
并没有定义为
#define FOO(arg1, arg2, arg3) somefunction(arg1, arg2, arg3)
Run Code Online (Sandbox Code Playgroud)
我的解决方案是在我的〜/ .vimrc文件中添加一个选项,并且必须完全删除GLEW并将其替换为
#define GL_GLEXT_PROTOTYPES
#include <GL/gl.h>
#include <GL/glext.h>
Run Code Online (Sandbox Code Playgroud)
所以,我想知道GLEW是否有替代GLEW的功能,但是实际上显示了参数,或者是否有办法使用GLEW来解决这个问题.
Nic*_*las 11
为了充分披露,我写了以下工具.如果这看起来像广告,我道歉.
您可以使用OpenGL Loader Generator.它是一个生成用于加载OpenGL函数的头文件和源文件的工具.您可以指定您感兴趣的扩展和OpenGL版本,并且只输出这些版本的枚举和函数.这是该工具的主要功能:获取仅包含您打算使用的东西的干净标头和源文件.
但次要特征是它具有不同的生成风格.这些样式定义了如何生成输出的细节.
该标准的"pointer_c"风格生成的代码看起来很像GLEW,其中函数是#define
秒.这在C中实际上是必不可少的,因为您无法重新定义全局可访问的变量/函数名称.因此,您无法定义与非指针函数同名的函数指针.如glVertex3f
; 该名称已在某些平台上由OpenGL库定义,因此您无法定义它的新版本.你必须#define
围绕它.
另一方面,C++具有名称空间.因此,在"pointer_cpp"样式中,您将获得将大部分OpenGL放在gl
命名空间中的C++头文件和源代码.这也意味着指针CPP样式不必使用#defines.所以它没有.gl::Vertex3f
是一个带有实参数类型和名称的函数指针.任何体面的代码完成工具都应该能够理解这些.
"noload_cpp"风格做同样的事情.不同之处在于您不必调用初始化函数; 你可以调用任何函数指针,如果尚未加载它将动态加载该函数.
在此讨论的推动下,我发布了一个包含func_cpp样式的工具版本.这使用内联函数将调用转发给函数指针.这是直接使用函数,所以如果它不能解析这些函数,那么你的自动完成工具就没有希望了.