OpenGL Archlinux GLext не распознается.(РЕДАКТИРОВАТЬ: GLEW тоже не работает) - PullRequest
0 голосов
/ 15 февраля 2012

Я использую 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

А затем установил пакет gtkglext, который был единственным выбором.

У меня действительно нет планачто делать.Также нет никакого дополнительного libGLEXT.so или чего-то в этом роде, у меня есть только libGL, libGLU и другие.

Ответы [ 3 ]

2 голосов
/ 15 февраля 2012

Ваша проблема в том, что функции расширения предоставляются не библиотекой API OpenGL через обычный экспорт, а через механизм расширения.Загрузка расширений выполняется с помощью функции xxxGetProcAddress, где xxx зависит от платформы.Поскольку загрузка расширений утомительна, но код для нее может быть автоматически сгенерирован из спецификации OpenGL, проект GLEW сделал именно это.

GLEW (http://glew.sf.net) - библиотека загрузчика / оболочки расширений, которая выполняетутомительное задание для вас.Есть и другие подобные библиотеки, но GLEW, безусловно, лучше всего поддерживается.

0 голосов
/ 19 февраля 2012

У меня были похожие проблемы с функциями расширения GL.Мне удалось это исправить, загрузив исходный код GLEW и статически ссылаясь на него в моем проекте.Это, однако, раздражало, поэтому я заглянул глубже на форумах и нашел это решение.В Linux вам просто нужно определить GL_GLEXT_PROTOTYPES.Это решение не будет работать на Windows!Как всегда, в Windows это «проще», поэтому нужно будет бороться с конфигурацией и связью glew или glext.

Для меня это сработало, когда я добавил его в опции проекта QtCreator.Каждая IDE должна иметь место с определениями в параметрах проекта / сборки.Я добавил это в список: -DGL_GLEXT_PROTOTYPES

У меня есть #include, но я не уверен, что он мне нужен :) В любом случае, я не связывался явно ни с какими другими библиотеками, кроме GL и GLU.

0 голосов
/ 15 февраля 2012

Я бы рекомендовал GLEW для загрузки расширения.

...