aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Graphics/Shader.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-09-08 13:09:06 +0800
committerchai <chaifix@163.com>2018-09-08 13:09:06 +0800
commit4798e70dcbbedb55de8e9f8e321e8fad7b9783f6 (patch)
treef4740d59b561163b260f2f29467cfffdd92c4d9e /src/libjin/Graphics/Shader.cpp
parent36f7e3e5542f3cfee11b34ce497fcb877b3462bf (diff)
*update
Diffstat (limited to 'src/libjin/Graphics/Shader.cpp')
-rw-r--r--src/libjin/Graphics/Shader.cpp27
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