2013-02-26 31 views
8

Tôi đang làm việc trên máy Mac, tôi đã được biên dịch và cài đặt FreeGlut, nhưng dường như tôi không thể có được bối cảnh OpenGL 3.2 với nó. Tuy nhiên, tôi có thể nhận được nó mà không có bất kỳ vấn đề trong khi sử dụng GLFW. Vì vậy, trong GLFW, mã này hoạt động hoàn toàn tốt đẹp:GLFW mở ngữ cảnh OpenGL 3.2 nhưng Freeglut không thể - tại sao?

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwOpenWindow(500, 500, 8, 8, 8, 8, 24, 8, GLFW_WINDOW) 

Nhưng với FreeGlut, mã này không thành công (trên glutCreateWindow):

glutInitContextVersion (3, 2); 
glutInitContextProfile(GLUT_CORE_PROFILE); 
glutInitWindowSize (width, height); 
glutInitWindowPosition (300, 200); 
int window = glutCreateWindow (argv[0]); 

Các lỗi nó không thành công với là:

X Error of failed request: BadRequest (invalid request code or no such operation) 
    Major opcode of failed request: 34 (X_UngrabKey) 
    Serial number of failed request: 29 
    Current serial number in output stream: 29 

Tôi đang chạy trên MacOS X 10.8 Mountain Lion, với đồ họa Intel HD4000, đã cài đặt XQuartz làm máy chủ X11 của tôi và đã biên dịch và cài đặt FreeGlut 2.8 từ các nguồn.

Có ai biết vấn đề có thể là gì không?

+0

Có vấn đề chính xác nhưng tôi đang sử dụng FreeGlut như được bao gồm trong XQuartz (opt/x11/lib opt/x11/include). Bạn đã giải quyết được vấn đề chưa? – Christoph

+0

Cùng một vấn đề ở đây - bạn có thể giải quyết vấn đề không? –

+0

Có ai trong số các bạn giải quyết được vấn đề không? Tôi đang gặp vấn đề tương tự.Tôi đang sử dụng freeGlut bao gồm trong XQuartz – ammar26

Trả lời

1

Trong 10.8 và 10.7 GL 3.2 có sẵn nếu bạn gọi một cách rõ ràng khi thiết lập ngữ cảnh GL. Apple gọi đây là "Tiểu sử cốt lõi" để phân biệt với "Tiểu sử cũ" là GL 2.1.

Tôi đã gặp sự cố này với Wine trên OSX, nó không hỗ trợ OpenGL 3.2. Sự hiểu biết của tôi là máy chủ X11 (hoặc Apple X11 hoặc XQuartz) hiện không thực hiện hỗ trợ 3.2, cũng như không có chuyển đổi để lật một nơi nào đó để kích hoạt nó. Nó có thể là mối quan tâm đối với khả năng tương thích từ 3,2 hồ sơ sẽ phá vỡ một số existing GL applications

This post suggests sử dụng GLFW (hoặc có thể GLUT.framework của Apple nếu vẫn còn là một điều như vậy)

This page giải thích GL ngăn xếp trên OSX và khẳng định 2.1 vấn đề với GLX.

+0

Tôi xin lỗi, nhưng không thấy làm thế nào điều này liên quan đến câu hỏi của tôi. Như tôi đã trình bày - nó hoạt động với GLFW, chạy trên đỉnh XQuartz trên hệ thống của tôi, vì vậy nó chắc chắn hỗ trợ 3,2 ngữ cảnh. – gambiting

+0

Tôi xin lỗi, nhưng không thấy điều này liên quan đến câu hỏi của tôi như thế nào. Như tôi đã nói - OpenGL 3.2 DOES làm việc với GLFW, chạy trên đầu trang của XQuartz trên hệ thống của tôi, do đó, nó chắc chắn hỗ trợ 3,2 ngữ cảnh. Vấn đề duy nhất của tôi là tôi muốn sử dụng thẻ miễn phí, hoàn toàn vì nó thuận tiện hơn. Nhưng nếu điều đó là không thể, thì tôi sẽ phát triển bằng GLFW. Nhưng xin đừng nói với tôi rằng không thể có được 3.2 ngữ cảnh, bởi vì tôi đã có một bối cảnh. – gambiting

+1

glfw cũng có một [Cocoa và Carbon port] (http://sourceforge.net/p/glfw/svn/1617/tree/trunk/lib/), bạn có chắc chắn nó đang chạy trên đầu trang của XQuartz? – wally

0

Freeglut là một triển khai mở rộng của Bộ công cụ SGI GLUT, và (với một vài ngoại lệ xung quanh phần cứng lỗi thời) thực hiện các chức năng tương tự.

Thật không may, điều này bao gồm một số tính năng có thể phá vỡ trong việc triển khai CORE/FORWARD COMPATIBLE nghiêm ngặt. Thông thường, nếu bạn yêu cầu một bối cảnh KHÔNG chỉ định một phiên bản hoặc hồ sơ, bạn sẽ nhận được sự kết hợp tốt nhất giữa bộ điều khiển và bộ công cụ GL, đây là một cấu hình tương thích, chứ không phải là cấu hình cốt lõi.

Lưu ý rằng điều duy nhất bạn bị mất thông qua sử dụng hồ sơ tương thích là việc kiểm tra nghĩa vụ cho các chức năng không dùng nữa. Tất cả chức năng cốt lõi mới sẽ hoạt động mà không có vấn đề gì.

Vấn đề này với thẻ miễn phí không bị giới hạn đối với Apple, nó cũng hiển thị trong Linux bằng cách sử dụng một số trình điều khiển Gallium. Không rõ là có bất kỳ ý định ngắn hạn nào để khắc phục điều này, vì vậy nếu bạn cần sử dụng CORE/FORWARD COMPATIBLE, có lẽ bạn nên chuyển sang GLFW hoặc SDL.

0

Bạn cần bao gồm cờ. thường theo Phiên bản. Hình ảnh trông giống như sau:

glutInitContextFlag(GLUT_FOWARD_COMPATIBLE); 
Các vấn đề liên quan