Trạng thái GL cho các liên kết là một tên kết cấu cho mỗi mục tiêu (ví dụ: 1D/2D/3D/cube). Vì vậy, khi gọi
glBindTexture(GL_TEXTURE_2D, my2dTex)
glBindTexture(GL_TEXTURE_1D, my1dTex)
GL sẽ nhớ cả hai cài đặt.
Bây giờ, câu trả lời trong đó một GL sẽ sử dụng tùy thuộc vào việc bạn có trình đổ bóng hay không.
Nếu trình đổ bóng được bật, GL sẽ sử dụng bất kỳ trình đổ bóng nào nói để sử dụng. (dựa trên sampler1d/sampler2d ...).
Nếu không có bóng đổ, thì trước tiên phụ thuộc vào cuộc gọi có thể thực hiện được.
glEnable(GL_TEXTURE_2D)
glEnable(GL_TEXTURE_1D)
Nếu cả được kích hoạt, có một quy tắc ưu tiên tĩnh trong spec (3.8.15 Texture ứng dụng trong spec GL 1.5).
Cube > 3D > 2D > 1D
Vì vậy, trong trường hợp của bạn, nếu cả hai mục tiêu kết cấu của bạn được bật, mục 2D sẽ được sử dụng.
Như một mặt lưu ý, chú ý cách một Shader không quan tâm hay không mục tiêu kết cấu đã được kích hoạt ...
Chỉnh sửa để thêm:
Và đối với những người thực sự muốn có được đối với các chi tiết gớm ghiếc, bạn luôn luôn có kết cấu được ràng buộc cho mỗi mục tiêu * mỗi đơn vị. Tên 0 (mặc định cho trạng thái liên kết) tương ứng với một loạt các đối tượng kết cấu, một đối tượng cho mỗi mục tiêu. glBindTexture(GL_TEXTURE_2D, 0)
và glBindTexture(GL_TEXTURE_1D, 0)
đều gắn kết một kết cấu, nhưng không giống nhau ...
Đây là lịch sử, được chỉ định để khớp với hành vi của GL 1.0, nơi đối tượng kết cấu chưa tồn tại. Tôi không chắc chắn những gì các phản đối trong GL3.0 đã làm với điều này, mặc dù.
Xin lỗi, bạn nghĩ sai. Bahbar cung cấp câu trả lời đúng. – Thomas
Vâng, tôi đã học được điều gì đó mới mẻ hôm nay. Điều đó sẽ dạy tôi trả lời khi tôi không có cuốn sách OpenGL của tôi tiện dụng! –