context reinit support
This commit is contained in:
18
renderer.cpp
18
renderer.cpp
@@ -53,8 +53,6 @@ Renderer::Renderer(QGLView * view_): RendererBase(view_),
|
||||
shader_files[srFinalPass ] = "ds_final.glsl";
|
||||
shader_files[srTonemapPass ] = "ds_tonemap.glsl";
|
||||
|
||||
shader_fxaa = 0;
|
||||
gamma_ = 1.;
|
||||
edit_mode = need_init_shaders = true;
|
||||
camera_light_mode = QGLView::clmAuto;
|
||||
}
|
||||
@@ -69,6 +67,14 @@ Renderer::~Renderer() {
|
||||
|
||||
|
||||
void Renderer::init(int width, int height) {
|
||||
fbo_ds.reinit();
|
||||
fbo_out.reinit();
|
||||
quad->reinit();
|
||||
buffer_materials.reinit();
|
||||
buffer_lights.reinit();
|
||||
buffer_lights_pos.reinit();
|
||||
textures_maps.reinit();
|
||||
textures_empty.reinit();
|
||||
resize(width, height);
|
||||
rend_mat.init(width, height);
|
||||
rend_service.init(width, height);
|
||||
@@ -77,6 +83,7 @@ void Renderer::init(int width, int height) {
|
||||
initQuad(quad);
|
||||
initTextureArrays();
|
||||
initCoeffTextures();
|
||||
markReloadTextures();
|
||||
tex_env.init();
|
||||
need_init_shaders = true;
|
||||
}
|
||||
@@ -94,6 +101,12 @@ void Renderer::resize(int width, int height) {
|
||||
|
||||
void Renderer::reloadShaders() {
|
||||
QMapIterator<ShaderRole, QString> it(shader_files);
|
||||
qDeleteAll(shaders.values());
|
||||
shaders.clear();
|
||||
if (shader_fxaa) delete shader_fxaa;
|
||||
shader_fxaa = nullptr;
|
||||
if (tone_proc.shader_sum) delete tone_proc.shader_sum;
|
||||
tone_proc.shader_sum = nullptr;
|
||||
QString dir = ":shaders/";
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
@@ -343,6 +356,7 @@ void Renderer::renderScene() {
|
||||
renderQuad(prog, quad);
|
||||
} else
|
||||
fbo_out.blit(obrSum, fbo_out.id(), obrTonemap, fbo_out.rect(), fbo_out.rect());
|
||||
//glClearFramebuffer(Qt::red, false);
|
||||
fbo_out.release();
|
||||
|
||||
/// apply hovers and selection frame
|
||||
|
||||
Reference in New Issue
Block a user