void Shader::initGLSL(const char *vertexFile, const char *fragmentFile) { //glewの初期化 GLenum err = glewInit(); if (err != GLEW_OK){ printf("Error: %s\n", glewGetErrorString(err)); } // GPU,OpenGL情報 printf("VENDOR= %s \n", glGetString(GL_VENDOR)); printf("GPU= %s \n", glGetString(GL_RENDERER)); printf("OpenGL= %s \n", glGetString(GL_VERSION)); printf("GLSL= %s \n", glGetString(GL_SHADING_LANGUAGE_VERSION)); //シェーダーオブジェクトの作成 vertexShader = glCreateShader(GL_VERTEX_SHADER); fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); //シェーダーの読み込みとコンパイル readShaderCompile(vertexShader, vertexFile); readShaderCompile(fragmentShader, fragmentFile); // プログラムオブジェクトの作成 program = glCreateProgram(); // シェーダオブジェクトをシェーダプログラムに関連付ける glAttachShader(program, vertexShader); glAttachShader(program, fragmentShader); // シェーダオブジェクトの削除 glDeleteShader(vertexShader); glDeleteShader(fragmentShader); // シェーダプログラムのリンク link(program); }
void Shader::initGLSL(const char *vertexFile) { // GPU,OpenGL情報 printf("VENDOR= %s \n", glGetString(GL_VENDOR)); printf("GPU= %s \n", glGetString(GL_RENDERER)); printf("OpenGL= %s \n", glGetString(GL_VERSION)); printf("GLSL= %s \n", glGetString(GL_SHADING_LANGUAGE_VERSION)); //シェーダーオブジェクトの作成 vertexShader = glCreateShader(GL_VERTEX_SHADER); //シェーダーの読み込みとコンパイル readShaderCompile(vertexShader, vertexFile); // シェーダプログラムの作成 program = glCreateProgram(); // シェーダオブジェクトをシェーダプログラムに関連付ける glAttachShader(program, vertexShader); // シェーダオブジェクトの削除 glDeleteShader(vertexShader); // シェーダプログラムのリンク link(program); }
int main(int argc, char *argv[]){ GLenum glResult; GLFWwindow *pWindow = NULL; GLuint program,linked; if(!glfwInit()){ return 0; } pWindow = glfwCreateWindow(640, 480, "Triangle", NULL, NULL); glfwMakeContextCurrent(pWindow); glResult = glewInit(); if(glResult != GLEW_OK){ printf("Error: %s\n", glewGetErrorString(glResult)); return 0; } printf("VENDOR=%s\n", glGetString(GL_VENDOR)); printf("GPU=%s\n", glGetString(GL_RENDERER)); printf("OpenGL=%s\n", glGetString(GL_VERSION)); printf("GLSL=%s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); s_vertexShader = glCreateShader(GL_VERTEX_SHADER); printf("s_vertexShader = %d\n", s_vertexShader); readShaderCompile(s_vertexShader, "triangle.vert"); program = glCreateProgram(); if(program == 0){ printf("Failed to create program\n"); goto error_destroy_window; } glAttachShader(program, s_vertexShader); glLinkProgram(program); glGetProgramiv(program, GL_LINK_STATUS, &linked); if(linked == GL_FALSE){ char *pInfoLog; GLsizei size,len; printf("failed to link shader\n"); glGetProgramiv( program, GL_INFO_LOG_LENGTH, &size ); if ( size > 0 ) { pInfoLog = (char *)malloc(size); glGetProgramInfoLog( program, size, &len, pInfoLog ); printf("%s\n",pInfoLog); free(pInfoLog); } } while(!glfwWindowShouldClose(pWindow)){ glClear(GL_COLOR_BUFFER_BIT); glUseProgram(program); glBegin(GL_TRIANGLES); glColor3d(1.0, 0.0, 0.0); glVertex2d(0.9*cos(0.0), 0.9*sin(0.0)); glColor3d(0.0, 1.0, 0.0); glVertex2d(0.9*cos(2.0*M_PI/3.0), 0.9*sin(2.0*M_PI/3.0)); glColor3d(0.0, 0.0, 1.0); glVertex2d(0.9*cos(2.0*M_PI*2.0/3.0), 0.9*sin(2.0*M_PI*2.0/3.0)); glEnd(); glUseProgram(0); glFlush(); glfwSwapBuffers(pWindow); glfwPollEvents(); } glDeleteProgram(program); error_destroy_window: glfwDestroyWindow(pWindow); glDeleteShader(s_vertexShader); error_exit: glfwTerminate(); return 0; }