0

eclipse CDT を使用して C++ プログラムを作成しています。しかし、Eclipse と GCC コンパイラーは glShaderSource() を認識できません。ヘッダーを「ロード」するには、次のようにします。

#include <GL/glew.h>
#include "Shader.h"

そして、それがエラーを生成するコードです。

void Shader::setShaders(const char* vsFile, const char* fsFile) {
    char *vs, *fs;

    v = glCreateShader(GL_VERTEX_SHADER);
    f = glCreateShader(GL_FRAGMENT_SHADER);

    vs = textFileRead(vsFile);
    fs = textFileRead(fsFile);

    const char * vv = vs;
    const char * ff = fs;

    glShaderSource(v, 1, &vv, NULL);
    glShaderSource(f, 1, &ff, NULL);

    free(vs);
    free(fs);

    glCompileShader(v);
    glCompileShader(f);

    p = glCreateProgram();

    glAttachShader(p, v);
    glAttachShader(p, f);

    glLinkProgram(p);
    glUseProgram(p);
}

すべての GL 関数が見つかりません。たとえば、次のエラーが表示されます。

Function 'glCreateShader' could not be resolved

Eclipse は glext-header を認識できると言っています。他の GL 関数は機能します (1.0 関数)。

[ OLD: ] GLext を次の方法でインストールしました

sudo pacman -S glext

そして、 Package をインストールしましたgtkglextが、これが唯一の選択肢でした。

本当に何をするか計画がありません。追加のlibGLEXT.soなどもありません。私はlibGL、libGLUなどしか持っていません。

4

3 に答える 3

2

あなたの問題は、拡張関数が通常のエクスポートを通じて OpenGL API ライブラリによって公開されるのではなく、拡張メカニズムを通じて公開されることです。拡張機能のロードは、プラットフォーム固有の function を使用して行われxxxGetProcAddressますxxx。拡張機能のロードは面倒ですが、そのコードは OpenGL 仕様から自動生成できるため、GLEW プロジェクトはまさにそれを行いました。

GLEW ( http://glew.sf.net ) は、退屈なタスクを実行する拡張ローダー/ラッパー ライブラリです。このようなライブラリは他にもありますが、GLEW が最もよく維持されています。

于 2012-02-15T17:29:44.720 に答える
0

拡張機能の読み込みにはGLEWをお勧めします。

于 2012-02-15T16:43:06.847 に答える
0

GL拡張機能でも同様の問題がありました。GLEWソースをダウンロードし、プロジェクトで静的にリンクすることで、なんとか修正できました。ただし、これは面倒だったので、フォーラムをさらに深く検索したところ、この解決策が見つかりました。Linux では、GL_GLEXT_PROTOTYPES を定義するだけです。このソリューションは Windows では機能しません。いつものように、Windows の方が「簡単」なので、glew または glext の構成とリンクと戦う必要があります。

私にとっては、QtCreator のプロジェクト オプションに追加したときに機能しました。すべての IDE には、プロジェクト/ビルド オプションに定義のある場所が必要です。これをリストに追加しました: -DGL_GLEXT_PROTOTYPES

私は#includeを持っていますが、それが必要かどうかはわかりません:)とにかく、GLとGLU以外の他のライブラリに明示的にリンクしていません。

于 2012-02-19T17:19:40.887 に答える