3

だから私はこれに似た質問をstackoverflowに投稿しましたが、解決策はもっと簡単な解決策で解決できるようでした。

基本的に、GLEW を使用して OpenGL ヘッダー ファイルなどを読み込むのに問題はありませんが、VIM と Clang_Complete を使用して引数の補完を取得しているため、名前だけが完成し、実際には引数が表示されないという問題が発生します。 . どうやら関数は次のように定義されているため、

#define FOO somefunction

として定義されていません

#define FOO(arg1, arg2, arg3) somefunction(arg1, arg2, arg3)

これに対する私の解決策は、 ~/.vimrc ファイルにオプションを追加し、GLEW を完全に削除して、

#define GL_GLEXT_PROTOTYPES
#include <GL/gl.h>
#include <GL/glext.h>

だから、GLEWが行うことをGLEWに代わるものがあるが、実際に引数を表示するかどうか、またはGLEWを使用してこれをWITHで解決する方法があるかどうか疑問に思っています。

4

2 に答える 2

11

完全な開示のために、私は次のツールを書きました。これが広告のように見える場合は申し訳ありません。

OpenGL Loader Generatorを使用できます。OpenGL 関数をロードするためのヘッダーとソース ファイルを生成するツールです。関心のある拡張機能と OpenGL のバージョンを指定すると、それらのバージョンの列挙型と関数のみが出力されます。これがこのツールの主な機能です。つまり、使用する予定のものだけを含むクリーンなヘッダーとソース ファイルを取得します。

しかし、二次的な特徴は、生成のスタイルが異なることです。これらのスタイルは、出力の生成方法の詳細を定義します。

標準の「pointer_c」スタイル#defineは、関数がsである GLEW によく似たコードを生成します。グローバルにアクセス可能な変数/関数名を再定義できないため、これは実際には C では不可欠です。したがって、非ポインター関数と同じ名前の関数ポインターを定義することはできません。のようなglVertex3f; その名前は、一部のプラットフォームの OpenGL ライブラリによって既に定義されているため、新しいバージョンを定義することはできません。あなたは#defineそれを回避する必要があります。

一方、C++ には名前空間があります。したがって、「pointer_cpp」スタイルでは、ほとんどの OpenGL をgl名前空間に配置する C++ ヘッダーとソースを取得します。これは、ポインター CPP スタイルが #defines を使用する必要がないことも意味します。そうではありません。gl::Vertex3f実引数の型と名前を持つ関数ポインタです。適切なコード補完ツールであれば、これらを理解できるはずです。

「noload_cpp」スタイルは同じことを行います。違いは、呼び出す必要のある初期化関数がないことです。任意の関数ポインタを呼び出すことができ、まだロードされていない場合はその関数を動的にロードします。

この議論に拍車がかかったので、 func_cpp スタイルを含むツールのバージョンをリリースしました。これは、インライン関数を使用して呼び出しを関数ポインターに転送します。これは関数を直接使用しているため、これらを解析できない場合、オートコンプリート ツールに望みはありません。

于 2013-03-22T01:23:07.813 に答える
1

これが私の解決策です:

#ifdef USE_GLEW
    #include <GL/glew.h>
#else
    #warning "Not using GLEW"
    #define GL_GLEXT_PROTOTYPES
    #include <GL/gl.h>
    #include <GL/glext.h>
#endif

と...

// Initialize GLEW
#ifdef USE_GLEW
    glewExperimental = GL_TRUE;
    if (glewInit())
    {
        fprintf(stderr, "Failed to initialize GLEW.\n");
    }
#endif

次に、-DUSE_GLFWフラグを Makefile または CMakeList.txt に追加します。ただし、 .ycm_extra_conf.pyには追加しないでください

于 2014-08-05T17:18:29.157 に答える