GLuint vShaderId; GLuint fShaderId; … … //---- 頂点シェーダオブジェクトの作成 ----// vShaderId = glCreateShader(GL_VERTEX_SHADER);); … … //---- フラグメントシェーダオブジェクトの作成 ----// fShaderId = glCreateShader(GL_FRAGMENT_SHADER); … …▲返り値は扱うシェーダに割り振られたIDみたいなもの。
GLuint vShaderId; … … //.vertファイルの中身を全て読み込む std::ifstream inputFile1("glsl.vert"); std::istreambuf_iterator<char> vdataBegin(inputFile1); std::istreambuf_iterator<char> vdataEnd; std::string fileData1(vdataBegin,vdataEnd); const char *vfile = fileData1.c_str(); //ソースコードをシェーダオブジェクトに変換 glShaderSource(vShaderId, 1, &vfile,NULL);▲NULLを入れると文字列がNULL終端(null terminated)であることを意味する。
GLuint vShaderId; ShaderId = glCreateShader(GL_VERTEX_SHADER); … … //ソースコードをシェーダオブジェクトに変換 glShaderSource(vShaderId, 1, &vfile,NULL); glCompileShader(vShaderId);//コンパイル
GLuint vShaderId; GLuint fShaderId; GLuint programId; … … //---- 頂点シェーダオブジェクトの作成 ----// vShaderId = glCreateShader(GL_VERTEX_SHADER);); … … //---- フラグメントシェーダオブジェクトの作成 ----// fShaderId = glCreateShader(GL_FRAGMENT_SHADER); … … //プログラムオブジェクトの作成 programId = glCreateProgram(); glAttachShader(programId,vShaderId); glAttachShader(programId,fShaderId); … …▲接続を外すのは、「glDetachShader関数」
GLint linked; glLinkProgram(programId);//リンクする glGetProgramiv(programId, GL_LINK_STATUS, &linked); if(linked == GL_FALSE) { std::cerr << "Link Err.\n"; } glUseProgram(programId);//プログラム使用を伝える▲リンクできているかは「glGetProgramiv関数」で確認。
//GLSLのセットアップ void setUpGLSL() { //---- 頂点シェーダオブジェクトの作成 ----// vShaderId = glCreateShader(GL_VERTEX_SHADER); //.vertファイルの中身を全て読み込む std::ifstream inputFile1("glsl.vert"); std::istreambuf_iterator<char> vdataBegin(inputFile1); std::istreambuf_iterator<char> vdataEnd; std::string fileData1(vdataBegin,vdataEnd); const char *vfile = fileData1.c_str(); //ソースコードをシェーダオブジェクトに変換 glShaderSource(vShaderId, 1, &vfile,NULL); glCompileShader(vShaderId);//コンパイル //---- フラグメントシェーダオブジェクトの作成 ----// fShaderId = glCreateShader(GL_FRAGMENT_SHADER); //.fragファイルの中身を全て読み込む std::ifstream inputFile2("glsl.frag"); std::istreambuf_iterator<char> fdataBegin(inputFile2); std::istreambuf_iterator<char> fdataEnd; std::string fileData2(fdataBegin,fdataEnd); const char *ffile = fileData2.c_str(); //ソースコードをシェーダオブジェクトに変換 glShaderSource(fShaderId, 1, &ffile,NULL); glCompileShader(fShaderId);//コンパイル //プログラムオブジェクトの作成 programId = glCreateProgram(); glAttachShader(programId,vShaderId); glAttachShader(programId,fShaderId); GLint linked; glLinkProgram(programId); glGetProgramiv(programId, GL_LINK_STATUS, &linked); if(linked == GL_FALSE) { std::cerr << "Link Err.\n"; } glUseProgram(programId); }
//頂点シェーダ void main(void) { gl_Position = ftransform(); }【解説】
void main(void) { gl_FragColor= vec4(0.0, 1.0, 0.0, 1.0); }【解説】