OpenGL ES 2.0을 배우려고하는데 쉐이더를 "관리"하는 가장 일반적인 방법이 궁금합니다.
내가 찾은 예제에서 (안드로이드 SDK와 함께 제공되는 API 데모에 포함 된 예제와 같이) 일반적으로 GLRenderer 클래스 내부의 모든 것을 볼 수 있기 때문에 내가 가질 수있는 것을 분리하기 때문에, 예를 들어, OpenGL ES 1.0 코드에서와 같이 텍스처 쿼드를 그릴 때마다 재사용 할 수있는 GLImage 객체 (현재 2D에만 초점을 맞추고 있습니다). 내가 찾은 거의 모든 예제에서 셰이더는 클래스 속성으로 정의되었습니다. 예를 들면 다음과 같습니다.
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");