Tôi đã có một số mã 3D mà tôi nhận thấy sẽ không hiển thị trong cấu hình cốt lõi nghiêm ngặt nhưng tốt trong ngữ cảnh tiểu sử "bình thường" (không được yêu cầu một cách rõ ràng). Để cô lập vấn đề này, tôi đã viết nhỏ nhất đơn giản nhất có thể vẽ chương trình OpenGL chỉ là một hình tam giác và một hình chữ nhật:Làm cách nào để tạo mã OpenGL đơn giản này (hoạt động trong hồ sơ "khoan dung" 3.3 và 4.2) hoạt động trong cấu hình lõi 3.2 và 4.2 nghiêm ngặt?
Tôi đã đăng tải rằng chương trình OpenGL as a Gist here.
Với bộ biến useStrictCoreProfile false, chương trình kết quả đầu ra không có thông báo lỗi ra cửa sổ Console và vẽ một quad và một hình tam giác theo các ảnh chụp màn hình trên, cả hai trên một tích hợp Intel HD OpenGL 3.3 và trên một GeForce với OpenGL 4.2 .
Tuy nhiên, với useStrictCoreProfile set là true, nó xóa màu nền nhưng không vẽ tri & quad, giao diện điều khiển đầu ra là thế này:
GLCONN: OpenGL 3.2.0 @ NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 (GLSL: 1.50 NVIDIA via Cg compiler)
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step '(post loop)': GL_INVALID_OPERATION
EXIT
... nếu một lõi nghiêm ngặt 4.2 hồ sơ được yêu cầu thay vì 3.2, cùng một vấn đề. Áp dụng cho 3 GPU nvidia khác nhau nên tôi cho rằng tôi không phù hợp với cấu hình cốt lõi nghiêm ngặt. Tôi đã làm gì sai, và làm thế nào tôi có thể sửa lỗi này?
Lưu ý, bạn sẽ không tìm thấy một glEnableVertexAttribArray cuộc gọi trong Gist trên, vì nó là inside the glutil package Tôi đang nhập khẩu - nhưng điều này không được gọi là bước cuối cùng trong compileShaders của ý chính() func.
Các bạn đã cố gắng sử dụng phần mở rộng GL_ARB_debug_output để có được các thông báo lỗi có ích hơn "GL_INVALID_OPERATION"? Đó là một chút rắc rối để thiết lập, nhưng hoàn toàn xứng đáng với nó. – postgoodism
+1 để chia sẻ ví dụ về chương trình OpenGL nhỏ nhất có thể đơn giản nhất cho Go – ANisus
Thật công bằng, nó không thực sự là "chương trình OpenGL đơn giản nhất có thể nhỏ nhất cho Go", công bằng ... người ta có thể cắt giảm ;) – metaleap