我有一個非常簡單的着色器(只是將背景正方形設置爲綠色),並且完美地工作。
我最近添加了一些應用了紋理的四邊形。所以我用這個來稱呼它這個紋理有一定的alpha值: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(...)行並着色器再次出現(但我失去了alpha混合)。 但是,每當我調用該函數時,着色器似乎都停止工作。
關於爲什麼會發生這種情況的任何想法?
圖像的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
}
Vert的着色器(很簡單):
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