제 프로그램에서는 2 개의 텍스처를 사용합니다 : t0와 t1. T1은 일부 경우에 필요한 추가입니다 : 드로잉OpenGL에서 제로 텍스처 바인딩하기
.....
glActiveTexture (GL_TEXTURE1);
if (mDisplayMode == EDM_DEFAULT){
glBindTexture(GL_TEXTURE_2D, 0); // In this case I don't need t1
}else{
glBindTexture(GL_TEXTURE_2D, mglDegreeTexture); // In this case t1 will overlap t0
}
shader->setUniformValue("textureId1", 1);
쉐이더 : 그것은
.....
vec4 c1 = texture(textureId0, uv);
vec4 c2 = texture(textureId1, gridUV);
float a = c2.a;
gl_FragColor = (1.0 - a)*c1 + a*c2;
잘 작동 : 두 번째 텍스처 중복이 먼저 필요할 때. glBindTexture (.., 0)를 사용하면 0 텍스처 (0,0,0,0)를 반환한다고 가정하지만, NVidia 드라이버를 314.07로 업데이트 한 후 glBindTexture (.., 0)와 같은 검은 화면이 생깁니다. return (0,0 , 0, 1) 텍스처.
나는 몇 가지 테스트를 수행합니다 쉐이더
....
vec4 c1 = texture(textureId0, uv);
vec4 c2 = texture(textureId1, gridUV);
float a = c2.a;
if (a == 1){
gl_FragColor = vec4(1,0,0,0);
return;
}
if (a == 0){
gl_FragColor = vec4(0,1,0,0);
return;
}
gl_FragColor = (1.0 - a)*c1 + a*c2;
으로 나는 새에 이전 드라이버 (296, 306), 빨간색 녹색 화면을 얻을. 필자는 Win 7 (GeForce 210) 및 XP (GTX 260)로 2 대의 컴퓨터에서 테스트했습니다.
내 질문은 : 두 번째 매개 변수로 0 glBindTexture 사용하고 올바른 결과 (0000 질감) 새 드라이버를 어떻게 얻을 수 있습니까?
좋아요! "0"텍스처로 (0,0,0,0)을 사용하는 것은 매우 논리적이었습니다 (기본 텍스처를 정의하는 방법이 있는지 알 수 없었습니다). – Jeka
@Jeka : 다른 텍스처와 비슷하므로 예를 들어 1x1 RGBA 텍스처로 설정하면 0,0,0,0을 가진 단일 텍셀로 그 내용을 처리 할 수 있습니다. 그렇게하면 사용하게 될 것입니다. 그런 식으로 사용하는 것이 일반적이지 않으므로 혼동 할 수 있습니다 아무도 당신의 코드를 읽고 (오, 그리고 잠재적으로 더 많은 드라이버 버그를 찾는다) – Bahbar
재미 있네;) 1x1 RGBA 텍스처가 현재 해결책이지만, 0으로 바인딩하려고하지 않는다. – Jeka