GLFWで四角形が表示されない

shader.cpp

1#include "shader.h" 2 3GLuint LoadShaders(const char* vertex_file_path, const char* fragment_file_path) { 4 5 // Create the shaders 6 GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER); 7 GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER); 8 9 // Read the Vertex Shader code from the file 10 string VertexShaderCode; 11 ifstream VertexShaderStream(vertex_file_path, std::ios::in); 12 if (VertexShaderStream.is_open()) { 13 std::stringstream sstr; 14 sstr << VertexShaderStream.rdbuf(); 15 VertexShaderCode = sstr.str(); 16 VertexShaderStream.close(); 17 } 18 else { 19 printf("Impossible to open %s. Are you in the right directory ? Don't forget to read the FAQ !\n", vertex_file_path); 20 getchar(); 21 return 0; 22 } 23 24 // Read the Fragment Shader code from the file 25 string FragmentShaderCode; 26 ifstream FragmentShaderStream(fragment_file_path, std::ios::in); 27 if (FragmentShaderStream.is_open()) { 28 std::stringstream sstr; 29 sstr << FragmentShaderStream.rdbuf(); 30 FragmentShaderCode = sstr.str(); 31 FragmentShaderStream.close(); 32 } 33 34 GLint Result = GL_FALSE; 35 int InfoLogLength; 36 37 38 // Compile Vertex Shader 39 printf("Compiling shader : %s\n", vertex_file_path); 40 char const* VertexSourcePointer = VertexShaderCode.c_str(); 41 glShaderSource(VertexShaderID, 1, &VertexSourcePointer, NULL); 42 glCompileShader(VertexShaderID); 43 44 // Check Vertex Shader 45 glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result); 46 glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); 47 if (InfoLogLength > 0) { 48 std::vector<char> VertexShaderErrorMessage(InfoLogLength + 1); 49 glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]); 50 printf("%s\n", &VertexShaderErrorMessage[0]); 51 } 52 53 54 55 // Compile Fragment Shader 56 printf("Compiling shader : %s\n", fragment_file_path); 57 char const* FragmentSourcePointer = FragmentShaderCode.c_str(); 58 glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer, NULL); 59 glCompileShader(FragmentShaderID); 60 61 // Check Fragment Shader 62 glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result); 63 glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); 64 if (InfoLogLength > 0) { 65 std::vector<char> FragmentShaderErrorMessage(InfoLogLength + 1); 66 glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]); 67 printf("%s\n", &FragmentShaderErrorMessage[0]); 68 } 69 70 71 72 // Link the program 73 printf("Linking program\n"); 74 GLuint ProgramID = glCreateProgram(); 75 glAttachShader(ProgramID, VertexShaderID); 76 glAttachShader(ProgramID, FragmentShaderID); 77 glLinkProgram(ProgramID); 78 79 // Check the program 80 glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); 81 glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); 82 if (InfoLogLength > 0) { 83 std::vector<char> ProgramErrorMessage(InfoLogLength + 1); 84 glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]); 85 printf("%s\n", &ProgramErrorMessage[0]); 86 } 87 88 89 glDetachShader(ProgramID, VertexShaderID); 90 glDetachShader(ProgramID, FragmentShaderID); 91 92 glDeleteShader(VertexShaderID); 93 glDeleteShader(FragmentShaderID); 94 95 return ProgramID; 96} 97 98GLuint LoadCompShader(const char* compute_file_path) { 99 100 // Create the shaders 101 GLuint ComputeShaderID = glCreateShader(GL_COMPUTE_SHADER); 102 103 // Read the Vertex Shader code from the file 104 string ComputeShaderCode; 105 ifstream ComputeShaderStream(compute_file_path, std::ios::in); 106 if (ComputeShaderStream.is_open()) { 107 std::stringstream sstr; 108 sstr << ComputeShaderStream.rdbuf(); 109 ComputeShaderCode = sstr.str(); 110 ComputeShaderStream.close(); 111 } 112 else { 113 printf("Impossible to open %s. Are you in the right directory ? Don't forget to read the FAQ !\n", compute_file_path); 114 getchar(); 115 return 0; 116 } 117 118 GLint Result = GL_FALSE; 119 int InfoLogLength; 120 121 122 // Compile Vertex Shader 123 printf("Compiling shader : %s\n", compute_file_path); 124 char const* VertexSourcePointer = ComputeShaderCode.c_str(); 125 glShaderSource(ComputeShaderID, 1, &VertexSourcePointer, NULL); 126 glCompileShader(ComputeShaderID); 127 128 // Check Vertex Shader 129 glGetShaderiv(ComputeShaderID, GL_COMPILE_STATUS, &Result); 130 glGetShaderiv(ComputeShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); 131 if (InfoLogLength > 0) { 132 std::vector<char> ComputeShaderErrorMessage(InfoLogLength + 1); 133 glGetShaderInfoLog(ComputeShaderID, InfoLogLength, NULL, &ComputeShaderErrorMessage[0]); 134 printf("%s\n", &ComputeShaderErrorMessage[0]); 135 } 136 137 // Link the program 138 printf("Linking program\n"); 139 GLuint ProgramID = glCreateProgram(); 140 glAttachShader(ProgramID, ComputeShaderID); 141 glLinkProgram(ProgramID); 142 143 // Check the program 144 glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); 145 glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); 146 if (InfoLogLength > 0) { 147 std::vector<char> ProgramErrorMessage(InfoLogLength + 1); 148 glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]); 149 printf("%s\n", &ProgramErrorMessage[0]); 150 } 151 152 153 glDetachShader(ProgramID, ComputeShaderID); 154 155 glDeleteShader(ComputeShaderID); 156 157 return ProgramID; 158}

コメントを投稿

0 コメント