diff options
author | chai <chaifix@163.com> | 2018-09-08 13:09:06 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-09-08 13:09:06 +0800 |
commit | 4798e70dcbbedb55de8e9f8e321e8fad7b9783f6 (patch) | |
tree | f4740d59b561163b260f2f29467cfffdd92c4d9e /src/libjin/Graphics/Shader.cpp | |
parent | 36f7e3e5542f3cfee11b34ce497fcb877b3462bf (diff) |
*update
Diffstat (limited to 'src/libjin/Graphics/Shader.cpp')
-rw-r--r-- | src/libjin/Graphics/Shader.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/libjin/Graphics/Shader.cpp b/src/libjin/Graphics/Shader.cpp index f078648..ae64c7e 100644 --- a/src/libjin/Graphics/Shader.cpp +++ b/src/libjin/Graphics/Shader.cpp @@ -1,5 +1,5 @@ #include "../modules.h" -#if JIN_MODULES_RENDER +#if LIBJIN_MODULES_RENDER #include "../utils/macros.h" #include "Shader.h" @@ -39,21 +39,38 @@ namespace graphics JSLProgram* JSLProgram::createJSLProgram(const char* program) { - return new JSLProgram(program); + JSLProgram* jsl = nullptr; + try + { + jsl = new JSLProgram(program); + } + catch(...) + { + return nullptr; + } + return jsl; } JSLProgram::JSLProgram(const char* program) : currentTextureUnit(DEFAULT_TEXTURE_UNIT) { - char* fs = (char*)calloc(1, strlen(program) + SHADER_FORMAT_SIZE); + int size = strlen(program) + SHADER_FORMAT_SIZE; + char* fs = (char*)alloca(size); + memset(fs, 0, size); formatShader(fs, program); GLuint shader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(shader, 1, (const GLchar**)&fs, NULL); glCompileShader(shader); + GLint success; + glGetShaderiv(shader, GL_COMPILE_STATUS, &success); + if (success == GL_FALSE) + throw 0; pid = glCreateProgram(); glAttachShader(pid, shader); glLinkProgram(pid); - free(fs); + glGetProgramiv(pid, GL_LINK_STATUS, &success); + if (success == GL_FALSE) + throw 0; } JSLProgram::~JSLProgram() @@ -197,4 +214,4 @@ namespace graphics } // graphics } // jin -#endif // JIN_MODULES_RENDER
\ No newline at end of file +#endif // LIBJIN_MODULES_RENDER
\ No newline at end of file |