glFogCoordf не был объявлен в этой области

Я работаю с некоторыми примерами OpenGL из Руководства по программированию версии 2.1.

Я знаю, что должен использовать OpenGL версии 4, потому что она уже устарела, и я буду работать над версией 4, так что не беспокойтесь об этом.

У меня проблема в том, что в одном из примеров используется функция glFogCoordf, которой, по-видимому, не существует!

Код:

#include <GL/glut.h>
#include <cstdlib>
#include <iostream>

static GLfloat f1, f2, f3;

static void init()
{
    GLfloat fogColor[4] = { 0.0, 0.25, 0.5, 1.0 };
    f1 = 1.0f;
    f2 = 5.0f;
    f3 = 10.0f;

    glEnable(GL_FOG);
    glFogi(GL_FOG_MODE, GL_EXP);
    glFogfv(GL_FOG_COLOR, fogColor);
    glFogf(GL_FOG_DENSITY, 0.25);
    glHint(GL_FOG_HINT, GL_DONT_CARE);
    glFogi(GL_FOG_COORD_SRC, GL_FOG_COORD);

    glClearColor(0.0, 0.25, 0.25, 1.0);
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1.0f, 0.75f, 0.0f);
    glBegin(GL_TRIANGLES);
    glFogCoordf(f1);
    glVertex3f(2.0f, -2.0f, 0.0f);
    glFogCoordf(f2);
    glVertex3f(-2.0f, 0.0f, -5.0f);
    glFogCoordf(f3);
    glVertex3f(0.0f, 2.0f, -10.0f);
    glEnd();

    glutSwapBuffers();
}

Все остальные функции gl...() работали раньше, теперь glFogCoord{fd}() и glFogCoord{fd}v(), похоже, не существуют... У меня никогда не было ни одной из этих двух работающих, и функция завершения кода внутри CodeBlocks не распознает никаких дополнений для «glFog».

Кто-нибудь знает, в чем может быть причина этого?


person FreelanceConsultant    schedule 18.07.2013    source источник


Ответы (2)


glFogCoord():

Примечания

glFogCoord доступен только если версия GL 1.4 или выше.

Проверьте свой GL_VERSION. Если это 1.1, вы вероятно используете Windows. opengl32.dll экспортирует только API OpenGL 1.1.

Используйте что-то вроде GLEW, чтобы загрузить "новые" точки входа API.

person genpfault    schedule 18.07.2013
comment
*Linux: P - glGetString() дает мне: 3.0 Mesa 9.1.3 - person FreelanceConsultant; 18.07.2013
comment
Механизм расширения по-прежнему является необходимым способом получения таких указателей на функции. Windows opengl32.dll экспортирует только функции GL 1.1, в Linux есть полустандарт, требующий экспорта GL1.2, но glFogCoord из GL 1.4... - person derhass; 22.08.2015

РЕДАКТИРОВАНИЕ: не делайте этого! Смотрите комментарий по причине.

Вам нужно добавить:

#define GL_GLEXT_PROTOTYPES

перед включением GL/glut.h.

person smiszym    schedule 22.08.2015
comment
Не делай этого. Это просто говорит glext.h объявить прототипы. Но это не волшебным образом заставляет различные библиотеки GL экспортировать символы, в которые они не обязаны экспортировать. Единственный надежный способ получить доступ к этим функциям — запрашивать указатели во время выполнения с помощью механизма расширения OpenGL. - person derhass; 22.08.2015