git-svn-id: svn://db.shs.com.ru/libs@666 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -217,14 +217,10 @@ void Framebuffer::blit(int index_from, GLuint fb_to, int index_to, QRect from, Q
|
|||||||
void Framebuffer::bind() {
|
void Framebuffer::bind() {
|
||||||
if (is_changed) resize(wid, hei);
|
if (is_changed) resize(wid, hei);
|
||||||
if (fbo == 0) return;
|
if (fbo == 0) return;
|
||||||
//glFlush();
|
|
||||||
f->glGetIntegerv(GL_VIEWPORT, prev_view);
|
f->glGetIntegerv(GL_VIEWPORT, prev_view);
|
||||||
//glClearError();
|
|
||||||
f->glBindFramebuffer(GL_FRAMEBUFFER, fbo);
|
f->glBindFramebuffer(GL_FRAMEBUFFER, fbo);
|
||||||
//qDebug() << QString::number(glGetError(), 16);
|
|
||||||
setWriteBuffers();
|
setWriteBuffers();
|
||||||
f->glReadBuffer(GL_COLOR_ATTACHMENT0);
|
f->glReadBuffer(GL_COLOR_ATTACHMENT0);
|
||||||
//f->glDrawBuffer(GL_COLOR_ATTACHMENT0);
|
|
||||||
f->glViewport(0, 0, wid, hei);
|
f->glViewport(0, 0, wid, hei);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,7 +228,6 @@ void Framebuffer::bind() {
|
|||||||
void Framebuffer::release() {
|
void Framebuffer::release() {
|
||||||
is_changed = false;
|
is_changed = false;
|
||||||
if (fbo == 0) return;
|
if (fbo == 0) return;
|
||||||
//glFlush();
|
|
||||||
f->glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
f->glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
f->glViewport(prev_view[0], prev_view[1], prev_view[2], prev_view[3]);
|
f->glViewport(prev_view[0], prev_view[1], prev_view[2], prev_view[3]);
|
||||||
}
|
}
|
||||||
@@ -245,7 +240,7 @@ void Framebuffer::setWriteBuffer(int index) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Framebuffer::setWriteBuffers(int * indeces, int count) {
|
void Framebuffer::setWriteBuffers(const int * indeces, int count) {
|
||||||
unsetWriteBuffers();
|
unsetWriteBuffers();
|
||||||
QVector<GLenum> buffers;
|
QVector<GLenum> buffers;
|
||||||
for (int i = 0; i < count; ++i)
|
for (int i = 0; i < count; ++i)
|
||||||
|
|||||||
@@ -57,7 +57,8 @@ public:
|
|||||||
void release();
|
void release();
|
||||||
void setReadBuffer(int index) {glReadBuffer(GL_COLOR_ATTACHMENT0 + index);}
|
void setReadBuffer(int index) {glReadBuffer(GL_COLOR_ATTACHMENT0 + index);}
|
||||||
void setWriteBuffer(int index);
|
void setWriteBuffer(int index);
|
||||||
void setWriteBuffers(int * indeces, int count);
|
void setWriteBuffers(const int * indeces, int count);
|
||||||
|
void setWriteBuffers(const QVector<int> & indeces) {setWriteBuffers(indeces.constData(), indeces.size());}
|
||||||
void setWriteBuffers();
|
void setWriteBuffers();
|
||||||
void unsetWriteBuffers();
|
void unsetWriteBuffers();
|
||||||
//void setColorFormat(GLenum format) {color_format = format; is_changed = true;}
|
//void setColorFormat(GLenum format) {color_format = format; is_changed = true;}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ bool addShader(QOpenGLShaderProgram * prog, QOpenGLShader::ShaderType type, QStr
|
|||||||
content.clear();
|
content.clear();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//qDebug() << "[QGLView] Shader" << file << "found" << (QOpenGLShader::ShaderTypeBit)(int)type << "section ...";
|
//qDebug() << "[QGLEngine] Shader" << file << "found" << (QOpenGLShader::ShaderTypeBit)(int)type << "section ...";
|
||||||
if (add_qgl) {
|
if (add_qgl) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case QOpenGLShader::Fragment:
|
case QOpenGLShader::Fragment:
|
||||||
@@ -48,7 +48,7 @@ bool addShader(QOpenGLShaderProgram * prog, QOpenGLShader::ShaderType type, QStr
|
|||||||
content.prepend(defs);
|
content.prepend(defs);
|
||||||
content.prepend(qgl_common_head);
|
content.prepend(qgl_common_head);
|
||||||
bool ret = prog->addShaderFromSourceCode(type, content.toLatin1());
|
bool ret = prog->addShaderFromSourceCode(type, content.toLatin1());
|
||||||
if (!ret) qDebug() << "[QGLView] Shader" << file << "Compile error:\n" << prog->log();
|
if (!ret) qDebug() << "[QGLEngine] Shader" << file << "Compile error:\n" << prog->log();
|
||||||
content.clear();
|
content.clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -69,7 +69,7 @@ bool QGLEngineShaders::loadShadersMulti(QOpenGLShaderProgram *& prog, const QStr
|
|||||||
prog->removeAllShaders();
|
prog->removeAllShaders();
|
||||||
QFile f(file);
|
QFile f(file);
|
||||||
if (!f.open(QIODevice::ReadOnly)) {
|
if (!f.open(QIODevice::ReadOnly)) {
|
||||||
qDebug() << "[QGLView] Shader" << file << "Error: can`t open file!";
|
qDebug() << "[QGLEngine] Shader" << file << "Error: can`t open file!";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QTextStream ts(&f);
|
QTextStream ts(&f);
|
||||||
@@ -109,10 +109,10 @@ bool QGLEngineShaders::loadShadersMulti(QOpenGLShaderProgram *& prog, const QStr
|
|||||||
}
|
}
|
||||||
if (!addShader(prog, type, cur_shader, file, add_qgl, defs)) return false;
|
if (!addShader(prog, type, cur_shader, file, add_qgl, defs)) return false;
|
||||||
if (!prog->link()) {
|
if (!prog->link()) {
|
||||||
qDebug() << "[QGLView] Shader" << file << "Link error:\n" << prog->log();
|
qDebug() << "[QGLEngine] Shader" << file << "Link error:\n" << prog->log();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
qDebug() << "[QGLView] Shader" << file << "ok";
|
qDebug() << "[QGLEngine] Shader" << file << "ok";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,16 +131,16 @@ bool QGLEngineShaders::loadShaders(QOpenGLShaderProgram *& prog, const QStringLi
|
|||||||
if (type == 0) continue;
|
if (type == 0) continue;
|
||||||
QFile file(f);
|
QFile file(f);
|
||||||
if (!file.open(QIODevice::ReadOnly)) {
|
if (!file.open(QIODevice::ReadOnly)) {
|
||||||
qDebug() << "[QGLView] Shader" << f << "Error: can`t open file!";
|
qDebug() << "[QGLEngine] Shader" << f << "Error: can`t open file!";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
cur_shader = file.readAll();
|
cur_shader = file.readAll();
|
||||||
if (!addShader(prog, type, cur_shader, f, add_qgl, defs)) return false;
|
if (!addShader(prog, type, cur_shader, f, add_qgl, defs)) return false;
|
||||||
}
|
}
|
||||||
if (!prog->link()) {
|
if (!prog->link()) {
|
||||||
qDebug() << "[QGLView] Shader" << files << "Link error:\n" << prog->log();
|
qDebug() << "[QGLEngine] Shader" << files << "Link error:\n" << prog->log();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
qDebug() << "[QGLView] Shader" << files << "ok";
|
qDebug() << "[QGLEngine] Shader" << files << "ok";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,8 @@ class QGLView: public OpenGLWindow
|
|||||||
Q_PROPERTY (float lineWidth READ lineWidth WRITE setLineWidth)
|
Q_PROPERTY (float lineWidth READ lineWidth WRITE setLineWidth)
|
||||||
Q_PROPERTY (float FOV READ FOV WRITE setFOV)
|
Q_PROPERTY (float FOV READ FOV WRITE setFOV)
|
||||||
Q_PROPERTY (float depthStart READ depthStart WRITE setDepthStart)
|
Q_PROPERTY (float depthStart READ depthStart WRITE setDepthStart)
|
||||||
Q_PROPERTY (float exposure READ exposure WRITE setExposure)
|
Q_PROPERTY (float gamma READ gamma WRITE setGamma)
|
||||||
|
Q_PROPERTY (bool autoExposure READ autoExposure WRITE setAutoExposure)
|
||||||
Q_PROPERTY (QColor ambientColor READ ambientColor WRITE setAmbientColor)
|
Q_PROPERTY (QColor ambientColor READ ambientColor WRITE setAmbientColor)
|
||||||
Q_PROPERTY (QColor fogColor READ fogColor WRITE setFogColor)
|
Q_PROPERTY (QColor fogColor READ fogColor WRITE setFogColor)
|
||||||
Q_PROPERTY (bool fogEnabled READ isFogEnabled WRITE setFogEnabled)
|
Q_PROPERTY (bool fogEnabled READ isFogEnabled WRITE setFogEnabled)
|
||||||
@@ -111,7 +112,8 @@ public:
|
|||||||
float FOV() const {return camera()->fov_;}
|
float FOV() const {return camera()->fov_;}
|
||||||
float depthStart() const {return camera()->depth_start;}
|
float depthStart() const {return camera()->depth_start;}
|
||||||
float currentFPS() const {return fps_;}
|
float currentFPS() const {return fps_;}
|
||||||
float exposure() const {return renderer_.exposure_;}
|
float gamma() const {return renderer_.gamma_;}
|
||||||
|
bool autoExposure() const {return renderer_.tone_proc.enabled;}
|
||||||
int maxAnisotropicLevel() const {return max_anisotropic;}
|
int maxAnisotropicLevel() const {return max_anisotropic;}
|
||||||
|
|
||||||
QColor ambientColor() const {return ambientColor_;}
|
QColor ambientColor() const {return ambientColor_;}
|
||||||
@@ -231,7 +233,8 @@ public slots:
|
|||||||
void setLineWidth(const float & arg) {lineWidth_ = arg;}
|
void setLineWidth(const float & arg) {lineWidth_ = arg;}
|
||||||
void setFOV(const float & arg) {camera()->fov_ = arg;}
|
void setFOV(const float & arg) {camera()->fov_ = arg;}
|
||||||
void setDepthStart(const float & arg) {camera()->depth_start = arg;}
|
void setDepthStart(const float & arg) {camera()->depth_start = arg;}
|
||||||
void setExposure(const float & arg) {renderer_.exposure_ = arg;}
|
void setGamma(const float & arg) {renderer_.gamma_ = arg;}
|
||||||
|
void setAutoExposure(bool arg) {renderer_.tone_proc.enabled = arg;}
|
||||||
void setAmbientColor(const QColor & arg) {ambientColor_ = arg;}
|
void setAmbientColor(const QColor & arg) {ambientColor_ = arg;}
|
||||||
void setFogColor(const QColor & arg) {fogColor_ = arg;}
|
void setFogColor(const QColor & arg) {fogColor_ = arg;}
|
||||||
void setFogDensity(const float & arg) {fogDensity_ = arg;}
|
void setFogDensity(const float & arg) {fogDensity_ = arg;}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ private:
|
|||||||
private slots:
|
private slots:
|
||||||
void on_spinFOV_valueChanged(double val) {view->view()->setFOV(val);}
|
void on_spinFOV_valueChanged(double val) {view->view()->setFOV(val);}
|
||||||
void on_spinDepthStart_valueChanged(double val) {view->view()->setDepthStart(val);}
|
void on_spinDepthStart_valueChanged(double val) {view->view()->setDepthStart(val);}
|
||||||
void on_spinViewExposure_valueChanged(double val) {view->view()->setExposure(val);}
|
void on_spinViewGamma_valueChanged(double val) {view->view()->setGamma(val);}
|
||||||
void on_comboViewRenderMode_currentIndexChanged(int val) {static int modes[] = {GL_POINT, GL_LINE, GL_FILL}; view->view()->setRenderMode((ObjectBase::RenderMode)modes[val]);}
|
void on_comboViewRenderMode_currentIndexChanged(int val) {static int modes[] = {GL_POINT, GL_LINE, GL_FILL}; view->view()->setRenderMode((ObjectBase::RenderMode)modes[val]);}
|
||||||
void on_groupHoverHalo_clicked(bool val) {view->view()->setHoverHaloEnabled(val);}
|
void on_groupHoverHalo_clicked(bool val) {view->view()->setHoverHaloEnabled(val);}
|
||||||
void on_groupSelectionHalo_clicked(bool val) {view->view()->setSelectionHaloEnabled(val);}
|
void on_groupSelectionHalo_clicked(bool val) {view->view()->setSelectionHaloEnabled(val);}
|
||||||
@@ -71,6 +71,7 @@ private slots:
|
|||||||
void on_spinSelectionHaloFill_valueChanged(double val) {view->view()->setSelectionHaloFillAlpha(val);}
|
void on_spinSelectionHaloFill_valueChanged(double val) {view->view()->setSelectionHaloFillAlpha(val);}
|
||||||
void on_colorHoverHalo_colorChanged(QColor color) {view->view()->setHoverHaloColor(color);}
|
void on_colorHoverHalo_colorChanged(QColor color) {view->view()->setHoverHaloColor(color);}
|
||||||
void on_colorSelectionHalo_colorChanged(QColor color) {view->view()->setSelectionHaloColor(color);}
|
void on_colorSelectionHalo_colorChanged(QColor color) {view->view()->setSelectionHaloColor(color);}
|
||||||
|
void on_checkAutoExposure_toggled(bool val) {view->view()->setAutoExposure(val);}
|
||||||
void on_checkFXAA_clicked(bool val) {view->view()->setFeature(QGLView::qglFXAA, val);}
|
void on_checkFXAA_clicked(bool val) {view->view()->setFeature(QGLView::qglFXAA, val);}
|
||||||
void on_colorBack_colorChanged(QColor color) {view->view()->setBackColor(color);}
|
void on_colorBack_colorChanged(QColor color) {view->view()->setBackColor(color);}
|
||||||
void on_colorAmbient_colorChanged(QColor color) {view->view()->setAmbientColor(color);}
|
void on_colorAmbient_colorChanged(QColor color) {view->view()->setAmbientColor(color);}
|
||||||
|
|||||||
@@ -107,6 +107,22 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="spinDepthStart">
|
||||||
|
<property name="decimals">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>999999999.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="stepType">
|
||||||
|
<enum>QAbstractSpinBox::AdaptiveDecimalStepType</enum>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<double>1.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -175,37 +191,34 @@
|
|||||||
<item row="5" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="QLabel" name="label_22">
|
<widget class="QLabel" name="label_22">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Exposure</string>
|
<string>Gamma</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="1">
|
<item row="5" column="1">
|
||||||
<widget class="SpinSlider" name="spinViewExposure">
|
<widget class="SpinSlider" name="spinViewGamma">
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<double>0.010000000000000</double>
|
<double>0.010000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<double>99.000000000000000</double>
|
<double>5.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<double>1.000000000000000</double>
|
<double>1.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
<property name="decimals">
|
<property name="decimals">
|
||||||
<number>3</number>
|
<number>2</number>
|
||||||
</property>
|
|
||||||
<property name="squareScale">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="0" colspan="2">
|
<item row="7" column="0" colspan="2">
|
||||||
<widget class="QCheckBox" name="checkFXAA">
|
<widget class="QCheckBox" name="checkFXAA">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>FXAA</string>
|
<string>FXAA</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="0" colspan="2">
|
<item row="8" column="0" colspan="2">
|
||||||
<widget class="QGroupBox" name="groupHoverHalo">
|
<widget class="QGroupBox" name="groupHoverHalo">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Hover halo</string>
|
<string>Hover halo</string>
|
||||||
@@ -260,7 +273,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0" colspan="2">
|
<item row="9" column="0" colspan="2">
|
||||||
<widget class="QGroupBox" name="groupSelectionHalo">
|
<widget class="QGroupBox" name="groupSelectionHalo">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Selection halo</string>
|
<string>Selection halo</string>
|
||||||
@@ -315,7 +328,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="0" colspan="2">
|
<item row="10" column="0" colspan="2">
|
||||||
<widget class="QGroupBox" name="groupCamera">
|
<widget class="QGroupBox" name="groupCamera">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Camera</string>
|
<string>Camera</string>
|
||||||
@@ -344,16 +357,13 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="6" column="0" colspan="2">
|
||||||
<widget class="QDoubleSpinBox" name="spinDepthStart">
|
<widget class="QCheckBox" name="checkAutoExposure">
|
||||||
<property name="decimals">
|
<property name="text">
|
||||||
<number>3</number>
|
<string>Auto exposure</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="checked">
|
||||||
<double>999999999.000000000000000</double>
|
<bool>true</bool>
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<double>1.000000000000000</double>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -377,7 +387,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>960</width>
|
<width>951</width>
|
||||||
<height>737</height>
|
<height>737</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@@ -1016,7 +1026,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>999</width>
|
<width>990</width>
|
||||||
<height>853</height>
|
<height>853</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ Renderer::Renderer(QGLView * view_): RendererBase(view_),
|
|||||||
<< ShaderPair("ssao_merge", &shader_ssao_merge)
|
<< ShaderPair("ssao_merge", &shader_ssao_merge)
|
||||||
<< ShaderPair("dof", &shader_dof);*/
|
<< ShaderPair("dof", &shader_dof);*/
|
||||||
shader_fxaa = 0;
|
shader_fxaa = 0;
|
||||||
exposure_ = 1.;
|
gamma_ = 1.;
|
||||||
edit_mode = need_init_shaders = is_camera_light = true;
|
edit_mode = need_init_shaders = is_camera_light = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,6 +160,9 @@ void Renderer::initShaders() {
|
|||||||
for (int i = 0; i < 5; ++i)
|
for (int i = 0; i < 5; ++i)
|
||||||
prog->setUniformValue(QString("tex_%1").arg(i).toLatin1().constData(), i);
|
prog->setUniformValue(QString("tex_%1").arg(i).toLatin1().constData(), i);
|
||||||
}
|
}
|
||||||
|
if (bindShader(srGeometryPass, &prog)) {
|
||||||
|
setUniformMaps(prog);
|
||||||
|
}
|
||||||
if (bindShader(srTonemapPass, &prog)) {
|
if (bindShader(srTonemapPass, &prog)) {
|
||||||
prog->setUniformValue("tex_0", 0);
|
prog->setUniformValue("tex_0", 0);
|
||||||
prog->setUniformValue("tex_sum", 1);
|
prog->setUniformValue("tex_sum", 1);
|
||||||
@@ -266,17 +269,16 @@ void Renderer::renderScene() {
|
|||||||
glEnableDepth();
|
glEnableDepth();
|
||||||
glClearFramebuffer();
|
glClearFramebuffer();
|
||||||
if (bindShader(srGeometryPass, &prog)) {
|
if (bindShader(srGeometryPass, &prog)) {
|
||||||
setUniformMaps(prog);
|
|
||||||
setUniformCamera(prog, cam);
|
setUniformCamera(prog, cam);
|
||||||
textures_empty.bind(f, tarEmpty);
|
textures_empty.bind(f, tarEmpty);
|
||||||
textures_maps .bind(f, tarMaps );
|
textures_maps .bind(f, tarMaps );
|
||||||
renderObjects(scene, rpSolid);
|
renderObjects(scene, rpSolid);
|
||||||
|
renderObjects(scene, rpTransparent);
|
||||||
}
|
}
|
||||||
fbo_ds.release();
|
fbo_ds.release();
|
||||||
|
|
||||||
/// lighting passes
|
/// lighting passes
|
||||||
fbo_ds.bindColorTextures();
|
fbo_ds.bindColorTextures();
|
||||||
fbo_ds.bindDepthTexture(5);
|
|
||||||
fbo_out.bind();
|
fbo_out.bind();
|
||||||
//int ri = 1, wi = 0;
|
//int ri = 1, wi = 0;
|
||||||
typedef QPair<Renderer::ShaderRole, Light::Type> PassPair;
|
typedef QPair<Renderer::ShaderRole, Light::Type> PassPair;
|
||||||
@@ -293,6 +295,8 @@ void Renderer::renderScene() {
|
|||||||
renderQuad(prog, quad, cam);
|
renderQuad(prog, quad, cam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// blending layers
|
||||||
if (bindShader(srFinalPass, &prog)) {
|
if (bindShader(srFinalPass, &prog)) {
|
||||||
fbo_out.bindColorTexture(obrSolidOmni, 0);
|
fbo_out.bindColorTexture(obrSolidOmni, 0);
|
||||||
fbo_out.bindColorTexture(obrSolidSpot, 1);
|
fbo_out.bindColorTexture(obrSolidSpot, 1);
|
||||||
@@ -302,7 +306,7 @@ void Renderer::renderScene() {
|
|||||||
if (tone_proc.process())
|
if (tone_proc.process())
|
||||||
fbo_out.bind();
|
fbo_out.bind();
|
||||||
if (bindShader(srTonemapPass, &prog)) {
|
if (bindShader(srTonemapPass, &prog)) {
|
||||||
prog->setUniformValue("exposure", exposure_);
|
prog->setUniformValue("gamma", gamma_);
|
||||||
prog->setUniformValue("frame_max", tone_proc.frameMax());
|
prog->setUniformValue("frame_max", tone_proc.frameMax());
|
||||||
//fbo_1x1.bindColorTexture(0, 1);
|
//fbo_1x1.bindColorTexture(0, 1);
|
||||||
fbo_out.bindColorTexture(obrSum, 0);
|
fbo_out.bindColorTexture(obrSum, 0);
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ protected:
|
|||||||
void releaseShader();
|
void releaseShader();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float exposure_;
|
float gamma_;
|
||||||
bool edit_mode, need_init_shaders, is_camera_light, need_render_sum;
|
bool edit_mode, need_init_shaders, is_camera_light, need_render_sum;
|
||||||
Framebuffer fbo_ds, fbo_out;
|
Framebuffer fbo_ds, fbo_out;
|
||||||
/*QOpenGLShaderProgram * shader_fxaa, * shader_ds_0, * shader_ds_1, * shader_hdr, * shader_small;
|
/*QOpenGLShaderProgram * shader_fxaa, * shader_ds_0, * shader_ds_1, * shader_hdr, * shader_small;
|
||||||
|
|||||||
@@ -142,8 +142,7 @@ void RendererSelection::renderSelection(Scene & scene) {
|
|||||||
//qDebug() << id_hover;
|
//qDebug() << id_hover;
|
||||||
fbo_selection.bindColorTexture(sbrSrcHover , sbrSrcHover );
|
fbo_selection.bindColorTexture(sbrSrcHover , sbrSrcHover );
|
||||||
fbo_selection.bindColorTexture(sbrSrcSelect, sbrSrcSelect);
|
fbo_selection.bindColorTexture(sbrSrcSelect, sbrSrcSelect);
|
||||||
int wind[2] = {sbrHovered, sbrSelected};
|
fbo_selection.setWriteBuffers(QVector<int>() << sbrHovered << sbrSelected);
|
||||||
fbo_selection.setWriteBuffers(wind, 2);
|
|
||||||
if (!view->hoverHalo_ && !view->selectionHalo_)
|
if (!view->hoverHalo_ && !view->selectionHalo_)
|
||||||
glClearFramebuffer(QColor(0,0,0,0), false);
|
glClearFramebuffer(QColor(0,0,0,0), false);
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ TonemappingProc::TonemappingProc(Renderer * rend): QThread(), r(rend),
|
|||||||
timer_delim = 0;
|
timer_delim = 0;
|
||||||
frame_max = cur_max = 1.;
|
frame_max = cur_max = 1.;
|
||||||
need_render_sum = exit_ = false;
|
need_render_sum = exit_ = false;
|
||||||
|
enabled = true;
|
||||||
timer_tone = startTimer(10);
|
timer_tone = startTimer(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +81,7 @@ void TonemappingProc::resize() {
|
|||||||
|
|
||||||
|
|
||||||
void TonemappingProc::timerEvent(QTimerEvent * e) {
|
void TonemappingProc::timerEvent(QTimerEvent * e) {
|
||||||
if (!fbo_1x1.isInit()) return;
|
if (!fbo_1x1.isInit() || !enabled) return;
|
||||||
if (timer_delim == 0)
|
if (timer_delim == 0)
|
||||||
need_render_sum = true;
|
need_render_sum = true;
|
||||||
timer_delim = (timer_delim + 1) % 10;
|
timer_delim = (timer_delim + 1) % 10;
|
||||||
@@ -122,6 +123,10 @@ void TonemappingProc::renderSum(Framebuffer & fbo_src, int index) {
|
|||||||
|
|
||||||
void TonemappingProc::run() {
|
void TonemappingProc::run() {
|
||||||
while (!exit_) {
|
while (!exit_) {
|
||||||
|
if (!enabled) {
|
||||||
|
msleep(100);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
mutex.lock();
|
mutex.lock();
|
||||||
if (last_data.isEmpty()) {
|
if (last_data.isEmpty()) {
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
@@ -159,7 +164,7 @@ float TonemappingProc::calcHistogram(const QVector<QVector4D> & data) {
|
|||||||
|
|
||||||
|
|
||||||
bool TonemappingProc::process() {
|
bool TonemappingProc::process() {
|
||||||
if (!need_render_sum) return false;
|
if (!need_render_sum || !enabled) return false;
|
||||||
need_render_sum = false;
|
need_render_sum = false;
|
||||||
Framebuffer & fbo(fbomm.lastPlane());
|
Framebuffer & fbo(fbomm.lastPlane());
|
||||||
if (fbo.queriedPoints() > 0) {
|
if (fbo.queriedPoints() > 0) {
|
||||||
@@ -176,10 +181,6 @@ bool TonemappingProc::process() {
|
|||||||
|
|
||||||
|
|
||||||
float TonemappingProc::frameMax() {
|
float TonemappingProc::frameMax() {
|
||||||
|
if (!enabled) return 1.f;
|
||||||
return cur_max;
|
return cur_max;
|
||||||
/*mutex.lock();
|
|
||||||
float ret = frame_max;
|
|
||||||
mutex.unlock();
|
|
||||||
return ret;*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
class TonemappingProc: public QThread
|
class TonemappingProc: public QThread
|
||||||
{
|
{
|
||||||
friend class Renderer;
|
friend class Renderer;
|
||||||
|
friend class QGLView;
|
||||||
public:
|
public:
|
||||||
TonemappingProc(Renderer * rend);
|
TonemappingProc(Renderer * rend);
|
||||||
virtual ~TonemappingProc();
|
virtual ~TonemappingProc();
|
||||||
@@ -50,7 +51,7 @@ private:
|
|||||||
QVector<float> last_max;
|
QVector<float> last_max;
|
||||||
|
|
||||||
float frame_max, cur_max;
|
float frame_max, cur_max;
|
||||||
bool need_render_sum;
|
bool need_render_sum, enabled;
|
||||||
volatile bool exit_;
|
volatile bool exit_;
|
||||||
int timer_tone, timer_delim;
|
int timer_tone, timer_delim;
|
||||||
Framebuffer fbo_1x1;
|
Framebuffer fbo_1x1;
|
||||||
|
|||||||
Reference in New Issue
Block a user