저는 GLSL 프로그램에 값을 전달하는 방법에 대해 여러 가지 예제를 검색하고 읽고 시도했습니다. 하지만 슬프게도 모든 시도는 실패했습니다. (이 예에서 glUniform1f를 사용하는 방법은 무엇입니까?
내가 계획하고있는 것은 매우 간단합니다 : 안드로이드 애플 리케이션 내에서 약간 열린 gl 3d 애니메이션. 내 GUI 디자인으로 인해 OpenGl Surface로 TextureView를 사용하는 것을 선호합니다. 내 프로젝트에 완벽하게 맞는 몇 가지 코드를 발견했다.
이하지만 내 문제가 this example 내부에 완전히 것 같다.
을 내가 컴파일하고 실행하면 어떻게해야 정확히 않습니다. 하나 하나 개의 삼각형을 그리기 화면.
그런 다음 Vertex Shader를 다음과 같이 수정했습니다.
final String vertexShaderSource =
"attribute vec4 position;\n" +
"attribute float myValue;\n" +
"void main() {\n" +
"vec4 oo;\n"+
"oo[0] = position[0];\n"+
"oo[1] = position[1] * myValue;\n"+
"oo[2] = position[2];\n"+
"oo[3] = position[3];\n"+
"gl_Position = oo;\n" +
"}";
이제 값 myValue
에 값을 전달하고 싶습니다.
그래서 여기에 run 메소드를 수정했습니다.
public void run() {
initGL();
int attribPosition = GLES20.glGetAttribLocation(mProgram,
"position");
checkGlError();
int valuePosition = GLES20.glGetAttribLocation(mProgram,
"myValue");
checkGlError();
System.out.println("att id:"+ attribPosition
+ " val id:" + valuePosition);
//[...]
while (true) {
checkCurrent();
mVertices.position(0);
GLES20.glVertexAttribPointer(attribPosition, 3,
GLES20.GL_FLOAT, false, 0, mVertices);
checkGlError();
GLES20.glUniform1f(valuePosition, 1.5f);
checkGlError();
//[...]
}
}
제 생각에 y 축의 삼각형이 1.5f로 확대되어야합니다. 하지만 작동하지 않습니다. 내 디버그 라인의 OUPUT은 다음과 같습니다 그들 중 누구도이 없기 때문에 -1 컨텐츠를
I/System.out(22427): att id:1 val id:0
그래서 이들은 올바른 위치해야한다.
1.5f
값을
myValue
에
glUniform1f
으로 전달하면 내가 얻을 수있는 유일한 결과는 연속
OpenGL Error 0x502
출력입니다. 셰이더 스크립트가
1.5f
을받지 못하고 값 0을 사용하여 확장하기 때문에 더 이상 삼각형이 없습니다.
정말 누군가가 나를 설명 할 수 있기를 바랍니다. 어떻게해야할까요? 그게 근본적인 무언가이기 때문에 나는 여기서 아주 명백한 것을 놓치고 있다고 생각합니다.
다음
쉐이더 실행 중에 OpenGL 오류가 발생하는지 확인하고 문제를 업데이트하십시오. –
다른 OpenGL 오류가 없습니다. 그리고이 예제는 오류를 많이 점검합니다. – ArcticLord