diff --git a/.vs/shader2/v14/.suo b/.vs/shader2/v14/.suo index ae4de56..d9907ac 100644 Binary files a/.vs/shader2/v14/.suo and b/.vs/shader2/v14/.suo differ diff --git a/main.cpp b/main.cpp index 5a8843f..f0c9aed 100644 --- a/main.cpp +++ b/main.cpp @@ -22,75 +22,7 @@ LRESULT CALLBACK GLWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) return DefWindowProc(hwnd, msg, wParam, lParam);//其他消息调用window默认处理函数 } -/** -* 创建一个GPU程序 -*/ -GLuint CreateGPUProgram(const char* vsShaderPath, const char* fsShaderPath) { - - //创建shader - GLuint vsShader = glCreateShader(GL_VERTEX_SHADER); - GLuint fsShader = glCreateShader(GL_FRAGMENT_SHADER); - - //读取shader代码 - const char* vsCode = LoadFileContent(vsShaderPath); - const char* fsCode = LoadFileContent(fsShaderPath); - - //把shader代码 从内存传到显存 - glShaderSource(vsShader, 1, &vsCode, nullptr); - glShaderSource(fsShader, 1, &fsCode, nullptr); - - //编译shader - glCompileShader(vsShader); - GLint compileResult = GL_TRUE; - glGetShaderiv(vsShader, GL_COMPILE_STATUS, &compileResult); - if (compileResult == GL_FALSE) { - char szLog[1024] = { 0 }; - GLsizei logLen = 0;//实际错误日志长度 - glGetShaderInfoLog(vsShader, 1024, &logLen, szLog); - printf("Compile shader fail error log is : %s \n shader code :\n %s \n ", szLog, vsCode); - glDeleteShader(vsShader); - } - - glCompileShader(fsShader); - compileResult = GL_TRUE; - glGetShaderiv(fsShader, GL_COMPILE_STATUS, &compileResult); - if (compileResult == GL_FALSE) { - char szLog[1024] = { 0 }; - GLsizei logLen = 0;//实际错误日志长度 - glGetShaderInfoLog(fsShader, 1024, &logLen, szLog); - printf("Compile shader fail error log is : %s \n shader code :\n %s \n ", szLog, fsCode); - glDeleteShader(fsShader); - } - //创建program - GLuint program = glCreateProgram(); - - //绑定shader - glAttachShader(program, vsShader); - glAttachShader(program, fsShader); - - //连接 - glLinkProgram(program); - - GLint nResult; - glGetProgramiv(program, GL_LINK_STATUS, &nResult); - if (nResult == GL_FALSE) { - char log[1024] = { 0 }; - GLsizei writed = 0; - glGetProgramInfoLog(program, 1024, &writed, log); - printf("Create CPU program fail error %s\n", log); - glDeleteProgram(program); - program = 0; - } - //解绑shader - glDetachShader(program, vsShader); - glDetachShader(program, fsShader); - //删除shader - glDeleteShader(vsShader); - glDeleteShader(fsShader); - - return program; -} /** * @hinstance 本应用程序启动实例 * @hPrevInstance 上一次应用程式的实例 diff --git a/misc.cpp b/misc.cpp index 62ace13..6b03036 100644 --- a/misc.cpp +++ b/misc.cpp @@ -36,3 +36,76 @@ char* LoadFileContent(const char *path) { fclose(pFile); return nullptr; } + +GLuint CompileShader(GLenum shaderType, const char * shaderPath) +{ + //创建shader + GLuint shader = glCreateShader(shaderType); + if (shader == 0) { + printf("glCreateShader false\n"); + return 0; + } + //读取shader代码 + const char* shaderCode = LoadFileContent(shaderPath); + if (shaderCode == nullptr) { + printf("load shader code from file: %s false\n", shaderPath); + return 0; + } + //把shader代码 从内存传到显存 + glShaderSource(shader, 1, &shaderCode, nullptr); + glCompileShader(shader); + + GLint compileResult = GL_TRUE; + glGetShaderiv(shader, GL_COMPILE_STATUS, &compileResult); + if (compileResult == GL_FALSE) { + char szLog[1024] = { 0 }; + GLsizei logLen = 0;//实际错误日志长度 + glGetShaderInfoLog(shader, 1024, &logLen, szLog); + printf("Compile shader fail error log is : %s \n shader code :\n %s \n ", szLog, shaderCode); + glDeleteShader(shader); + return 0; + } + + return shader; +} + +/** +* 创建一个GPU程序 +*/ +GLuint CreateGPUProgram(const char* vsShaderPath, const char* fsShaderPath) { + + GLuint vsShader = CompileShader(GL_VERTEX_SHADER,vsShaderPath); + GLuint fsShader = CompileShader(GL_FRAGMENT_SHADER,fsShaderPath); + + //创建program + GLuint program = glCreateProgram(); + + //绑定shader + glAttachShader(program, vsShader); + glAttachShader(program, fsShader); + + //连接 + glLinkProgram(program); + + //解绑shader + glDetachShader(program, vsShader); + glDetachShader(program, fsShader); + + //删除shader + glDeleteShader(vsShader); + glDeleteShader(fsShader); + + //检查错误 + GLint nResult; + glGetProgramiv(program, GL_LINK_STATUS, &nResult); + if (nResult == GL_FALSE) { + char log[1024] = { 0 }; + GLsizei writed = 0; + glGetProgramInfoLog(program, 1024, &writed, log); + printf("Create CPU program fail error %s\n", log); + glDeleteProgram(program); + program = 0; + } + + return program; +} \ No newline at end of file diff --git a/misc.h b/misc.h index 513e345..1c0bf57 100644 --- a/misc.h +++ b/misc.h @@ -2,4 +2,6 @@ #include "glew.h" GLuint CreateBufferObject(GLenum bufferType, GLsizeiptr size, GLenum usage, void* data = nullptr); -char* LoadFileContent(const char *path); \ No newline at end of file +char* LoadFileContent(const char *path); +GLuint CompileShader(GLenum shaderType, const char* shaderPath); +GLuint CreateGPUProgram(const char* vsShaderPath, const char* fsShaderPath); \ No newline at end of file diff --git a/model.cpp b/model.cpp index fc6f32a..f333716 100644 --- a/model.cpp +++ b/model.cpp @@ -33,7 +33,7 @@ VertexData * LoadObjModel(const char * filePath, unsigned int ** indexes, int & while (!ssObjFile.eof()) { memset(szOneLine, 0, 256); ssObjFile.getline(szOneLine, 256); - printf("%s \n", szOneLine); + //printf("%s \n", szOneLine); if (strlen(szOneLine) > 0) { std::stringstream ssOneLine(szOneLine); if (szOneLine[0] == 'v') { diff --git a/shader2.VC.db b/shader2.VC.db index 4617c98..b61ba14 100644 Binary files a/shader2.VC.db and b/shader2.VC.db differ