Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 为什么mingw对“glUseProgram';”给出了一个未定义的引用;?_Windows_Opengl 3_Mingw32_Sdl 2 - Fatal编程技术网

Windows 为什么mingw对“glUseProgram';”给出了一个未定义的引用;?

Windows 为什么mingw对“glUseProgram';”给出了一个未定义的引用;?,windows,opengl-3,mingw32,sdl-2,Windows,Opengl 3,Mingw32,Sdl 2,该程序是使用SDL2和openGL用C编写的。只要我说出来 //glUseProgram(0); 程序编译、运行并显示GLC清除的颜色。包括总账版本检查: const char* renderer = (const char*) glGetString(GL_RENDERER); puts(renderer); const char* version = (const char*) glGetString(GL_VERSION); puts(version); const char* glsl

该程序是使用SDL2和openGL用C编写的。只要我说出来

//glUseProgram(0);
程序编译、运行并显示GLC清除的颜色。包括总账版本检查:

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
和gl错误检查:

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)未注释时,我得到以下错误:

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"
该程序在Windows XP上使用.bat文件执行。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
如果您不知道.bats,只需将命令中的%file%和%libs%替换为变量中的字符串


问题似乎是上下文不支持后面的glUseProgram函数,除非上下文是3.2版,它确实支持该函数。在这种情况下,问题似乎围绕着SDL_opengl.h include选择了一个错误的lopengl32。但坦率地说,我并不真正理解这个链接的东西,这就是为什么我要问这个问题

Microsoft Windows OpenGL API最多只有1.X版的函数。(因为他们希望您使用Direct3D。)


要在MS Windows上使用现代OpenGL-heck(比1995年更新的任何东西),您需要一个扩展管理器,如GLEW或GLEE。有关详细信息,请参阅OpenGL SuperBible,任何版本。

感谢您指出问题所在,但我知道SDL2不再与GLEW兼容。我想没有人知道从gl dll的图形卡版本中获取所需功能的代码。