tôi' cố gắng phát triển một trò chơi cơ bản trong iOS và OpenGL ES nhưng tôi gặp khó khăn về vấn đề này với các trang phục, đây là mã mà vượt qua giá trị cho đồng phục của tôi:glUniform4fv là cho GL_INVALID_OPERATION
glBindVertexArrayOES(_vertexArray);
// Render the object with ES2
glUseProgram(self.shaderProgram);
glUniformMatrix4fv(uniformModelViewProjection, 1, 0, modelViewProjectionMatrix.m);
// Get uniform center position
glUniform4fv(uniformCenterPosition, 1, centerPosition.v);
// Get uniform time position
glUniform1f(uniformTime, time);
// Set the sampler texture unit to 0
glUniform1i(uniformTexture, 0);
glDrawArrays(GL_POINTS, 0, numVertices);
Lưu ý rằng việc chăm sóc đã được thực hiện để định vị hàm glUniform trước với glUseProgram và trước khi lệnh gọi glDrawArrays được thực hiện. Các vị trí thống nhất trông tốt cũng như xác nhận thông qua truy tìm. Đây là những gì tôi nhận được khi tôi chạy công cụ OpenGL ES Analyzer trong XCode:
Nó trả về một GL_INVALID_OPERATION cho glUniform4fv, hãy chú ý rằng các giá trị đại diện dường như đúng.
Dưới đây là những nguyên nhân có thể cho lỗi GL_INVALID_OPERATION tôi thấy từ documentation:
- không có đối tượng chương trình hiện hành.
- kích thước của biến thống nhất được khai báo trong trình đổ bóng không khớp với kích thước được biểu thị bằng lệnh glUniform.
- một trong các biến số nguyên được ký hoặc không dấu của hàm này được sử dụng để tải biến thống nhất kiểu float, vec2, vec3, vec4 hoặc một mảng hoặc nếu một trong các biến thể dấu phẩy động của hàm này được sử dụng để tải một biến thống nhất của kiểu int, ivec2, ivec3, ivec4, int không dấu, uvec2, uvec3, uvec4 hoặc một mảng trong số này.
- một trong các biến thể số nguyên đã ký của hàm này được sử dụng để tải biến đồng nhất loại int không dấu, uvec2, uvec3, uvec4 hoặc một mảng trong số này.
- một trong các biến số nguyên không dấu của hàm này được sử dụng để tải một biến thống nhất của kiểu int, ivec2, ivec3, ivec4 hoặc một mảng trong số này.
- vị trí là vị trí thống nhất không hợp lệ cho đối tượng chương trình hiện tại và vị trí không bằng -1.
- đếm lớn hơn 1 và biến thống nhất được chỉ định không phải là biến mảng.
- một mẫu được nạp bằng lệnh khác với glUniform1i và glUniform1iv.
Không ai trong số họ có vẻ giải thích tại sao tôi lại gặp lỗi này. Nó làm tôi phát điên, xin hãy giúp tôi!
Nguyên nhân duy nhất từ danh sách mà tôi có thể tưởng tượng là điểm 2 và 3. Vì vậy, biến thống nhất tương ứng thực sự được khai báo là 'vec4' trong trình đổ bóng (có thể là' vec3')? Nếu không, 1 cho phân tích mở rộng (mặc dù, mã shader cũng sẽ tốt đẹp). –
Bạn đã có điểm! Tôi bỏ qua kích thước thống nhất sau khi thay đổi tôi đã thực hiện một số thời gian trước đây, tôi đã có ucenterp vec3 thống nhất cho giá trị centerPosition của tôi, sau khi tôi thay đổi nó thành vec4 lỗi đã biến mất mãi mãi :) Cảm ơn rất nhiều vì đã giúp đỡ. Chúc mừng – Pupillam
@ChristianRau Tôi nghĩ anh ấy muốn bạn thêm nhận xét của mình làm câu trả lời;) –