2016-05-30 225 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