Tôi đang cố gắng học OpenGL ES 2.0 và tôi tự hỏi đâu là cách phổ biến nhất để "quản lý" trình đổ bóng.
Tôi đang hỏi câu hỏi này vì trong các ví dụ tôi đã tìm thấy (như một ví dụ được bao gồm trong API Demo được cung cấp với sdk android), tôi thường thấy mọi thứ bên trong lớp GLRenderer và tôi muốn tách biệt mọi thứ để tôi có thể có, ví dụ, một đối tượng GLImage mà tôi có thể sử dụng lại bất cứ khi nào tôi muốn vẽ một hình tứ giác có kết cấu (tôi chỉ tập trung vào 2D vào lúc này), giống như tôi đã có trong mã OpenGL ES 1.0 của mình. Trong hầu hết mọi ví dụ tôi đã tìm thấy, các shader chỉ được định nghĩa là các thuộc tính lớp. Ví dụ:
public class Square {
public final String vertexShader =
"uniform mat4 uMVPMatrix;\n" +
"attribute vec4 aPosition;\n" +
"attribute vec4 aColor;\n" +
"varying vec4 vColor;\n" +
"void main() {\n" +
" gl_Position = uMVPMatrix * aPosition;\n" +
" vColor = aColor;\n" +
"}\n";
public final String fragmentShader =
"precision mediump float;\n" +
"varying vec4 vColor;\n" +
"void main() {\n" +
" gl_FragColor = vColor;\n" +
"}\n";
// ...
}
Tôi xin lỗi trước nếu một số trong những câu hỏi này bị câm, nhưng tôi chưa bao giờ làm việc với các shader trước đó.
1) Mã ở trên có phải là cách phổ biến để xác định shader (thuộc tính lớp cuối cùng công khai) không?
2) Tôi có nên có một lớp Shader riêng không?
3) Nếu các shader được định nghĩa bên ngoài lớp sử dụng chúng, làm thế nào tôi biết được tên của các thuộc tính của chúng (ví dụ "aColor" trong đoạn mã sau) để tôi có thể liên kết chúng?
colorHandle = GLES20.glGetAttribLocation(program, "aColor");