2013-11-13 2 views
1

Программа написана на C с использованием SDL2 и openGL. До тех пор, пока я прокомментируюПочему mingw дает неопределенную ссылку на `glUseProgram '?

//glUseProgram(0); 

программа компилирует и запускает и отображает цвет glCleared. В том числе ГЛ версия проверки:

const char* renderer = (const char*) glGetString(GL_RENDERER); 
puts(renderer); 
const char* version = (const char*) glGetString(GL_VERSION); 
puts(version); 
const char* glslVersion = (const char*) glGetString(GL_SHADING_LANGUAGE_VERSION); 
puts(glslVersion); 

Какой Распечатайте:

ATI Radeon HD 5670 
3.2.11927 Core Profile Context 
4.20 

И проверка ошибок ГЛ:

GLenum error = glGetError(); 
switch(error){ 
    case GL_NO_ERROR: puts("no error"); break; 
    case GL_INVALID_ENUM: puts("invalid enum"); break; 
    case GL_INVALID_VALUE: puts("invalid value"); break; 
    case GL_OUT_OF_MEMORY: puts("out of memory"); break; 
    case GL_INVALID_FRAMEBUFFER_OPERATION: puts("invalid framebuffer operation"); break; 
    default: break; 
} 

который печатает:

no error. 

Но когда glUseProgram (0) раскоментирован Я получаю followi нг ошибка:

D:\TEMP\ccSTF4cr.o:App.c:(.text+0x320): undefined reference to 'glUseProgram 

Я также получаю:

App.c:54.2: warning: implicit declaration of function 'glUseProgram' 

Включенные файлы:

#include "SDL2/SDL.h" 
#include "SDL2/SDL_opengl.h" 

Программа выполняется с помощью .bat файла в Windows XP. .bat является:

del /F /Q bin\app.exe 

set files=main.c App.c EventHub.c Game.c MainShader.c 
set libs=-LD:\environments\minGW\mingw32\lib -lmingw32 -lopengl32 -lSDL2main -mwindows -lSDL2 
set objs=bin\main.obj 

gcc -Wall -o bin/app %files% %libs% 

bin\app.exe 

Если вы не знаете, .BAT-файлов, то% файл% и% ЛИЭС% в команде просто заменить строки в переменных.

Проблема будет заключаться в том, что контекст не поддерживает более позднюю функцию glUseProgram, за исключением того факта, что контекст представляет собой версию 3.2, которая поддерживает эту функцию. В этом случае проблема, кажется, вокруг SDL_opengl.h включает в себя сбор неверного -lopengl32. Но, честно говоря, я действительно не понимаю этот связующий материал, из-за которого я задаю вопрос.

ответ

2

API OpenGL Microsoft Windows имеет функции от версии 1.X в лучшем случае. (Потому что они предпочли бы, чтобы вы использовали Direct3D.)

Чтобы использовать современный OpenGL - что-то новое, чем в 1995 году - в MS Windows вам нужен менеджер расширений, такой как GLEW или GLEE. Для получения дополнительной информации см. OpenGL SuperBible, любое издание.

+0

Thankyou для pin указывает, где проблема, но я понимаю, что SDL2 больше не совместим с GLEW. Я не думаю, что кто-то знает какой-либо код для захвата требуемой функциональности из версии графических карт gl dll. – ste3e

+0

Я был неправ. Glew совместим – ste3e

Смежные вопросы