2016-05-30 222 views
1

编辑:如果任何人有这样那样的错误,并且正在使用GLEW,使用OpenGL 4.5的功能的时候,下面会有所帮助:glClearBufferfv - 未在此范围内声明?

glewExperimental = GL_TRUE; 

后,只是初始化GLEW,你会没事的。

我刚刚开始与OpenGL。目前我正尝试用红色清除整个屏幕,如此代码所示:

#include "GLFW/glfw3.h" 

#define WIDTH 1280 
#define HEIGHT 720 

int main(void) 
{ 
    GLFWwindow *window; 

    if(!glfwInit()) { 
     return -1; 
    } 

    window = glfwCreateWindow(WIDTH, HEIGHT, "Test OpenGL", NULL, NULL); 

    if(!window) { 
     glfwTerminate(); 
     return -1; 
    } 

    glfwMakeContextCurrent(window); 
    static GLfloat red[] = {1.0f, 0.0f, 0.0f, 1.0f}; 
    glClearBufferfv(GL_COLOR, 0, red); 

    while(!glfwWindowShouldClose(window)) { 
     //glEnableClientState(GL_VERTEX_ARRAY); 
     //glDisableClientState(GL_VERTEX_ARRAY); 

     glfwSwapBuffers(window); 
     glfwPollEvents(); 
    } 

    glfwTerminate(); 
    return 0; 
} 

但是有一个问题。我使用g ++来编译在Code :: Blocks中编写的代码。此外,我正在学习OpenGL SuperBible第7版,在那里我得到了用红色清除屏幕的代码。在我使用之前glClearColor(255,0,0,0)然后glClear(GL_COLOR_BUFFER_BIT); 但在这本书中的屏幕与glClearBufferfv,会抛出以下异常清除:

错误:“glClearBufferfv”在此范围

当然,我想使用的代码未声明为了学习的目的,所以这将是伟大的,如果这将工作。可悲的是,它并没有。任何想法,为什么?

回答

1

glClearBufferfv是一个较新的OpenGL函数,这意味着说OpenGL的图形卡在技术上可能不支持它。这意味着该功能需要由您或OpenGL loading library加载加载,然后才能使用它。

SuperBible示例代码随gl3w加载程序一起作为其s7辅助程序库的一部分。你既可以:

  • 使用S7,这在本书中的其它例子将可能取决于以及
  • 跳过S7和使用gl3w或任何其他装载机,像我个人最喜欢的libepoxy
  • 不使用装载机和load the functions you need by hand。这很快乏味,但这确实意味着你会看到发生了什么。

GLFW documentation也有一些有用的指针。

+0

好吧,所以我开始使用GLEW,这似乎是我的目的最好的,但现在我得到以下错误:未定义的引用_imp______glewClearBufferfv我也往往宁愿不使用sb7.h,因为我不'计划在未来使用它。 – AProgrammer

+0

这听起来像一个链接问题。您是否阅读过GLEW的[安装说明](http://glew.sourceforge.net/install.html)? –

+0

那么,我在此期间尝试了其他的东西。我在包含glew.h之前定义了GLEW_STATIC,并且链接到了glew32s.lib,而不是glew32.lib,但它对我没有任何作用。所以我想,我会使用gl3w然后,正如你所建议的(为什么我甚至不使用它?:D)有一件事,我想问:链接器的加载顺序是否正确?:glfw3,opengl32, gdi32,include \ Win32 \ glew32s.lib – AProgrammer