git-svn-id: svn://db.shs.com.ru/libs@703 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2019-12-15 10:38:43 +00:00
parent 64209212a9
commit b8f2ee0dfb
21 changed files with 772 additions and 151 deletions

View File

@@ -30,7 +30,7 @@ using namespace QGLEngineShaders;
Renderer::Renderer(QGLView * view_): RendererBase(view_),
fbo_ds (view_, QVector<GLenum>() << GL_RGBA16F << GL_RGBA32F << GL_RGBA16F << GL_RGBA16F << GL_RGBA16F),
fbo_out (view_, obrBuffersCount, false, GL_RGBA16F),
rend_mat(this), rend_service(this), rend_selection(this), tone_proc(this) {
rend_mat(this), rend_service(this), rend_selection(this), tone_proc(this), tex_env(view_, 512) {
quad = Primitive::plane(2., 2.);
cam_light = new Light();
cam_light->intensity = 0.75;
@@ -69,7 +69,8 @@ Renderer::Renderer(QGLView * view_): RendererBase(view_),
<< ShaderPair("dof", &shader_dof);*/
shader_fxaa = 0;
gamma_ = 1.;
edit_mode = need_init_shaders = is_camera_light = true;
edit_mode = need_init_shaders = true;
camera_light_mode = QGLView::clmAuto;
}
@@ -90,6 +91,7 @@ void Renderer::init(int width, int height) {
initQuad(quad);
initTextureArrays();
initCoeffTextures();
tex_env.init();
need_init_shaders = true;
}
@@ -158,6 +160,7 @@ void Renderer::initShaders() {
prog->setUniformValue(QString("tex_%1").arg(i).toLatin1().constData(), i);
prog->setUniformValue("tex_coeffs[0]", (int)Renderer::dbrBuffersCount);
//prog->setUniformValue("tex_coeffs[1]", (int)Renderer::dbrBuffersCount+1);
prog->setUniformValue("tex_env", (int)Renderer::dbrBuffersCount+1);
}
if (bindShader(srFinalPass, &prog)) {
prog->setUniformValue("tex_g1" , 0);
@@ -238,6 +241,7 @@ void Renderer::renderLight(int first_wr_buff, bool clear_only) {
}
fbo_ds.bindColorTextures();
fbo_out.bind();
tex_env.bind((int)Renderer::dbrBuffersCount+1);
//int ri = 1, wi = 0;
typedef QPair<Renderer::ShaderRole, Light::Type> PassPair;
QVector<PassPair> passes;
@@ -256,6 +260,7 @@ void Renderer::renderLight(int first_wr_buff, bool clear_only) {
prog->setUniformValue("fog_color", view->fogColor_);
prog->setUniformValue("fog_decay", qMax(view->fogDecay_, 0.001f));
prog->setUniformValue("fog_density", view->fogDensity_);
prog->setUniformValue("view_mat", cam->viewMatrix().inverted().toGenericMatrix<3,3>());
renderQuad(prog, quad, cam);
}
}
@@ -264,6 +269,7 @@ void Renderer::renderLight(int first_wr_buff, bool clear_only) {
void Renderer::renderScene() {
initShaders();
tex_env.load();
QOpenGLExtraFunctions * f = view;
Scene & scene(*(view->scene_));
Camera * cam = view->camera();
@@ -289,7 +295,10 @@ void Renderer::renderScene() {
/// lights
cur_lights = scene.lights_used;
if (is_camera_light) {
bool use_camlight = (camera_light_mode == QGLView::clmOn);
if ((camera_light_mode == QGLView::clmAuto) && cur_lights.isEmpty())
use_camlight = true;
if (use_camlight) {
cur_lights[Light::Omni] << cam_light;
cam_light->setPos(cam->pos());
}
@@ -367,7 +376,7 @@ void Renderer::renderScene() {
}
void Renderer::setCameraLightOn(bool on) {
is_camera_light = on;
void Renderer::setCameraLightMode(int m) {
camera_light_mode = m;
view->scene()->setLightsChanged();
}