//static variables GLuint ab=0; #define BUFFER_OFFSET(i) ((char *)NULL + (i)) int main () { int i=0; int ab=0; float clr[3] = {0.0f, 0.3f, 0.6f}; float add[3] = {0.001f, 0.002f, 0.003f}; unsigned int position_attrib_idx = 0; //GL stuff SShader vertexShader; SShader fragmentShader; SShaderProgram program; CPlatform platform; Create(&platform, "", 2, 1, 1024, 768, 8, 8, 8, 8, 16, 8, 0); //------------------- //setup the shaders CreateShader(&vertexShader, VERT, &pVertexShader, 1); CreateShader(&fragmentShader, FRAG, &pFragmentShader, 1); CreateShaderProgram(&program); AddShaderToProgram(&program, &vertexShader); AddShaderToProgram(&program, &fragmentShader); SetAttributeLocation(&program, position_attrib_idx, "position"); //needs to be calleb before linking LinkShaderProgram(&program); glGenBuffers(1, &ab); //array buffer //fill buffers glBindBuffer(GL_ARRAY_BUFFER, ab); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); //------------------- //tell openGL how to interperet the data glBindBuffer(GL_ARRAY_BUFFER, ab); glEnableVertexAttribArray(0); glVertexAttribPointer(position_attrib_idx, 3, GL_FLOAT, GL_FALSE, 12, 0); //set rendering states glEnable(GL_CULL_FACE); glClearColor(0, 0, 0, 0.0f); //alpha to 0, should make triangle appear over console Start(&program); //even when glDeleteProgram is called the program won't be deleted until it is out of use while (!IS_BUTTON_PRESSED(platform.m_keyboard.key[KB_ESC])) { Tick(&platform); glClear(GL_COLOR_BUFFER_BIT); SetVec3ByName(&program, "uColour", clr); glDrawArrays( GL_TRIANGLES, 0, 3); SwapBuffers(&platform); for(i=0;i<3;i++) { clr[i]+=add[i]; if(clr[i]>1.0f)add[i]*=-1.0f; if(clr[i]<0.0f)add[i]*=-1.0f; } } Stop();
static void SetupShaders(void){ int got = 0; SShader vtxTxShdr, frgTxShdr; SShader vtxClrShdr, frgClrShdr; SShader vtxLightShdr, frgLightShdr; const char *pDVertStr[3] = {0,0,0}, *pDFragStr[3] = {0,0,0}; glswInit(); glswSetPath("./id1/shaders/", ".glsl"); glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(TRANSFORM_UBO_BINDING)); glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(LIGHT_UBO_BINDING)); glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(MAX_DIRECTION_LIGHTS)); glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(MAX_POINT_LIGHTS)); glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(MAX_SPOT_LIGHTS)); glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(TEXT_TEX_UNIT)); glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(POSITION_LOCATION)); glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(COLOUR_LOCATION)); glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(NORMAL_LOCATION)); glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(JOINT_WEIGHT_LOCATION)); glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(JOINT_INDEX_LOCATION)); glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(UV_LOCATION0)); glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(UV_LOCATION1)); glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(TEXT_LOCATION)); //glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(SKINNING_TEXTURE_BINDING)); //glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(WEIGHTS_PER_VERTEX)); //glswAddDirectiveToken("Shared", HASH_DEFINE(TEXTURE_BUFFER_SKINNING)); //glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(RESERVED_JOINTS)); //shader (TEXTURED) got = glswGetShadersAlt("shaders.Header.Vertex+shaders.Shared+shaders.SimpleVertexTextured", pDVertStr, 3); CreateShader(&vtxTxShdr, VERT, pDVertStr, got); got = glswGetShadersAlt("shaders.Header.Fragment+shaders.Shared+shaders.SimpleFragmentTextured", pDFragStr, 3); CreateShader(&frgTxShdr, FRAG, pDFragStr, got); CreateShaderProgram(&texture_shader); AddShaderToProgram(&texture_shader,&vtxTxShdr); AddShaderToProgram(&texture_shader,&frgTxShdr); LinkShaderProgram(&texture_shader); //shader (COLOUR) got = glswGetShadersAlt("shaders.Header.Vertex+shaders.Shared+shaders.SimpleVertexColoured", pDVertStr, 3); CreateShader(&vtxClrShdr, VERT, pDVertStr, got); got = glswGetShadersAlt("shaders.Header.Fragment+shaders.Shared+shaders.SimpleFragmentColoured", pDFragStr, 3); CreateShader(&frgClrShdr, FRAG, pDFragStr, got); CreateShaderProgram(&colour_shader); AddShaderToProgram(&colour_shader,&vtxClrShdr); AddShaderToProgram(&colour_shader,&frgClrShdr); LinkShaderProgram(&colour_shader); //shader (LIGHTMAP) got = glswGetShadersAlt("shaders.Header.Vertex+shaders.Shared+shaders.SimpleVertexLightmap", pDVertStr, 3); CreateShader(&vtxLightShdr, VERT, pDVertStr, got); got = glswGetShadersAlt("shaders.Header.Fragment+shaders.Shared+shaders.SimpleFragmentLightmap", pDFragStr, 3); CreateShader(&frgLightShdr, FRAG, pDFragStr, got); CreateShaderProgram(&light_map_shader); AddShaderToProgram(&light_map_shader, &vtxLightShdr); AddShaderToProgram(&light_map_shader, &frgLightShdr); LinkShaderProgram(&light_map_shader); //this will delete them after we have deleted the program associated with them DeleteShader(&vtxTxShdr); DeleteShader(&frgTxShdr); DeleteShader(&vtxClrShdr); DeleteShader(&frgClrShdr); DeleteShader(&vtxLightShdr); DeleteShader(&frgLightShdr); }