ฉันพยายามเรียนรู้ OpenGL ES 2.0 และฉันสงสัยว่าอะไรคือวิธีปฏิบัติที่ใช้กันทั่วไปมากที่สุดในการ "จัดการ" เฉดสี
ฉันถามคำถามนี้เพราะในตัวอย่างที่ฉันพบ (เช่นที่รวมอยู่ในการสาธิต API ที่มาพร้อมกับ android sdk) ฉันมักจะเห็นทุกอย่างในชั้นเรียน GLRenderer และฉันค่อนข้างแยกสิ่งต่าง ๆ เพื่อที่ฉันจะได้ ตัวอย่างเช่นวัตถุ GLImage ที่ฉันสามารถนำกลับมาใช้ใหม่เมื่อใดก็ตามที่ฉันต้องการวาดรูปสี่เหลี่ยมพื้นผิว (ฉันกำลังมุ่งเน้นไปที่ 2D เท่านั้นในขณะนี้) เช่นเดียวกับที่ฉันมีในรหัส OpenGL ES 1.0 ของฉัน ในเกือบทุกตัวอย่างที่ฉันพบ shaders ถูกกำหนดให้เป็นคุณลักษณะของคลาส ตัวอย่างเช่น:
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";
// ...
}
ฉันต้องขออภัยล่วงหน้าหากคำถามเหล่านี้บางคำถามเป็นใบ้ แต่ฉันไม่เคยทำงานร่วมกับผู้คนมาก่อน
1) โค้ดด้านบนเป็นวิธีทั่วไปในการกำหนดเฉดสี (คุณสมบัติของคลาสสุดท้ายสาธารณะ) หรือไม่
2) ฉันควรมีคลาส Shader แยกจากกันหรือไม่
3) ถ้ามีการกำหนดเฉดสีไว้นอกคลาสที่ใช้พวกมันฉันจะรู้ชื่อของคุณลักษณะของพวกมันได้อย่างไร (เช่น "aColor" ในส่วนของรหัสต่อไป) เพื่อให้สามารถโยงมันได้
colorHandle = GLES20.glGetAttribLocation(program, "aColor");