Merge "2.0 translator: link only if both shaders compile"
This commit is contained in:
@@ -1257,9 +1257,21 @@ GL_APICALL void GL_APIENTRY glLinkProgram(GLuint program){
|
|||||||
SET_ERROR_IF(!objData.Ptr(), GL_INVALID_OPERATION);
|
SET_ERROR_IF(!objData.Ptr(), GL_INVALID_OPERATION);
|
||||||
SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA, GL_INVALID_OPERATION);
|
SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA, GL_INVALID_OPERATION);
|
||||||
ProgramData* programData = (ProgramData*)objData.Ptr();
|
ProgramData* programData = (ProgramData*)objData.Ptr();
|
||||||
if (programData->getAttachedVertexShader()!=0 && programData->getAttachedFragmentShader()!=0) {
|
GLint fragmentShader = programData->getAttachedFragmentShader();
|
||||||
ctx->dispatcher().glLinkProgram(globalProgramName);
|
GLint vertexShader = programData->getAttachedVertexShader();
|
||||||
ctx->dispatcher().glGetProgramiv(globalProgramName,GL_LINK_STATUS,&linkStatus);
|
if (vertexShader != 0 && fragmentShader!=0) {
|
||||||
|
/* validating that the fragment & vertex shaders were compiled successfuly*/
|
||||||
|
GLint fCompileStatus = GL_FALSE;
|
||||||
|
GLint vCompileStatus = GL_FALSE;
|
||||||
|
GLuint fragmentShaderGlobal = thrd->shareGroup->getGlobalName(SHADER,fragmentShader);
|
||||||
|
GLuint vertexShaderGlobal = thrd->shareGroup->getGlobalName(SHADER,vertexShader);
|
||||||
|
ctx->dispatcher().glGetShaderiv(fragmentShaderGlobal,GL_COMPILE_STATUS,&fCompileStatus);
|
||||||
|
ctx->dispatcher().glGetShaderiv(vertexShaderGlobal,GL_COMPILE_STATUS,&vCompileStatus);
|
||||||
|
|
||||||
|
if(fCompileStatus != 0 && vCompileStatus != 0){
|
||||||
|
ctx->dispatcher().glLinkProgram(globalProgramName);
|
||||||
|
ctx->dispatcher().glGetProgramiv(globalProgramName,GL_LINK_STATUS,&linkStatus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
programData->setLinkStatus(linkStatus);
|
programData->setLinkStatus(linkStatus);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user