2014-01-06 95 views
0

我試圖初始化GLEW 1.10GLFW3的最新版本一起。我已經設法讓GLFW3在沒有問題的情況下工作,但是GLew相當困難。我跟着從如何初始化GLEW網站的例子,但glewInit()出於某種原因是不確定的,glewGetContext identifier not found/undefined(在底部錯誤):廣東話初始化GLEW與GLFW3

#include <GLew110\glew.h> 
#define GLFW_INCLUDE_GLU 
#include <GLFW/glfw3.h> 
#include <stdlib.h> 
#include <stdio.h> 

static void error_callback(int error, const char* description) 
{ 
    fputs(description, stderr); 
} 
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) 
{ 
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) 
    glfwSetWindowShouldClose(window, GL_TRUE); 
} 
int main(void) 
{ 
    GLFWwindow* window; 
    glfwSetErrorCallback(error_callback); 
    if (!glfwInit()) 
     exit(EXIT_FAILURE); 
    window = glfwCreateWindow(800, 600, "Simple example", NULL, NULL); 
    if (!window) 
    { 
     glfwTerminate(); 
     exit(EXIT_FAILURE); 
    } 

    GLenum err = glewInit(); // <---- "glewGetContext" is undefined (line 29) 
    if (GLEW_OK != err) 
    { 
     /* Problem: glewInit failed, something is seriously wrong. */ 
     fprintf(stderr, "Error: %s\n", glewGetErrorString(err)); 

    } 

    glfwMakeContextCurrent(window); 
    glfwSetKeyCallback(window, key_callback); 
    while (!glfwWindowShouldClose(window)) 
    { 
     float ratio; 
     int width, height; 
     glfwGetFramebufferSize(window, &width, &height); 
     ratio = width/(float) height; 
     glViewport(0, 0, width, height); 
     glClear(GL_COLOR_BUFFER_BIT); 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     glOrtho(-ratio, ratio, -1.f, 1.f, 1.f, -1.f); 
     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 
     glRotatef((float) glfwGetTime() * 50.f, 0.f, 0.f, 1.f); 
     glBegin(GL_TRIANGLES); 
     glColor3f(1.f, 0.f, 0.f); 
     glVertex3f(-0.6f, -0.4f, 0.f); 
     glColor3f(0.f, 1.f, 0.f); 
     glVertex3f(0.6f, -0.4f, 0.f); 
     glColor3f(0.f, 0.f, 1.f); 
     glVertex3f(0.f, 0.6f, 0.f); 
     glEnd(); 
     glfwSwapBuffers(window); 
     glfwPollEvents(); 
    } 
    glfwDestroyWindow(window); 
    glfwTerminate(); 
    exit(EXIT_SUCCESS); 
} 

兩個錯誤列表:

error C3861: 'glewGetContext': identifier not found (line 29 pointing to glewInit()) 
IntelliSense: identifier "glewGetContext" is undefined (line 29) 
+0

這聽起來像一個編譯/鏈接的問題,但是這不是100%來自這個問題清楚了。請發佈一個完整的小示例程序來顯示問題(它聽起來像一個只有'glewInit()'調用)的程序,然後複製/粘貼確切的錯誤消息。 –

+0

@MichaelBurr感謝您的回覆。我更新了代碼(可運行)並列出了底部收到的兩個錯誤。刪除假設初始化GLew的代碼將顯示一個旋轉的彩色三角形。 – SpicyWeenie

+0

glewinit後應glfwMakeCurrentContext –

回答

1

東西是定義用於爲多個渲染上下文配置glew庫的宏GLEW_MX。用這種配置進行建設需要一些特殊的準備。以下是從(強調)http://glew.sourceforge.net/advanced.html

多個渲染上下文(GLEW MX)

與版本1.2.0,線程安全支持多 渲染上下文,可能具有不同的能力作爲原料,可用 。由於大多數用戶不需要此功能,因此不會將 添加到二進制發行版中,以保持不同版本的 版本之間的兼容性。包括多情境的支持,你所要做的 如下:

  • 編譯和使用GLEW與定義的GLEW_MX預處理程序標記。
  • 對於每個渲染上下文,創建一個GLEWContext對象,只要渲染上下文存在,該對象就可用。
  • 定義名爲glewGetContext宏或函數()一個返回指針到與從其的OpenGL/WGL/GLX呼叫發出的渲染 上下文相關聯的GLEWContext對象。這個調度 機制是原始的,但通用的。
  • 確保在每個渲染上下文中創建GLEWContext對象後調用glewInit()。請注意,由glewGetContext()返回的GLEWContext指針 必須駐留在全局或線程本地 內存中。

如果你不需要多個渲染環境,最好的辦法可能是找出GLEW_MX正在建立並解決它。

1

以防萬一有人有類似的問題。 請嘗試調用glfwMakeContextCurrent後打電話到glewInit :)

/* Make the window's context current */ 
glfwMakeContextCurrent(window); 
int glewErr = glewInit();