void PostProcess::initShaders() { if (PostProcess::shaderBlurH) return; file::Zips zp; zp.add(system_data, system_size); const VertexDeclarationGL* decl = static_cast<const VertexDeclarationGL*>(IVideoDriver::instance->getVertexDeclaration(vertexPCT2::FORMAT)); file::buffer vs_h; file::buffer vs_v; file::buffer fs_blur; zp.read("system/pp_hblur_vs.glsl", vs_h); zp.read("system/pp_vblur_vs.glsl", vs_v); zp.read("system/pp_rast_fs.glsl", fs_blur); vs_h.push_back(0); vs_v.push_back(0); fs_blur.push_back(0); unsigned int h = ShaderProgramGL::createShader(GL_VERTEX_SHADER, (const char*)&vs_h.front(), "", ""); unsigned int v = ShaderProgramGL::createShader(GL_VERTEX_SHADER, (const char*)&vs_v.front(), "", ""); unsigned int ps = ShaderProgramGL::createShader(GL_FRAGMENT_SHADER, (const char*)&fs_blur.front(), "", ""); IVideoDriver* driver = IVideoDriver::instance; shaderBlurV = new ShaderProgramGL(ShaderProgramGL::createProgram(v, ps, decl)); driver->setShaderProgram(shaderBlurV); driver->setUniformInt("s_texture", 0); shaderBlurH = new ShaderProgramGL(ShaderProgramGL::createProgram(h, ps, decl)); driver->setShaderProgram(shaderBlurH); driver->setUniformInt("s_texture", 0); file::buffer vs_blit; file::buffer fs_blit; zp.read("system/pp_blit_vs.glsl", vs_blit); zp.read("system/pp_blit_fs.glsl", fs_blit); vs_blit.push_back(0); fs_blit.push_back(0); unsigned int vs = ShaderProgramGL::createShader(GL_VERTEX_SHADER, (const char*)&vs_blit.front(), "", ""); unsigned int fs = ShaderProgramGL::createShader(GL_FRAGMENT_SHADER, (const char*)&fs_blit.front(), "", ""); shaderBlit = new ShaderProgramGL(ShaderProgramGL::createProgram(vs, fs, decl)); driver->setShaderProgram(shaderBlit); driver->setUniformInt("s_texture", 0); }