Opengl 带有Dev-C++;SDL呢?
我正要用Dev-C++在Windows下重建我的库;但是,我同时添加的着色器功能不受支持,编译器无法找到相关函数(::glCreateShader(),::glCreateProgram()等) 翻阅互联网和Dev-C++文件夹,我发现OpenGL实现(gl.h)只有v1.1版。我发现可以从下载最新的标题。然而,经过仔细研究,我发现gl3.h并没有包含在我的项目中,我应该看看SDL/SDL_opengl.h EDIT:SDL\u opengl.h确实包含gl.h并声明了相关函数的原型。所以问题是,为什么我给出编译时错误而不是链接器错误 (我的库只链接到mingw32、libOpenGL32、libSDL、libSDL_Image和libSDL_Mixer,就像在OSX下一样(当然,除了mingw32),我没有任何问题。)Opengl 带有Dev-C++;SDL呢?,opengl,sdl,shader,dev-c++,Opengl,Sdl,Shader,Dev C++,我正要用Dev-C++在Windows下重建我的库;但是,我同时添加的着色器功能不受支持,编译器无法找到相关函数(::glCreateShader(),::glCreateProgram()等) 翻阅互联网和Dev-C++文件夹,我发现OpenGL实现(gl.h)只有v1.1版。我发现可以从下载最新的标题。然而,经过仔细研究,我发现gl3.h并没有包含在我的项目中,我应该看看SDL/SDL_opengl.h EDIT:SDL\u opengl.h确实包含gl.h并声明了相关函数的原型。所以问题是
如何在Dev-C++和SDL中使用openglv2.0着色器 您能否在运行时加载函数的地址
typedef GLhandle (APIENTRYP PFNGLCREATESHADERPROC) (GLenum shaderType);
PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC)wglGetProcAddress("glCreateShader");
typedef GLhandle (APIENTRYP PFNGLCREATEPROGRAMPROC) ();
PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
glCreateProgram = (PFNGLCREATEPROGRAMPROC)wglGetProcAddress("glCreateProgram");
h仅适用于OpenGL 1.1(在某些情况下,根据您使用的文件版本和操作系统,最高可达1.3)。对于您另外需要的所有内容,可能是(Linux/Unix)或(Windows) 更新版本的OpenGL中的所有函数必须在运行时链接。因此,为了使用它们,您必须获得正确的函数地址并将其分配给函数指针。要做到这一点,最简单的方法是使用以下内容 手动方式如下所示:
PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC) wglGetProcAddress("glCreateShader");
或者对于Linux:
PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC) glXGetProcAddress((GLubyte*) "glCreateShader");
如果在包含GLEXT.h之前定义GL_GLEXT_原型,可以省略第一行
EDIT:SDL\u opengl.h看起来像是包含了glext.h的副本(但不是最新的)。因此,如果您使用,上述内容仍然有效。如果要使用单独的glext.h,则必须在包含SDL_opengl.h之前定义NO_SDL_glext。此外,只要没有定义GL_GLEXT_原型,或者您自己编写原型,函数原型就不可用
EDIT2:显然SDL有自己的GetProcAddress函数调用。你到底为什么要使用Dev-C++?帮自己一个忙,使用一个在过去4年中更新过的IDE。(即使在支持的情况下,这也不是错误和缺乏功能)为什么选择Dev-C++而不是VC++2008 Express?这是一个公平的观点,我不能说我没有看到它的到来。Windows不是我的主要平台,我讨厌清单和6种风格的MSVC运行时。另外,我打算为GP2X开发,它的官方devkit是一个精疲力竭的Dev-C++,所以我认为它很方便。。。是的,不是。IDE的选择是一个品味的问题,但是DevC++不再更新了。他指定的继任者是Code::Blocks()。所以选择这个,或者尝试其他(Eclipse,VC+Express),找到你最喜欢的,但是你不应该再使用DEV C++了。谢谢你的提示,我曾经使用VS,也许我会回到那个。我还没有听说过Eclipse,我肯定会检查一下它,如果它不起作用,我仍然可以使用Code::Blocks。“此外,只要没有定义GL_GLEXT_原型,或者您自己编写原型,函数原型就不可用。”