TiledLightRenderer::TiledLightRenderer(DeferredRenderer& deferred, bool hdr) : LightContextRenderer(deferred) { _tileCount = deferred.resolution() / TILE_SIZE; if(deferred.resolution().x() % TILE_SIZE.x() != 0) _tileCount.x()++; if(deferred.resolution().y() % TILE_SIZE.y() != 0) _tileCount.y()++; ShaderCompiler shader(ShaderCompiler::COMPUTE_SHADER); shader.setSource(StringUtils::readFile("shader/tiledLightShader.cs")); auto optShader = Shader::linkComputeShader(shader.compile({})); if(!optShader.hasValue()) { LOG("shader/tiledLightShader.cs error:\n", shader.error()); LOG("Link erorr:", Shader::lastLinkError()); } else _computeShader = optShader.value(); _computeShader->bind(); _nbLightUniformId = _computeShader->uniformLocation("nbLight"); Texture::GenTexParam param; param.format = Texture::RGB16; param.nbLevels = 1; param.size = uivec3(256,256,1); float* dat = new float[256*256*3]; std::ifstream inDat("shader/brdf_256.dat", std::ios_base::binary); inDat.read((char*)dat, sizeof(float)*256*256*3); _processedBrdf = Texture::genTexture2D(param, dat, 3); delete[] dat; }