2012-06-03 76 views
3

我遇到了麻煩的OpenGL 3.2到獅跑採用Derelict3和GLFW(OSX 10.7.4)3.在OSX利用OpenGL 3.2 Derelict3和GLFW 3獅子

這裏是我的測試程序:

module glfw3Test; 

import std.stdio, std.conv; 
import derelict.glfw3.glfw3; 
import derelict.opengl3.gl3; 

string programName = "glfw3Test"; 
int width = 640; 
int height = 480; 

GLFWwindow window; 

void main() { 
    // load opengl 
    DerelictGL3.load(); 
    // load GLFW 
    DerelictGLFW3.load(); 

    if(!glfwInit()) { 
     glfwTerminate(); 
     throw new Exception("Failed to create glcontext"); 
    } 

    writefln("GLFW:  %s", to!string(glfwGetVersionString())); 

    window = glfwOpenWindow(width, height, GLFW_WINDOWED, programName.ptr, null); 
    if(!window) { 
     glfwTerminate(); 
     throw new Exception("Failed to create window"); 
    } 

    // Request opengl 3.2 context 
    // based off the GLFW FAQ: http://www.glfw.org/faq.html#4_2 
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
    glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 

    DerelictGL3.reload(); 

    // Print OpenGL and GLSL version 
    writefln("Vendor: %s", to!string(glGetString(GL_VENDOR))); 
    writefln("Renderer: %s", to!string(glGetString(GL_RENDERER))); 
    writefln("Version: %s", to!string(glGetString(GL_VERSION))); 
    writefln("GLSL:  %s\n", to!string(glGetString(GL_SHADING_LANGUAGE_VERSION))); 
} 

我得到這樣的輸出:

GLFW:  3.0.0 dynamic 
Vendor: NVIDIA Corporation 
Renderer: NVIDIA GeForce 9400M OpenGL Engine 
Version: 2.1 NVIDIA-7.18.18 
GLSL:  1.20 

我檢查了,似乎我的顯卡應該support up to OpenGL 3.3

回答

5

我所要做的就是指定一些窗口提示調用glfwOpenWindow

... 

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 

window = glfwOpenWindow(width, height, GLFW_WINDOWED, programName.ptr, null); 

... 
-7

問題不在於您的視頻卡,而是使用OSX視頻驅動程序。 OS X僅支持OpenGL 2.1和OpenGL ES 2. 有關詳細信息,請參閱this table

+0

但他們不是在10.7.2+開始支持它嗎?如果你切換到'核心',你會得到這個:https://developer.apple.com/graphicsimaging/opengl/capabilities/GLInfo_1073_Core.html – bjz

+4

-1:這個答案是錯誤的。 –

3

Lion支持OpenGL 3.2。你需要在你的代碼,以指定的OpenGL 3.2核心支持

OpenGL Profiles (Mac OS X v10.7)

Updating an Application to Support the OpenGL 3.2 Core Specification

+1

我看到問題在哪裏。在遺棄cgl.d,代碼來自OS X 10.4。如果你使用你提供的代碼片段運行glfw而沒有廢棄,你會得到一個正確的OpenGL 3.2上下文 – iromu

+0

你認爲這可能是一個問題,我如何在Lion上編譯glfw3?我嘗試了一個[簡單的C程序](http://hastebin.com/banecacoce.coffee),我在其中指定了GL版本,並且無法加載窗口(錯誤是「請求的OpenGL版本不可用」)。 – bjz

+0

目前我用CMake生成GLFW的xcode項目,然後運行'$ sudo xcodebuild -sdk macosx10.7 -target install' – bjz