2011-12-19 25 views
5

Tôi đang gặp sự cố khi cập nhật tiêu đề GL của mình. Về cơ bản tôi muốn truy cập chức năng glCompressedTexImage2D nhưng tiêu đề gl của tôi thực sự cũ và tôi không tin rằng chức năng đó tồn tại trong các tiêu đề đó. Vì vậy, tôi đã cố gắng để cập nhật tập tin gl.h của tôi nhưng tôi nhận được vô số lỗi. Tôi đã thử cập nhật phần mềm cạc đồ họa của mình trong số những thứ khác. Bất cứ ai có thể được giúp đỡ?opengl, cách cập nhật tiêu đề tốt nhất với studio trực quan?

Trả lời

3

Rõ ràng, Windows bị kẹt trên phiên bản OpenGL cũ (1.2?). Hãy thử sử dụng GLEW hoặc Glee để tải tiện ích mở rộng cần thiết (GL_ARB_TEXTURE_COMPRESSION trong trường hợp glCompressedTexImage2D). Các thư viện này sẽ tải các tiện ích có sẵn và cho phép bạn kiểm tra mã của mình nếu tiện ích mở rộng cụ thể được tải hay không.

Ví dụ với GLEE:

#include <gl/GLee.h>   

if (GLEE_ARB_TEXTURE_COMPRESSION) 
{ 
    glCompressedTexImage2D(...); 
} 
else 
{ 
    // the extension is not available, use a different method 
} 

Lưu ý rằng GLEE không yêu cầu bạn phải khởi tạo một cách rõ ràng (không giống như GLEW). Tôi khuyên bạn nên sử dụng phương pháp này bằng cách tải thủ công một con trỏ hàm. Không phải vì đó là câu trả lời của tôi :), nhưng bởi vì điều này cũng sẽ chăm sóc tìm ra nếu phần cứng và trình điều khiển của nó hỗ trợ phần mở rộng (có thể rất lộn xộn), và nó là nền tảng độc lập.

+0

Lưu ý rằng GLEE là không còn tồn tại và không còn được cập nhật. Nó dừng lại ở GL 3.3; đã có 6 phiên bản OpenGL được phát hành kể từ đó. Vì vậy, tuy nhiên nhiều bạn có thể thích phong cách, bạn không nên sử dụng nó. Có [một số lựa chọn thay thế để tải các chức năng OpenGL] (http://www.opengl.org/wiki/OpenGL_Loading_Library). –

+0

Cảm ơn bạn đã đứng đầu. –

1

Bạn cần phải tìm hiểu xem thiết bị hiện hỗ trợ các chức năng, và sau đó nhận được địa chỉ của hàm trước khi bạn có thể gọi nó là:

PFNGLCOMPRESSEDTEXIMAGE2DPROC p = NULL; 
const char* string = glGetString(GL_EXTENSIONS); 

if (strstr(string, "GL_ARB_texture_compression") != NULL) 
    p = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)wglGetProcAddress("glCompressedTexImage2D"); 
5

Tôi đang gặp một chút của một vấn đề cập nhật tiêu đề GL của tôi.

Đó là vì bạn không được phép làm điều này. Trong Windows, bất kỳ thứ gì ngoài OpenGL-1.1 đều được thu thập thông qua cơ chế mở rộng. Cách dễ nhất để truy cập thông tin này là thông qua GLEW. Cài đặt và sử dụng số này GL/glew.h thay vì số GL/gl.h thông thường. Sau đó, sau khi một bối cảnh OpenGL đã được tạo ra, điều đầu tiên cần gọi là glewInit().

0

Chuyển đến: http://www.opengl.org/registry/ và tải về phiên bản mới nhất của glext.hwglext.h

Bây giờ bạn sẽ có thể tự lấy con trỏ hàm để tính năng mà bạn muốn. Trong Windows chỉ có OpenGL 1.1.

Đối với người mới bắt đầu tôi khuyên bạn nên sử dụng GLEW (GLEE cũng là rất tốt nhưng chưa được cập nhật trong một thời gian khá dài ...)

Các vấn đề liên quan