매우 간단한 쉐이더가 있습니다. (배경 사각형이 녹색으로 설정 됨) 완벽하게 작동합니다.
최근 텍스처가 적용된 쿼드가 일부 추가되었습니다. 나는 그것을 호출이 사용하므로이 질감 일부 알파 값이 있습니다glBlendFunc 쉐이더를 사용하지 않음
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureID);
//draw quad
glDisable(GL_TEXTURE_2D);
glBlendFunc (GL_ONE, GL_ZERO);
glDisable (GL_BLEND);
glBindTexture(GL_TEXTURE_2D, 0); //remove texture
쿼드는 투명성 잘 표시 -하지만 백그라운드에서 쉐이더는 이제 사라졌다. 아직 그려져 있지만 표시되지 않습니다.
이제 glBlendFunc (...) 행을 모두 제거하고 셰이더가 다시 나타납니다 (그러나 알파 블렌딩은 손실됩니다). 그러나 그 함수를 호출 할 때마다 셰이더가 작동을 멈추는 것처럼 보입니다.
왜 이런 일이 벌어 질 수 있는지에 대한 아이디어가 있습니까? glBlendFunc와
이미지 제거 : glBlendFunc와
이미지 사용 :
쉐이더 코드를로드 :
//create shaders
vertexShader = glCreateShader(GL_VERTEX_SHADER);
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
//grab the char so we can send it to gfx card
const char* vShadData = loadFile(vertexShaderFile);
const char* fShadData = loadFile(fragShaderFile);
//send data to gfx card
glShaderSource(vertexShader, 1, (const GLchar **)&vShadData, NULL);
glShaderSource(fragmentShader, 1, (const GLchar **)&fShadData, NULL);
//check if compiled
GLint compiled;
glCompileShader(vertexShader);
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &compiled);
if(compiled==FALSE)
{
//doesn't get here
}
glCompileShader(fragmentShader);
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &compiled);
if(compiled==FALSE)
{
//doesn't get here
}
//finally, create shader program
shaderProgram = glCreateProgram();
//attach shaders to program
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
GLint linkStatus;
glGetProgramiv(shaderProgram, GL_LINK_STATUS, (GLint *)&linkStatus);
if(linkStatus==FALSE)
{
//doesn't get here
}
수직 쉐이더 (매우 간단) :
void main(void)
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
파편 쉐이더 : 당신의 조각 쉐이더에서
void main(void)
{
gl_FragColor = vec4(0.0, 0.3, 0.0, 0.0);
}
일부 이미지가 어떻게 생겼는지 보여 줄 수 있습니까? 심도있는 순서 문제처럼 들리지만 잘 모르겠습니다. –
이미지가 추가되었습니다. 드로잉 함수의 순서를 재정렬 했으므로 (배경이 처음부터 마지막으로 렌더링되도록) 그래도 차이는 없다. 또한, 그것이 의미하는 바가 있다면 : 쉐이더는 사실 전혀 다른 색으로 단색 대신 약간의 노이즈를 그립니다. 나는 그것이 표시되지 않을 때 정적 녹색 색상을 그리기 위해 그것을 변경했습니다. (glBlendFunc가 사용되지 않으면 노이즈 이미지를 계속 표시 할 수 있습니다.) – Andrew
glBlendFunc가 사용되는 버전에서 배경을 그릴 때 여전히 쉐이더가 활성화되어 있습니까? – neodelphi