2013-10-01 153 views
1

我正在將OpenGL程序遷移到C++。我擁有的所有圖書館都包括轉換,除了一個。在我的顯示功能,我有這條線(在屏幕上顯示文本):glWindowPos2i未在此範圍內聲明

glWindowPos2i(5,5); 

當我運行該程序作爲一個.C或當我運行它在OSX一個.cpp這工作得很好。但是我也需要它在Linux上編譯爲.cpp。當我去編譯它那裏,我得到這個錯誤:

error: 'glWindowPos2i' was not declared in this scope

我想不通,如果這是一個缺少庫或正在發生的事情。有誰知道我需要做些什麼來獲得這一行編譯?

回答

2

那是因爲glWindowPos__ (...)作爲擴展名開始生效:GL_ARB_window_pos。它已經集成到1.4版本的核心OpenGL中。

你很幸運能夠在OS X上實現支持OpenGL 2.1/3.2(更新版本)的開放OpenGL。在Linux中,情況大不相同。您必須使用GLX API在運行時加載glWindowPos__ (...)函數入口點(因爲它們由顯示驅動程序提供)。

解決這個問題最簡單的方法就是將GLEW庫集成到您的構建環境中,用於非OS X目標構建。您將在Microsoft Windows中遇到同樣的問題,因爲Windows只隨OpenGL 1.1庫一起提供開箱即用 - 顯示驅動程序在運行時對其進行擴展,就像在Linux中一樣。

GLEW將負責在Windows和Linux上加載OpenGL庫中未提供的函數入口點,並使整個過程變得輕鬆。只記得當你在OS X上構建你的軟件時禁用GLEW,這是沒有必要的,如果你在OS X中鏈接到它,它實際上會產生更多問題。

+0

謝謝。讓我看看它。 – Alex

+1

其實你沒有使用GLX *協議*(這是一個有線協議,並沒有指針通過電線)。您正在從GLX客戶端庫中檢索功能地址(這實際上是一個庫,而不僅僅是一個API)。重要的副作用:雖然Windows上的擴展功能地址可能因上下文而異,但它們與GLX保持不變。 GLX客戶端庫中擴展功能的可用性並不意味着服務器支持該功能;你必須檢查它的擴展字符串。 – datenwolf