LINUX.ORG.RU

Не компилируется openGL


0

1

Найдя какой то интересный код с новым опенГЛ решил его скомпилировать. Написал на скорую руку makefile (не очень умею их писать).

Вот что пишет

Много-много похожего...
FrameBuffer.cpp: In member function ‘void FrameBuffer::Check()’:
FrameBuffer.cpp:250:52: error: ‘glBindFramebufferEXT’ was not declared in this scope
  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _frame_id);
                                                    ^
FrameBuffer.cpp:251:57: error: ‘glCheckFramebufferStatusEXT’ was not declared in this scope
  status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
                                                         ^
FrameBuffer.cpp: In static member function ‘static void FrameBuffer::Unbind()’:
FrameBuffer.cpp:261:44: error: ‘glBindFramebufferEXT’ was not declared in this scope
  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

makefile

all:
	g++ -lGL -lGLU -lglut -lGLEW -lSDL glsl_water.cpp Shader.cpp ShaderProgram.cpp Timer.cpp VertexBuffer.cpp MeshLoader.cpp Light.cpp Texture.cpp Vector.cpp FrameTimer.cpp FrameBuffer.cpp -o hello


Ответ на: комментарий от deterok

Там огромный код из куче файлов который я скачал с инета.

‘glBindFramebufferEXT’ was not declared in this scope

Обычно такое когда не подключил библиотеку,но я вроде все указал. Или не все? Что надо тогда?

knotri
() автор топика
Ответ на: комментарий от knotri

Попробуйте так: g++ glsl_water.cpp Shader.cpp ShaderProgram.cpp Timer.cpp VertexBuffer.cpp MeshLoader.cpp Light.cpp Texture.cpp Vector.cpp FrameTimer.cpp FrameBuffer.cpp -o hello -lGL -lGLU -lglut -lGLEW -lSDL

DocBrown
()
#include <glext.h>

P.S. Ты же вроде GL 3+ учишь? Там glBindFramebuffer «из коробки», его и надо использовать, без EXT.

Deleted
()
Ответ на: комментарий от DocBrown

Попробуйте так: g++ glsl_water.cpp Shader.cpp ShaderProgram.cpp Timer.cpp VertexBuffer.cpp MeshLoader.cpp Light.cpp Texture.cpp Vector.cpp FrameTimer.cpp FrameBuffer.cpp -o hello -lGL -lGLU -lglut -lGLEW -lSDL

Тоже самое.

knotri
() автор топика
Ответ на: комментарий от knotri
[ megabaks@desktop ] ~ $ grep -RH glBindFramebufferEXT /usr/include/
/usr/include/GL/gl_mangle.h:#define glBindFramebufferEXT                MANGLE(BindFramebufferEXT)
/usr/include/GL/glext.h:GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer);
/usr/include/SDL/SDL_opengl.h:GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint);
[ megabaks@desktop ] ~ $

прозреваю нужность первого файла

megabaks ★★★★
()
Ответ на: комментарий от jo_b1ack

Какие? Сейчас так

#include <iostream>
#include <cmath>

#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glext.h>
#include <GL/glu.h>
#include <glew.h>
#include <glext.h> 

#include "Shader.h"
#include "ShaderProgram.h"
#include "FrameTimer.h"
#include "VertexBuffer.h"
#include "MeshLoader.h"
#include "Light.h"
#include "Texture.h"
#include "FrameBuffer.h"

knotri
() автор топика
Ответ на: комментарий от knotri

Я так понял, Вы собираете проект GLSL_water.

В комментариях (http://encelo.netsons.org/programming/opengl/) указано, что возникает ошибка при сборке: …/GLSL_deferred/src/FrameBuffer.cpp:257: undefined reference to `glBlitFramebufferEXT’

Решение проблемы: заменить ф-цию glBlitFramebufferEXT и все остальные на их эквиваленты без EXT (glBlitFramebufferEXT -> glBlitFramebuffer).

И еще. Для сборки требуется программа scons. В папке проетка выполнить: scons

P.S.: собрал проект, приложение работает.

DocBrown
()
Ответ на: комментарий от knotri

Обычно такое когда не подключил библиотеку,но я вроде все указал. Или не все? Что надо тогда?

При чем тут либа? Пути к нужным хидерам пропишите.

andreyu ★★★★★
()
Ответ на: комментарий от DocBrown

…/GLSL_deferred/src/FrameBuffer.cpp:257: undefined reference to `glBlitFramebufferEXT’

Это линкер ругается, а в топике проблема с хидерами.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Согласен. У ТС действительно по описанию была проблема с хедарами и я некорректно ответил первый раз. ТС забыл в Makefile указать дефайн GL_GLEXT_PROTOTYPES, а без него прототипы ф-ций были в хедере недоступны.

Кстати, рабочий Makefile у меня получился таким:

LIBS=-lGL -lGLU -lglut -lGLEW -lSDL -lSDL_image -lSDL_ttf CXXFLAGS=-DGL_GLEXT_PROTOTYPES INC=-Isrc

all: g++ ${CXXFLAGS} glsl_water.cpp src/Shader.cpp src/ShaderProgram.cpp src/Timer.cpp src/VertexBuffer.cpp src/MeshLoader.cpp src/Light.cpp src/Texture.cpp src/Vector.cpp src/FrameTimer.cpp src/FrameBuffer.cpp ${INC} ${LIBS} -o glsl_water

DocBrown
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.