之前都是通過讀取著色器字串來建立著色器,這樣耦合程度很高,並且生成、鏈結著色器程式也需要寫很繁雜的過程。現在我編寫乙個shader類來讀取著色器文字檔案,並且封裝那些繁雜的步驟。
shader標頭檔案:
#ifndef inc_10_shader_loader_shader_h
#define inc_10_shader_loader_shader_h
#include #include #include #include #include class shader ;
#endif //inc_10_shader_loader_shader_h
shader.cpp:
#include "shader.h"
shader::shader(const char *vertexshaderpath, const char *fragmentshaderpath) catch (std::ifstream::failure e)
//再轉換成字元陣列
const char* vshadersource = vertexcode.c_str();
const char* fshadersource = fragmentcode.c_str();
//接著就可以開始編譯和連線著色器了
unsigned int vertexshader, fragmentshader;
//編譯頂點著色器
vertexshader = glcreateshader(gl_vertex_shader);
glshadersource(vertexshader, 1, &vshadersource, null);
glcompileshader(vertexshader);
checkcompileerrors(vertexshader, "vertex");
//編譯片段著色器
fragmentshader = glcreateshader(gl_fragment_shader);
glshadersource(fragmentshader, 1, &fshadersource, null);
glcompileshader(fragmentshader);
checkcompileerrors(vertexshader, "fragment");
//鏈結著色器
id = glcreateprogram();
glattachshader(id, vertexshader);
glattachshader(id, fragmentshader);
gllinkprogram(id);
checkcompileerrors(id, "program");
//當著色器鏈結到了程式中,就不再需要了
gldeleteshader(vertexshader);
gldeleteshader(fragmentshader);
}//啟用著色器
void shader::use()
//設定uniform變數
void shader::setbool(const char *name, bool value) const
//設定uniform變數
void shader::setint(const char *name, int value) const
//設定uniform變數
void shader::setfloat(const char *name, float value) const
//輸出shader編譯或program鏈結的錯誤資訊
void shader::checkcompileerrors(unsigned int shader, std::string type)
javaScript 3 封裝自己的scroll
封裝自己的scrolltop scrollleft 第一步 判斷瀏覽器是否支援 第二步 var json 不用宣告變數,直接return function scroll 不支援的 檢測是不是怪異模式的瀏覽器 沒有宣告頭的 判斷是否宣告dtd 1.css1compat已經宣告 css標準模式 2.ba...
2 2 封裝乙個獲取元素的樣式的方法
一 設定和獲取行內的樣式 box div 設給元素置樣式 注意這設定的是行內樣式 var obox document.getelementbyid box obox.style.width 200px obox.style.height 200px obox.style.background red...
IO4 1封裝乙個刪除檔案函式
需求如題。首先,我們需要建立乙個檔案 filename path py.txt try f open filename path,w 寫入模式,會沖刷掉檔案內容 print f.write 作者,黃蓉 f.close except 異常處理 print s檔案找不到 filename path 成功...