Slightly more elegant error handling

This commit is contained in:
Henrik Rydgård 2015-10-14 17:44:50 +02:00
parent 6bd1a43e20
commit d12f74d49b
3 changed files with 11 additions and 7 deletions

View file

@ -422,7 +422,7 @@ void ComputeFragmentShaderID(ShaderID *id_out, uint32_t vertType) {
}
// Missing: Z depth range
void GenerateFragmentShader(const ShaderID &id, char *buffer) {
bool GenerateFragmentShader(const ShaderID &id, char *buffer) {
char *p = buffer;
// In GLSL ES 3.0, you use "in" variables instead of varying.
@ -1017,8 +1017,8 @@ void GenerateFragmentShader(const ShaderID &id, char *buffer) {
break;
default:
WRITE(p, "ERROR STA");
break;
ERROR_LOG(G3D, "Bad stencil-to-alpha type, corrupt ID?");
return false;
}
LogicOpReplaceType replaceLogicOpType = (LogicOpReplaceType)id.Bits(BIT_REPLACE_LOGIC_OP_TYPE, 2);
@ -1033,8 +1033,8 @@ void GenerateFragmentShader(const ShaderID &id, char *buffer) {
break;
default:
WRITE(p, "ERROR LTA");
break;
ERROR_LOG(G3D, "Bad logic op type, corrupt ID?");
return false;
}
#ifdef DEBUG_SHADER
@ -1046,5 +1046,7 @@ void GenerateFragmentShader(const ShaderID &id, char *buffer) {
}
#endif
WRITE(p, "}\n");
return true;
}

View file

@ -22,7 +22,7 @@
struct ShaderID;
void ComputeFragmentShaderID(ShaderID *id, uint32_t vertType);
void GenerateFragmentShader(const ShaderID &id, char *buffer);
bool GenerateFragmentShader(const ShaderID &id, char *buffer);
enum StencilValueType {
STENCIL_VALUE_UNIFORM,

View file

@ -839,7 +839,9 @@ LinkedShader *ShaderManager::ApplyFragmentShader(Shader *vs, int prim, u32 vertT
Shader *fs;
if (fsIter == fsCache_.end()) {
// Fragment shader not in cache. Let's compile it.
GenerateFragmentShader(FSID, codeBuffer_);
if (!GenerateFragmentShader(FSID, codeBuffer_)) {
return nullptr;
}
fs = new Shader(codeBuffer_, GL_FRAGMENT_SHADER, vs->UseHWTransform(), FSID);
fsCache_[FSID] = fs;
} else {