1 조각 쉐이더에서 2 개의 텍스처에 액세스하려고합니다. 이를 위해 Android OpenGL-ES 2.0 조각 쉐이더에서 사용할 수있는 텍스처를 어떻게 설정해야합니까?
은 내가 다음 코드를 사용하여 설정이 질감이 있습니다glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, vbuff);
glTexCoordPointer(2, GL_FLOAT, 0, tbuff);
glActiveTextureARB(GL_TEXTURE0_ARB);
glBindTexture(GL_TEXTURE_2D, texture0);
glEnable(GL_TEXTURE_2D);
glActiveTextureARB(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_2D, texture1);
glEnable(GL_TEXTURE_2D);
을 그리고 조각 쉐이더 다음과 같이 그들을 결합하려고하면 어떻게 든이 작동하지 않습니다
uniform sampler2D tex0;
uniform sampler2D tex1;
void main()
{
vec4 texval1 = texture2D(tex0, TextureCoordOut);
vec4 texval2 = texture2D(tex1, TextureCoordOut);
gl_FragColor = 0.5*(texval1 + texval2)
}
을 두 번째 텍스처 만 표시합니다.
추신 : 저는 Windows7에서 쉐이더를 개발하고 있지만 Android 디바이스에서는 C++ 코드와 쉐이더를 Android NDK와 함께 사용하려고합니다.
편집 : 나는 그것이 작동했고, 다른 사람들이 혜택을 누릴 수 있도록 나는 여기에 코드를 게시 :
버텍스 쉐이더
varying vec2 TextureCoordOut;
void main()
{
gl_Position = ftransform();
TextureCoordOut = vec2(gl_MultiTexCoord0);
}
조각 쉐이더
varying mediump vec2 TextureCoordOut;
uniform sampler2D tex0;
uniform sampler2D tex1;
void main()
{
gl_FragColor = texture2D(tex0, TextureCoordOut) * texture2D(tex1, TextureCoordOut);
}
하는 렌더링
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, vbuff); //2 dimensional vertex buffer
glTexCoordPointer(2, GL_FLOAT, 0, tbuff); // 2 dimensional textures
glColor4f(1, 1, 1, 1);
glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, mapid1);
glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, mapid2);
glUseProgram(shader);
glUniform1i(glGetUniformLocation(gfx.prog, "tex0"), 0); //GL_TEXTURE0
glUniform1i(glGetUniformLocation(gfx.prog, "tex1"), 1); //GL_TEXTURE1
render....
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
감사합니다. 정말 도움이되었습니다. – HardCoder