git-svn-id: svn://db.shs.com.ru/libs@51 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -89,7 +89,7 @@ void GLRendererBase::setupShadersLights(int lights_count) {
|
||||
#define BIND_TEXTURE(ch, map) if (rp.prev_tex[ch] != mat.map.bitmap_id) { \
|
||||
rp.prev_tex[ch] = mat.map.bitmap_id; \
|
||||
glActiveTextureChannel(ch); glBindTexture(GL_TEXTURE_2D, mat.map.bitmap_id); \
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, view.anisotropicLevel_);}
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, view.feature(QGLView::qglAnisotropicLevel).toInt());}
|
||||
|
||||
void GLRendererBase::setupTextures(GLObjectBase & o, GLRendererBase::RenderingParameters & rp, bool first_object) {
|
||||
if (first_object) {
|
||||
@@ -141,14 +141,14 @@ void GLRendererBase::setupLights(int pass, int lights_per_pass) {
|
||||
|
||||
|
||||
void GLRendererBase::applyFilteringParameters() {
|
||||
if (view.linearFiltering_) {
|
||||
if (view.isFeatureEnabled(QGLView::qglLinearFiltering)) {
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||
} else {
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
|
||||
}
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, view.anisotropicLevel_);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, view.feature(QGLView::qglAnisotropicLevel).toInt());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@ const char qgl_structs[] =
|
||||
" float constantAttenuation;\n"
|
||||
" float linearAttenuation;\n"
|
||||
" float quadraticAttenuation;\n"
|
||||
" sampler2DShadow shadow;\n"
|
||||
"};\n"
|
||||
"struct QGLMap {\n"
|
||||
" float offset;\n"
|
||||
|
||||
@@ -38,7 +38,6 @@ MainWindow::MainWindow(QWidget * parent): QMainWindow(parent), Ui::MainWindow()
|
||||
view->setMouseSelectionEnabled(true);
|
||||
view->setSelectionHaloEnabled(true);
|
||||
view->setHoverHaloEnabled(true);
|
||||
view->setAccomodationEnabled(false);
|
||||
view->setHoverHaloFillAlpha(0.);
|
||||
view->setSelectionHaloFillAlpha(0.);
|
||||
view->setBackColor(Qt::lightGray);
|
||||
@@ -181,8 +180,9 @@ void MainWindow::changeEvent(QEvent * e) {
|
||||
|
||||
void MainWindow::timerEvent(QTimerEvent * ) {
|
||||
static double t = 0.;
|
||||
view->light(view->lightsCount() - 1)->setPos(view->camera().worldPos());
|
||||
((RendererSimple*)(view->renderer()))->mpos = view->mapFromGlobal(QCursor::pos());
|
||||
if (checkCameraLight->isChecked())
|
||||
view->light(view->lightsCount() - 1)->setPos(view->camera().worldPos());
|
||||
//((RendererSimple*)(view->renderer()))->mpos = view->mapFromGlobal(QCursor::pos());
|
||||
//qDebug() << view->camera().angles();
|
||||
//cam_mat.rotate(e->y(), 0., 1., 0.);
|
||||
//view->camera().setTransform(cam_mat);
|
||||
|
||||
@@ -69,15 +69,16 @@ private slots:
|
||||
void on_actionExit_triggered() {close();}
|
||||
|
||||
void on_spinFOV_valueChanged(double val) {view->setFOV(val);}
|
||||
void on_spinAccom_valueChanged(double val) {view->setAccomodationTime(val);}
|
||||
void on_spinAccomMS_valueChanged(double val) {view->setAccomodationMaxSpeed(val);}
|
||||
void on_spinCubemapSize_valueChanged(double val) {view->setDynamicReflectionsMapSize(val);}
|
||||
void on_spinShadowmapSize_valueChanged(double val) {view->setShadowMapSize(val);}
|
||||
void on_spinAccom_valueChanged(double val) {view->setFeature(QGLView::qglEyeAccomodationTime, val);}
|
||||
void on_spinAccomMS_valueChanged(double val) {view->setFeature(QGLView::qglEyeAccomodationMaxSpeed, val);}
|
||||
void on_spinCubemapSize_valueChanged(double val) {view->setFeature(QGLView::qglDynamicReflectionsMapSize, val);}
|
||||
void on_spinShadowmapSize_valueChanged(double val) {view->setFeature(QGLView::qglShadowsMapSize, val);}
|
||||
void on_spinHaloFillAlpha_valueChanged(double val) {view->setSelectionHaloFillAlpha(val);}
|
||||
void on_spinMotionBlurFactor_valueChanged(double val) {view->setMotionBlurFactor(val);}
|
||||
void on_spinMotionBlurSteps_valueChanged(int val) {view->setMotionBlurSteps(val);}
|
||||
void on_spinMotionBloomFactor_valueChanged(double val) {view->setBloomFactor(val);}
|
||||
void on_spinMotionBloomRadius_valueChanged(int val) {view->setBloomRadius(val);}
|
||||
void on_spinMotionBlurFactor_valueChanged(double val) {view->setFeature(QGLView::qglMotionBlurFactor, val);}
|
||||
void on_spinMotionBlurSteps_valueChanged(int val) {view->setFeature(QGLView::qglMotionBlurSteps, val);}
|
||||
void on_spinBloomFactor_valueChanged(double val) {view->setFeature(QGLView::qglBloomFactor, val);}
|
||||
void on_spinBloomRadius_valueChanged(int val) {view->setFeature(QGLView::qglBloomRadius, val);}
|
||||
void on_spinBloomThreshold_valueChanged(double val) {view->setFeature(QGLView::qglBloomThreshold, val);}
|
||||
//void on_spinSliderShine_valueChanged(double val) {obj->material().shine_strength = val; obj->setMaterial(obj->material(), true);}
|
||||
//void on_spinSliderRough_valueChanged(double val) {obj->material().shine = val; obj->setMaterial(obj->material(), true);}
|
||||
void on_pushButton_clicked() {view->removeLight(view->lightsCount() - 1); setWindowTitle(QString::number(view->lightsCount()));}
|
||||
@@ -87,16 +88,16 @@ private slots:
|
||||
void on_comboViewRenderMode_currentIndexChanged(int val) {static int modes[] = {GL_POINT, GL_LINE, GL_FILL}; view->setRenderMode((GLObjectBase::RenderMode)modes[val]);}
|
||||
//void on_comboLight_currentIndexChanged(int val) {obj->material().light_model = (Material::LightModel)val; obj->setMaterial(obj->material(), true);}
|
||||
void on_checkSelectionHalo_toggled(bool val) {view->setSelectionHaloEnabled(val);}
|
||||
void on_checkDynamicReflections_toggled(bool val) {view->setDynamicReflectionsEnabled(val);}
|
||||
void on_checkHDR_toggled(bool val) {view->setHDREnabled(val);}
|
||||
void on_checkAccomodation_toggled(bool val) {view->setAccomodationEnabled(val);}
|
||||
void on_checkBloom_toggled(bool val) {view->setBloomEnabled(val);}
|
||||
void on_checkFXAA_toggled(bool val) {view->setFXAAEnabled(val);}
|
||||
void on_checkMSAA_toggled(bool val) {view->setMultisamplingEnabled(val);}
|
||||
void on_checkShadows_toggled(bool val) {view->setShadowsEnabled(val);}
|
||||
void on_checkSoftShadows_toggled(bool val) {view->setSoftShadowsEnabled(val);}
|
||||
void on_checkDynamicReflections_toggled(bool val) {view->setFeature(QGLView::qglDynamicReflectionsEnabled, val);}
|
||||
void on_checkHDR_toggled(bool val) {view->setFeature(QGLView::qglHDR, val);}
|
||||
void on_checkAccomodation_toggled(bool val) {view->setFeature(QGLView::qglEyeAccomodationEnabled, val);}
|
||||
void on_checkBloom_toggled(bool val) {view->setFeature(QGLView::qglBloomEnabled, val);}
|
||||
void on_checkFXAA_toggled(bool val) {view->setFeature(QGLView::qglFXAA, val);}
|
||||
void on_checkMSAA_toggled(bool val) {view->setFeature(QGLView::qglMSAA, val);}
|
||||
void on_checkShadows_toggled(bool val) {view->setFeature(QGLView::qglShadowsEnabled, val);}
|
||||
void on_checkSoftShadows_toggled(bool val) {view->setFeature(QGLView::qglShadowsSoftEnabled, val);}
|
||||
void on_checkCameraOrbit_toggled(bool val) {view->setCameraOrbit(val);}
|
||||
void on_checkMotionBlur_toggled(bool val) {view->setMotionBlurEnabled(val);}
|
||||
void on_checkMotionBlur_toggled(bool val) {view->setFeature(QGLView::qglMotionBlurEnabled, val);}
|
||||
void on_colorAmbient_colorChanged(QColor color) {view->setAmbientColor(color);}
|
||||
void on_colorHalo_colorChanged(QColor color) {view->setSelectionHaloColor(color);}
|
||||
void on_view_glKeyPressEvent(QKeyEvent * e);
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1246</width>
|
||||
<height>851</height>
|
||||
<width>1131</width>
|
||||
<height>772</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -108,14 +108,14 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="label_12">
|
||||
<property name="text">
|
||||
<string>motion blur factor</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="label_13">
|
||||
<property name="text">
|
||||
<string>motion blur steps</string>
|
||||
@@ -213,7 +213,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="8" column="1">
|
||||
<widget class="SpinSlider" name="spinMotionBlurFactor">
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
@@ -238,7 +238,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<item row="9" column="1">
|
||||
<widget class="SpinSlider" name="spinMotionBlurSteps">
|
||||
<property name="minimum">
|
||||
<double>1.000000000000000</double>
|
||||
@@ -270,7 +270,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="label_15">
|
||||
<property name="text">
|
||||
<string>bloom radius</string>
|
||||
@@ -278,7 +278,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="SpinSlider" name="spinMotionBloomFactor">
|
||||
<widget class="SpinSlider" name="spinBloomFactor">
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
@@ -302,8 +302,8 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="SpinSlider" name="spinMotionBloomRadius">
|
||||
<item row="7" column="1">
|
||||
<widget class="SpinSlider" name="spinBloomRadius">
|
||||
<property name="minimum">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
@@ -327,6 +327,38 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_16">
|
||||
<property name="text">
|
||||
<string>bloom threshold</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="SpinSlider" name="spinBloomThreshold">
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.900000000000000</double>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="squareScale">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
@@ -438,106 +470,107 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkCameraOrbit">
|
||||
<property name="text">
|
||||
<string>orbit camera</string>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="bottomMargin">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkSelectionHalo">
|
||||
<property name="text">
|
||||
<string>selection halo</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBadAccum">
|
||||
<property name="text">
|
||||
<string>bad accumulation</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkDynamicReflections">
|
||||
<property name="text">
|
||||
<string>dynamic reflections</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkHDR">
|
||||
<property name="text">
|
||||
<string>HDR</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkAccomodation">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>accomodation</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBloom">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>bloom</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkMotionBlur">
|
||||
<property name="text">
|
||||
<string>motion blur</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkFXAA">
|
||||
<property name="text">
|
||||
<string>FXAA</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkMSAA">
|
||||
<property name="text">
|
||||
<string>MSAA</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkShadows">
|
||||
<property name="text">
|
||||
<string>shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkSoftShadows">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>soft shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="checkDynamicReflections">
|
||||
<property name="text">
|
||||
<string>dynamic reflections</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="checkBadAccum">
|
||||
<property name="text">
|
||||
<string>bad accumulation</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="checkSelectionHalo">
|
||||
<property name="text">
|
||||
<string>selection halo</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="checkShadows">
|
||||
<property name="text">
|
||||
<string>shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QCheckBox" name="checkSoftShadows">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>soft shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="checkCameraOrbit">
|
||||
<property name="text">
|
||||
<string>orbit camera</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="checkAccomodation">
|
||||
<property name="text">
|
||||
<string>accomodation</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="checkBloom">
|
||||
<property name="text">
|
||||
<string>bloom</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="checkMotionBlur">
|
||||
<property name="text">
|
||||
<string>motion blur</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="checkFXAA">
|
||||
<property name="text">
|
||||
<string>FXAA</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QCheckBox" name="checkMSAA">
|
||||
<property name="text">
|
||||
<string>MSAA</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QCheckBox" name="checkCameraLight">
|
||||
<property name="text">
|
||||
<string>Follow camera light</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
@@ -699,38 +732,6 @@
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>checkHDR</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>checkAccomodation</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>112</x>
|
||||
<y>570</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>111</x>
|
||||
<y>593</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkHDR</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>checkBloom</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>167</x>
|
||||
<y>570</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>163</x>
|
||||
<y>616</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkShadows</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
|
||||
@@ -37,11 +37,12 @@ QGLView::QGLView(QWidget * parent): QGraphicsView(parent), fbo_selection(3) {
|
||||
ambientColor_ = QColor(10, 10, 10);
|
||||
lastPos = QPoint(-1, -1);
|
||||
lineWidth_ = 1.;
|
||||
linearFiltering_ = cameraOrbit_ = lightEnabled_ = true;
|
||||
max_anisotropic = 1;
|
||||
max_texture_chanels = 8;
|
||||
cameraOrbit_ = lightEnabled_ = true;
|
||||
shaders_supported = selecting_ = customMouseMove_ = false;
|
||||
sel_button = Qt::LeftButton;
|
||||
sel_mod = Qt::NoModifier;
|
||||
anisotropicLevel_ = 8;
|
||||
renderer_ = 0;
|
||||
fps_cnt = 0;
|
||||
fps_tm = fps_ = 0.;
|
||||
@@ -51,19 +52,30 @@ QGLView::QGLView(QWidget * parent): QGraphicsView(parent), fbo_selection(3) {
|
||||
fogMode_ = Exp;
|
||||
hoverHaloFill_ = 0.333;
|
||||
selectionHaloFill_ = 0.5;
|
||||
shadow_map_size = dynamic_cubemap_size = 512;
|
||||
//lmode = Simple;
|
||||
shader_select = shader_halo = 0;
|
||||
cur_luminance = 1.;
|
||||
m_bloomFactor = 0.5;
|
||||
m_bloomRadius = 8;
|
||||
accom_time = 16.;
|
||||
accom_max_speed = 0.2;
|
||||
m_motionBlurFactor = 1.;
|
||||
m_motionBlurSteps = 8;
|
||||
mouse_first = mouseSelect_ = accomodation_ = hoverHalo_ = selectionHalo_ = true;
|
||||
fogEnabled_ = is_init = grabMouse_ = mouseRotate_ = mouseThis_ = shaders_bind = m_motionBlurEnabled =
|
||||
shadows_ = shadows_soft = dynamic_reflections = hdr_ = bloom_ = msaa_ = fxaa_ = changed_ = false;
|
||||
setFeature(qglMSAA, false);
|
||||
setFeature(qglFXAA, false);
|
||||
setFeature(qglLinearFiltering, true);
|
||||
setFeature(qglAnisotropicLevel, 8);
|
||||
setFeature(qglHDR, false);
|
||||
setFeature(qglEyeAccomodationEnabled, false);
|
||||
setFeature(qglEyeAccomodationTime, 16.);
|
||||
setFeature(qglEyeAccomodationMaxSpeed, 0.2);
|
||||
setFeature(qglBloomEnabled, false);
|
||||
setFeature(qglBloomThreshold, 0.9);
|
||||
setFeature(qglBloomFactor, 1.);
|
||||
setFeature(qglBloomRadius, 8);
|
||||
setFeature(qglMotionBlurEnabled, false);
|
||||
setFeature(qglMotionBlurFactor, 1.);
|
||||
setFeature(qglMotionBlurSteps, 8);
|
||||
setFeature(qglShadowsEnabled, false);
|
||||
setFeature(qglShadowsMapSize, 512);
|
||||
setFeature(qglShadowsSoftEnabled, false);
|
||||
setFeature(qglDynamicReflectionsEnabled, false);
|
||||
setFeature(qglDynamicReflectionsMapSize, 512);
|
||||
mouse_first = mouseSelect_ = hoverHalo_ = selectionHalo_ = true;
|
||||
fogEnabled_ = is_init = grabMouse_ = mouseRotate_ = mouseThis_ = shaders_bind = changed_ = false;
|
||||
rmode = GLObjectBase::Fill;
|
||||
sel_mode = QGLView::SingleSelection;
|
||||
sel_pen = QPen(Qt::black, 1, Qt::DashLine);
|
||||
@@ -73,8 +85,6 @@ QGLView::QGLView(QWidget * parent): QGraphicsView(parent), fbo_selection(3) {
|
||||
emit cameraPosChanged(camera().pos());
|
||||
//camera().aim_ = camera().pos_;
|
||||
ktm_.restart();
|
||||
sh_lm_diff << "Phong_diffuse" << "Cook_Torrance_diffuse" << "Minnaert_diffuse" << "Strauss_diffuse" << "Oren_Nayar_diffuse";
|
||||
sh_lm_spec << "Phong_specular" << "Cook_Torrance_specular" << "Minnaert_specular" << "Strauss_specular" << "Oren_Nayar_specular";
|
||||
}
|
||||
|
||||
|
||||
@@ -400,7 +410,7 @@ void QGLView::renderSelection() {
|
||||
|
||||
void QGLView::renderShadow() {
|
||||
glPushMatrix();
|
||||
renderSingleShadow(objects_);
|
||||
//renderSingleShadow(objects_);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
@@ -434,7 +444,7 @@ void QGLView::renderSingleSelection(GLObjectBase & o) {
|
||||
renderSingleSelection(*i);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
void QGLView::renderSingleShadow(GLObjectBase & o) {
|
||||
if (!o.isInit()) {
|
||||
o.init();
|
||||
@@ -449,7 +459,7 @@ void QGLView::renderSingleShadow(GLObjectBase & o) {
|
||||
foreach (GLObjectBase * i, o.children_)
|
||||
renderSingleSelection(*i);
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
void QGLView::collectLights() {
|
||||
lights_.clear();
|
||||
@@ -483,6 +493,8 @@ void QGLView::collectObjectLights(GLObjectBase * o) {
|
||||
|
||||
void QGLView::checkCaps() {
|
||||
glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropic);
|
||||
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &max_texture_chanels);
|
||||
//qDebug() << max_texture_chanels;
|
||||
shaders_supported = QGLShaderProgram::hasOpenGLShaderPrograms();
|
||||
}
|
||||
|
||||
@@ -495,7 +507,7 @@ void QGLView::reloadThisShaders() {
|
||||
}
|
||||
|
||||
|
||||
inline void QGLView::applyFog() {
|
||||
void QGLView::applyFog() {
|
||||
GLfloat fog_col[4] = {float(fogColor_.redF()), float(fogColor_.greenF()), float(fogColor_.blueF()), .0f};
|
||||
if (fogEnabled_) {
|
||||
glEnable(GL_FOG);
|
||||
|
||||
@@ -47,8 +47,6 @@ class QGLView: public QGraphicsView, public QGLViewBase
|
||||
Q_PROPERTY (double FOV READ FOV WRITE setFOV)
|
||||
Q_PROPERTY (double depthStart READ depthStart WRITE setDepthStart)
|
||||
Q_PROPERTY (double depthEnd READ depthEnd WRITE setDepthEnd)
|
||||
Q_PROPERTY (bool linearFiltering READ linearFiltering WRITE setLinearFiltering)
|
||||
Q_PROPERTY (int anisotropicLevel READ anisotropicLevel WRITE setAnisotropicLevel)
|
||||
Q_PROPERTY (QColor ambientColor READ ambientColor WRITE setAmbientColor)
|
||||
Q_PROPERTY (QColor fogColor READ fogColor WRITE setFogColor)
|
||||
Q_PROPERTY (double fogDensity READ fogDensity WRITE setFogDensity)
|
||||
@@ -68,23 +66,6 @@ class QGLView: public QGraphicsView, public QGLViewBase
|
||||
Q_PROPERTY (QColor selectionHaloColor READ selectionHaloColor WRITE setSelectionHaloColor)
|
||||
Q_PROPERTY (double selectionHaloFillAlpha READ selectionHaloFillAlpha WRITE setSelectionHaloFillAlpha)
|
||||
//Q_PROPERTY (LightingMode lightingMode READ lightingMode WRITE setLightingMode)
|
||||
Q_PROPERTY (bool shadowsEnabled READ isShadowsEnabled WRITE setShadowsEnabled)
|
||||
Q_PROPERTY (bool softShadowsEnabled READ isSoftShadowsEnabled WRITE setSoftShadowsEnabled)
|
||||
Q_PROPERTY (int shadowMapSize READ shadowMapSize WRITE setShadowMapSize)
|
||||
Q_PROPERTY (bool dynamicReflectionsEnabled READ isDynamicReflectionsEnabled WRITE setDynamicReflectionsEnabled)
|
||||
Q_PROPERTY (int dynamicReflectionsMapSize READ dynamicReflectionsMapSize WRITE setDynamicReflectionsMapSize)
|
||||
Q_PROPERTY (bool HDREnabled READ isHDREnabled WRITE setHDREnabled)
|
||||
Q_PROPERTY (bool bloomEnabled READ isBloomEnabled WRITE setBloomEnabled)
|
||||
Q_PROPERTY (double bloomFactor READ bloomFactor WRITE setBloomFactor)
|
||||
Q_PROPERTY (int bloomRadius READ bloomRadius WRITE setBloomRadius)
|
||||
Q_PROPERTY (bool multisamplingEnabled READ isMultisamplingEnabled WRITE setMultisamplingEnabled)
|
||||
Q_PROPERTY (bool FXAAEnabled READ isFXAAEnabled WRITE setFXAAEnabled)
|
||||
Q_PROPERTY (bool accomodationEnabled READ isAccomodationEnabled WRITE setAccomodationEnabled)
|
||||
Q_PROPERTY (double accomodationTime READ accomodationTime WRITE setAccomodationTime)
|
||||
Q_PROPERTY (double accomodationMaxSpeed READ accomodationMaxSpeed WRITE setAccomodationMaxSpeed)
|
||||
Q_PROPERTY (bool motionBlurEnabled READ isMotionBlurEnabled WRITE setMotionBlurEnabled)
|
||||
Q_PROPERTY (double motionBlurFactor READ motionBlurFactor WRITE setMotionBlurFactor)
|
||||
Q_PROPERTY (int motionBlurSteps READ motionBlurSteps WRITE setMotionBlurSteps)
|
||||
Q_PROPERTY (Qt::MouseButton selectionButton READ selectionButton WRITE setSelectionButton)
|
||||
Q_PROPERTY (Qt::KeyboardModifier selectionModifier READ selectionModifier WRITE setSelectionModifier)
|
||||
Q_PROPERTY (SelectionMode selectionMode READ selectionMode WRITE setSelectionMode)
|
||||
@@ -97,6 +78,28 @@ public:
|
||||
|
||||
enum FogMode {Linear = GL_LINEAR, Exp = GL_EXP, Exp2 = GL_EXP2};
|
||||
enum SelectionMode {NoSelection, SingleSelection, MultiSelection};
|
||||
enum Feature {
|
||||
qglMSAA,
|
||||
qglFXAA,
|
||||
qglLinearFiltering,
|
||||
qglAnisotropicLevel,
|
||||
qglHDR,
|
||||
qglEyeAccomodationEnabled,
|
||||
qglEyeAccomodationTime,
|
||||
qglEyeAccomodationMaxSpeed,
|
||||
qglBloomEnabled,
|
||||
qglBloomThreshold,
|
||||
qglBloomFactor,
|
||||
qglBloomRadius,
|
||||
qglMotionBlurEnabled,
|
||||
qglMotionBlurFactor,
|
||||
qglMotionBlurSteps,
|
||||
qglShadowsEnabled,
|
||||
qglShadowsMapSize,
|
||||
qglShadowsSoftEnabled,
|
||||
qglDynamicReflectionsEnabled,
|
||||
qglDynamicReflectionsMapSize
|
||||
};
|
||||
|
||||
Q_ENUMS (FogMode)
|
||||
Q_ENUMS (SelectionMode)
|
||||
@@ -118,11 +121,7 @@ public:
|
||||
double depthStart() const {return camera().depth_start;}
|
||||
double depthEnd() const {return camera().depth_end;}
|
||||
double currentFPS() const {return fps_;}
|
||||
bool linearFiltering() const {return linearFiltering_;}
|
||||
int anisotropicLevel() const {return anisotropicLevel_;}
|
||||
int maxAnisotropicLevel() const {return max_anisotropic;}
|
||||
int shadowMapSize() const {return shadow_map_size;}
|
||||
int dynamicReflectionsMapSize() const {return dynamic_cubemap_size;}
|
||||
|
||||
QColor ambientColor() const {return ambientColor_;}
|
||||
QColor fogColor() const {return fogColor_;}
|
||||
@@ -143,26 +142,14 @@ public:
|
||||
bool isSelectionHaloEnabled() const {return selectionHalo_;}
|
||||
QColor selectionHaloColor() const {return selectionHaloColor_;}
|
||||
double selectionHaloFillAlpha() const {return selectionHaloFill_;}
|
||||
bool isMotionBlurEnabled() const {return m_motionBlurEnabled;}
|
||||
bool isShadowsEnabled() const {return shadows_;}
|
||||
bool isSoftShadowsEnabled() const {return shadows_soft;}
|
||||
bool isDynamicReflectionsEnabled() const {return dynamic_reflections;}
|
||||
bool isHDREnabled() const {return hdr_;}
|
||||
bool isBloomEnabled() const {return bloom_;}
|
||||
bool isMultisamplingEnabled() const {return msaa_;}
|
||||
bool isFXAAEnabled() const {return fxaa_;}
|
||||
bool isAccomodationEnabled() const {return accomodation_;}
|
||||
|
||||
QVariant feature(Feature f) const {return features_.value(int(f));}
|
||||
QVariant setFeature(Feature f, const QVariant & value) {QVariant ret = features_.value(int(f)); features_[int(f)] = value; return ret;}
|
||||
bool isFeatureEnabled(Feature f) const {return features_[int(f)].toBool();}
|
||||
|
||||
int renderMode() const {return (int)rmode;}
|
||||
void setRenderMode(int mode) {rmode = (GLObjectBase::RenderMode)mode;}
|
||||
|
||||
double bloomFactor() const {return m_bloomFactor;}
|
||||
int bloomRadius() const {return m_bloomRadius;}
|
||||
double accomodationTime() const {return accom_time;}
|
||||
double accomodationMaxSpeed() const {return accom_max_speed;}
|
||||
double motionBlurFactor() const {return m_motionBlurFactor;}
|
||||
int motionBlurSteps() const {return m_motionBlurSteps;}
|
||||
|
||||
void addObject(QGraphicsItem * o) {scene()->addItem(o);}
|
||||
void addObject(QWidget * o, Qt::WindowFlags f = Qt::Widget);
|
||||
void addObject(GLObjectBase * o);
|
||||
@@ -211,16 +198,16 @@ protected:
|
||||
void initializeGL();
|
||||
void paintGL();
|
||||
void resizeGL(int width, int height);
|
||||
virtual void mousePressEvent(QMouseEvent * e);
|
||||
virtual void mouseMoveEvent(QMouseEvent * e);
|
||||
virtual void mouseReleaseEvent(QMouseEvent * e);
|
||||
virtual void wheelEvent(QWheelEvent * e);
|
||||
virtual void leaveEvent(QEvent * );
|
||||
virtual void keyPressEvent(QKeyEvent * e) {emit glKeyPressEvent(e); if (e->key() > 0) keys_.insert(e->key());}
|
||||
virtual void keyReleaseEvent(QKeyEvent * e) {emit glKeyReleaseEvent(e); keys_.remove(e->key());}
|
||||
virtual void focusOutEvent(QFocusEvent *) {keys_.clear();}
|
||||
void mousePressEvent(QMouseEvent * e);
|
||||
void mouseMoveEvent(QMouseEvent * e);
|
||||
void mouseReleaseEvent(QMouseEvent * e);
|
||||
void wheelEvent(QWheelEvent * e);
|
||||
void leaveEvent(QEvent * );
|
||||
void keyPressEvent(QKeyEvent * e) {emit glKeyPressEvent(e); if (e->key() > 0) keys_.insert(e->key());}
|
||||
void keyReleaseEvent(QKeyEvent * e) {emit glKeyReleaseEvent(e); keys_.remove(e->key());}
|
||||
void focusOutEvent(QFocusEvent *) {keys_.clear();}
|
||||
|
||||
inline void applyFog();
|
||||
void applyFog();
|
||||
void renderSelection();
|
||||
void renderShadow();
|
||||
|
||||
@@ -232,7 +219,7 @@ private:
|
||||
void objectsCountInternal(int * cnt, GLObjectBase * where) {++(*cnt); foreach (GLObjectBase * i, where->children_) objectsCountInternal(cnt, i);}
|
||||
void removeObjectInternal(GLObjectBase * o, GLObjectBase * where) {foreach (GLObjectBase * i, where->children_) {if (o == i) where->removeChild(i); else removeObjectInternal(o, i);}}
|
||||
void renderSingleSelection(GLObjectBase & o);
|
||||
void renderSingleShadow(GLObjectBase & o);
|
||||
//void renderSingleShadow(GLObjectBase & o);
|
||||
void renderHalo(const GLObjectBase * obj, const int iid, const QColor & color, const double & fill);
|
||||
QList<QGraphicsItem * > collectGraphicItems();
|
||||
void collectGraphicItems(QList<QGraphicsItem * > & list, QGraphicsItem * o);
|
||||
@@ -253,25 +240,24 @@ private:
|
||||
QTime time, ktm_;
|
||||
QPen sel_pen;
|
||||
QBrush sel_brush;
|
||||
GLint max_anisotropic, anisotropicLevel_;
|
||||
GLint max_anisotropic, max_texture_chanels;
|
||||
GLObjectBase::RenderMode rmode;
|
||||
//LightingMode lmode;
|
||||
GLObjectBase * sel_obj, * hov_obj;
|
||||
GLFramebuffer fbo_selection;
|
||||
QGLShaderProgram * shader_select, * shader_halo;
|
||||
QStringList sh_lm_diff, sh_lm_spec;
|
||||
GLRendererBase * renderer_;
|
||||
SelectionMode sel_mode;
|
||||
Qt::MouseButton sel_button;
|
||||
Qt::KeyboardModifier sel_mod;
|
||||
GLRendererBase::RenderingParameters start_rp;
|
||||
double lineWidth_, linearFiltering_, accom_time, accom_max_speed, cur_luminance, m_bloomFactor;
|
||||
QHash<int, QVariant> features_;
|
||||
double lineWidth_;
|
||||
double fogDensity_, fogStart_, fogEnd_, fps_, fps_tm, hoverHaloFill_, selectionHaloFill_, m_motionBlurFactor;
|
||||
int timer, fps_cnt, sh_id_loc, shadow_map_size, dynamic_cubemap_size, motion_blur_steps, m_motionBlurSteps, m_bloomRadius;
|
||||
int timer, fps_cnt, sh_id_loc;
|
||||
bool is_init, fogEnabled_, lightEnabled_, grabMouse_, mouse_first, mouseRotate_, mouseSelect_, customMouseMove_;
|
||||
bool shaders_supported, changed_, cameraOrbit_;
|
||||
bool hoverHalo_, selectionHalo_, mouseThis_, shaders_bind, shadows_, shadows_soft, selecting_;
|
||||
bool dynamic_reflections, hdr_, bloom_, msaa_, fxaa_, accomodation_, m_motionBlurEnabled;
|
||||
bool hoverHalo_, selectionHalo_, mouseThis_, shaders_bind, selecting_;
|
||||
|
||||
public slots:
|
||||
void setBackColor(const QColor & arg) {backColor_ = arg;}
|
||||
@@ -279,8 +265,6 @@ public slots:
|
||||
void setFOV(const double & arg) {camera().fov_ = arg;}
|
||||
void setDepthStart(const double & arg) {camera().depth_start = arg;}
|
||||
void setDepthEnd(const double & arg) {camera().depth_end = arg;}
|
||||
void setLinearFiltering(const bool & arg) {linearFiltering_ = arg;}
|
||||
void setAnisotropicLevel(const int & arg) {anisotropicLevel_ = arg;}
|
||||
void setAmbientColor(const QColor & arg) {ambientColor_ = arg;}
|
||||
void setFogColor(const QColor & arg) {fogColor_ = arg;}
|
||||
void setFogDensity(const double & arg) {fogDensity_ = arg;}
|
||||
@@ -301,23 +285,6 @@ public slots:
|
||||
void setSelectionHaloColor(const QColor & arg) {selectionHaloColor_ = arg;}
|
||||
void setSelectionHaloFillAlpha(const double & arg) {selectionHaloFill_ = arg;}
|
||||
//void setLightingMode(const LightingMode & arg) {lmode = arg;}
|
||||
void setShadowsEnabled(const bool & arg) {shadows_ = arg;}
|
||||
void setSoftShadowsEnabled(const bool & arg) {shadows_soft = arg;}
|
||||
void setShadowMapSize(const int & arg) {shadow_map_size = arg; changed_ = true;}
|
||||
void setDynamicReflectionsMapSize(const int & arg) {dynamic_cubemap_size = arg; changed_ = true;}
|
||||
void setAccomodationTime(const double & arg) {accom_time = arg;}
|
||||
void setAccomodationMaxSpeed(const double & arg) {accom_max_speed = arg;}
|
||||
void setDynamicReflectionsEnabled(const bool & arg) {dynamic_reflections = arg;}
|
||||
void setHDREnabled(const bool & arg) {hdr_ = arg; changed_ = true;}
|
||||
void setBloomEnabled(const bool & arg) {bloom_ = arg; changed_ = true;}
|
||||
void setMultisamplingEnabled(const bool & arg) {msaa_ = arg;}
|
||||
void setFXAAEnabled(const bool & arg) {fxaa_ = arg;}
|
||||
void setAccomodationEnabled(const bool & arg) {accomodation_ = arg;}
|
||||
void setBloomFactor(double bloomFactor) {m_bloomFactor = bloomFactor;}
|
||||
void setBloomRadius(int bloomRadius) {m_bloomRadius = bloomRadius;}
|
||||
void setMotionBlurEnabled(bool motionBlurEnabled) {m_motionBlurEnabled = motionBlurEnabled;}
|
||||
void setMotionBlurFactor(double motionBlurFactor) {m_motionBlurFactor = motionBlurFactor;}
|
||||
void setMotionBlurSteps(int motionBlurSteps) {m_motionBlurSteps = motionBlurSteps;}
|
||||
|
||||
void reloadShaders() {if (renderer_ != 0) renderer_->reloadShaders(); reloadThisShaders();}
|
||||
void deselect() {sel_obj = 0;}
|
||||
|
||||
@@ -157,7 +157,7 @@ void RendererDeferredShading::renderScene() {
|
||||
glActiveTextureChannel(0);
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri));
|
||||
|
||||
if (view.isAccomodationEnabled()) {
|
||||
if (view.isFeatureEnabled(QGLView::qglEyeAccomodationEnabled)) {
|
||||
fbo_hsmall.bind();
|
||||
fbo_hsmall.setWriteBuffer(0);
|
||||
shader_small->bind();
|
||||
@@ -176,8 +176,8 @@ void RendererDeferredShading::renderScene() {
|
||||
if (max[2] < hcontent[i].z) max[2] = hcontent[i].z;
|
||||
}
|
||||
GLfloat mluma = (0.299 * max[0]) + (0.587 * max[1]) + (0.114 * max[2]);
|
||||
double nexp = mluma / 16., dexp = nexp - exposure_, mestep = exposure_ * view.accomodationMaxSpeed();
|
||||
dexp /= view.accomodationTime();
|
||||
double nexp = mluma / 16., dexp = nexp - exposure_, mestep = exposure_ * view.feature(QGLView::qglEyeAccomodationMaxSpeed).toDouble();
|
||||
dexp /= view.feature(QGLView::qglEyeAccomodationTime).toDouble();
|
||||
if (dexp > 0. && dexp > mestep/4) dexp = mestep/4;
|
||||
if (dexp < 0. && dexp < -mestep) dexp = -mestep;
|
||||
exposure_ += dexp;
|
||||
@@ -198,7 +198,7 @@ void RendererDeferredShading::renderScene() {
|
||||
piSwap<int>(wi, ri);
|
||||
}
|
||||
|
||||
if (view.isMotionBlurEnabled()) {
|
||||
if (view.isFeatureEnabled(QGLView::qglMotionBlurEnabled)) {
|
||||
fbo_out.setWriteBuffer(wi);
|
||||
glActiveTextureChannel(1);
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(4));
|
||||
@@ -207,15 +207,15 @@ void RendererDeferredShading::renderScene() {
|
||||
shader_motion_blur->setUniformValue("dt", QVector2D(1. / fbo_out.width(), 1. / fbo_out.height()));
|
||||
shader_motion_blur->setUniformValue("t0", 0);
|
||||
shader_motion_blur->setUniformValue("ts", 1);
|
||||
shader_motion_blur->setUniformValue("factor", GLfloat(view.motionBlurFactor()));
|
||||
shader_motion_blur->setUniformValue("steps", view.motionBlurSteps());
|
||||
shader_motion_blur->setUniformValue("factor", GLfloat(view.feature(QGLView::qglMotionBlurFactor).toDouble()));
|
||||
shader_motion_blur->setUniformValue("steps", view.feature(QGLView::qglMotionBlurSteps).toInt());
|
||||
glDrawQuad(shader_motion_blur);
|
||||
glActiveTextureChannel(0);
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(wi));
|
||||
piSwap<int>(wi, ri);
|
||||
}
|
||||
|
||||
if (view.isBloomEnabled()) {
|
||||
if (view.isFeatureEnabled(QGLView::qglBloomEnabled)) {
|
||||
fbo_out.setWriteBuffer(2);
|
||||
fbo_out.setReadBuffer(ri);
|
||||
glBlitFramebuffer(0, 0, fbo_out.width(), fbo_out.height(), 0, 0, fbo_out.width(), fbo_out.height(), GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
@@ -223,7 +223,8 @@ void RendererDeferredShading::renderScene() {
|
||||
fbo_out.setWriteBuffer(wi);
|
||||
shader_bloom_0->bind();
|
||||
shader_bloom_0->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4());
|
||||
shader_bloom_0->setUniformValue("factor", GLfloat(view.bloomFactor()));
|
||||
shader_bloom_0->setUniformValue("factor", GLfloat(view.feature(QGLView::qglBloomFactor).toDouble()));
|
||||
shader_bloom_0->setUniformValue("threshold", GLfloat(view.feature(QGLView::qglBloomThreshold).toDouble()));
|
||||
shader_bloom_0->setUniformValue("t0", 0);
|
||||
glDrawQuad(shader_bloom_0);
|
||||
glActiveTextureChannel(0);
|
||||
@@ -231,13 +232,16 @@ void RendererDeferredShading::renderScene() {
|
||||
|
||||
shader_bloom_1->bind();
|
||||
shader_bloom_1->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4());
|
||||
shader_bloom_1->setUniformValue("dt", QVector2D(1. / fbo_out.width(), 1. / fbo_out.height()));
|
||||
shader_bloom_1->setUniformValue("t0", 0);
|
||||
int radius = view.bloomRadius();
|
||||
int radius = view.feature(QGLView::qglBloomRadius).toInt();
|
||||
int passes = qMax<int>(int(ceil(log2(radius))), 1);
|
||||
int crad = 1;
|
||||
for (int p = 0; p < passes; ++p) {
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri));
|
||||
fbo_out.setWriteBuffer(wi);
|
||||
if (p == passes - 1)
|
||||
crad = piMax(1, radius - crad);
|
||||
shader_bloom_1->setUniformValue("radius", crad);
|
||||
glDrawQuad(shader_bloom_1);
|
||||
piSwap<int>(wi, ri);
|
||||
@@ -262,7 +266,7 @@ void RendererDeferredShading::renderScene() {
|
||||
glReleaseShaders();
|
||||
fbo_out.release();
|
||||
|
||||
if (view.isFXAAEnabled()) {
|
||||
if (view.isFeatureEnabled(QGLView::qglFXAA)) {
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
shader_fxaa->bind();
|
||||
@@ -272,7 +276,7 @@ void RendererDeferredShading::renderScene() {
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
}
|
||||
glDrawQuad();
|
||||
if (view.isFXAAEnabled())
|
||||
if (view.isFeatureEnabled(QGLView::qglFXAA))
|
||||
shader_fxaa->release();
|
||||
prev_proj = mproj;
|
||||
prev_view = mview;
|
||||
|
||||
@@ -42,7 +42,7 @@ protected:
|
||||
private:
|
||||
typedef QPair<QString, QGLShaderProgram **> ShaderPair;
|
||||
|
||||
int cplc, BUG[8], lights_per_pass;
|
||||
int cplc, lights_per_pass;
|
||||
double exposure_;
|
||||
GLFramebuffer fbo_g, fbo_out, fbo_hsmall;
|
||||
QGLShaderProgram * shader_fxaa, * shader_ds_0, * shader_ds_1, * shader_hdr, * shader_small;
|
||||
|
||||
@@ -48,10 +48,10 @@ void RendererSimple::resizeFBO(int w, int h) {
|
||||
void RendererSimple::renderScene() {
|
||||
int passes = (view.lightsCount() - 1) / 8 + 1;
|
||||
//QMatrix4x4 pm = getGLMatrix(GL_PROJECTION_MATRIX), mvm = getGLMatrix(GL_MODELVIEW_MATRIX), pmvm = pm * mvm, lpm, lmvm, lpmvm;
|
||||
glSetCapEnabled(GL_MULTISAMPLE, view.isMultisamplingEnabled());
|
||||
glSetCapEnabled(GL_MULTISAMPLE, view.isFeatureEnabled(QGLView::qglMSAA));
|
||||
if (passes < 1) passes = 1;
|
||||
//glEnable(GL_FOG);
|
||||
if (view.isFXAAEnabled()) fbo.bind();
|
||||
if (view.isFeatureEnabled(QGLView::qglFXAA)) fbo.bind();
|
||||
//glEnable(GL_TEXTURE_2D);
|
||||
if (passes > 1) {
|
||||
fbo.bind();
|
||||
@@ -104,7 +104,7 @@ void RendererSimple::renderScene() {
|
||||
glDrawQuad();
|
||||
}
|
||||
}
|
||||
if (view.isFXAAEnabled() || passes > 1) {
|
||||
if (view.isFeatureEnabled(QGLView::qglFXAA) || passes > 1) {
|
||||
fbo.release();
|
||||
//glClearFramebuffer();
|
||||
glActiveTextureChannel(0);
|
||||
@@ -112,7 +112,7 @@ void RendererSimple::renderScene() {
|
||||
glSetLightEnabled(false);
|
||||
glSetCapEnabled(GL_BLEND, false);
|
||||
glDisableDepth();
|
||||
if (view.isFXAAEnabled()) {
|
||||
if (view.isFeatureEnabled(QGLView::qglFXAA)) {
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
shader_fxaa->bind();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#version 150
|
||||
|
||||
uniform sampler2D t0;
|
||||
uniform float factor = 1.;
|
||||
uniform float factor = 1., threshold = 0.8;
|
||||
|
||||
void main(void) {
|
||||
qgl_FragData[0].rgb = max(texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb - vec3(0.8), vec3(0.)) * factor;
|
||||
qgl_FragData[0].rgb = max(texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb - vec3(threshold), vec3(0.)) * factor;
|
||||
}
|
||||
|
||||
@@ -2,12 +2,34 @@
|
||||
|
||||
uniform sampler2D t0;
|
||||
uniform int radius = 2;
|
||||
uniform vec2 dt;
|
||||
|
||||
void main(void) {
|
||||
ivec2 tc = ivec2(gl_FragCoord.xy);
|
||||
vec2 tc = qgl_FragTexture.xy;
|
||||
float r = float(radius);
|
||||
int o = radius, o2 = radius * 2;
|
||||
vec3 scol = (texelFetch(t0, tc, 0).rgb * 3. +
|
||||
vec3 scol = (texture(t0, tc).rgb * 3. +
|
||||
texture(t0, tc + dt * vec2( o, 0 )).rgb * 2. +
|
||||
texture(t0, tc + dt * vec2( 0, o )).rgb * 2. +
|
||||
texture(t0, tc + dt * vec2( -o, 0 )).rgb * 2. +
|
||||
texture(t0, tc + dt * vec2( 0, -o)).rgb * 2. +
|
||||
texture(t0, tc + dt * vec2( o, o )).rgb * 1.5 +
|
||||
texture(t0, tc + dt * vec2( o, -o)).rgb * 1.5 +
|
||||
texture(t0, tc + dt * vec2( -o, -o )).rgb * 1.5 +
|
||||
texture(t0, tc + dt * vec2( -o, o )).rgb * 1.5 +
|
||||
texture(t0, tc + dt * vec2( o2, 0 )).rgb +
|
||||
texture(t0, tc + dt * vec2( 0, o2)).rgb +
|
||||
texture(t0, tc + dt * vec2(-o2, 0 )).rgb +
|
||||
texture(t0, tc + dt * vec2( 0, -o2)).rgb +
|
||||
texture(t0, tc + dt * vec2( o2, o )).rgb +
|
||||
texture(t0, tc + dt * vec2( o2, -o)).rgb +
|
||||
texture(t0, tc + dt * vec2(-o2, -o )).rgb +
|
||||
texture(t0, tc + dt * vec2(-o2, o )).rgb +
|
||||
texture(t0, tc + dt * vec2( o, o2)).rgb +
|
||||
texture(t0, tc + dt * vec2( o, -o2)).rgb +
|
||||
texture(t0, tc + dt * vec2( -o, -o2)).rgb +
|
||||
texture(t0, tc + dt * vec2( -o, o2)).rgb) / 29.;
|
||||
/*vec3 scol = (texelFetch(t0, tc, 0).rgb * 3. +
|
||||
texelFetch(t0, tc + ivec2( o, 0 ), 0).rgb * 2. +
|
||||
texelFetch(t0, tc + ivec2( 0, o ), 0).rgb * 2. +
|
||||
texelFetch(t0, tc + ivec2( -o, 0 ), 0).rgb * 2. +
|
||||
@@ -27,7 +49,7 @@ void main(void) {
|
||||
texelFetch(t0, tc + ivec2( o, o2), 0).rgb +
|
||||
texelFetch(t0, tc + ivec2( o, -o2), 0).rgb +
|
||||
texelFetch(t0, tc + ivec2( -o, -o2), 0).rgb +
|
||||
texelFetch(t0, tc + ivec2( -o, o2), 0).rgb) / 29.;
|
||||
texelFetch(t0, tc + ivec2( -o, o2), 0).rgb) / 29.;*/
|
||||
qgl_FragData[0].rgb = scol;
|
||||
//qgl_FragData[0].rgb = vec3(r/10.);
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ void main(void) {
|
||||
qgl_FragData[1] = vec4(n.xyz / 2. + vec3(0.5), specularity);
|
||||
qgl_FragData[2] = vec4(spec.rgb, hei);
|
||||
qgl_FragData[3] = vec4(self.rgb, pos.w);
|
||||
qgl_FragData[4] = vec4(speed,0);
|
||||
qgl_FragData[4] = vec4(speed.xy, 0, 0);
|
||||
|
||||
//gl_FragData[0] = vec4(et.xyz, pos.w);
|
||||
//gl_FragDepth = gl_FragCoord.z - clamp(hei / pos.z / pos.z / (abs(n.z) + 1), -0.01, 0.01);
|
||||
|
||||
@@ -72,11 +72,11 @@ void main(void) {
|
||||
//li = vec3(0.);
|
||||
si = vec3(0.);
|
||||
|
||||
float posz = z_near * z_far / (texture2D(td, tc).r * (z_far - z_near) - z_far);
|
||||
float posz = z_near * z_far / (texelFetch(td, tc, 0).r * (z_far - z_near) - z_far);
|
||||
pos = vec4(sp, 0., 1) * mat_proji;
|
||||
pos.xy *= v3.w;
|
||||
pos.z = posz;
|
||||
pos.xyz += n * height;
|
||||
//pos.xyz += n * height;
|
||||
//pos.xyz = v3.xyz;
|
||||
//pos = v3;
|
||||
//pos = vec4(sp, 0, 1.) * mat_proji;
|
||||
@@ -88,12 +88,12 @@ void main(void) {
|
||||
|
||||
sh_pow = 1. / max((1. - v1.w), 0.0001);
|
||||
sh_mul = max(1. - v1.w, 0.0001);
|
||||
for (int i = 0; i < 16; ++i)
|
||||
for (int i = 0; i < 1; ++i)
|
||||
calcLight(i, n, v, v2);
|
||||
|
||||
qgl_FragData[0].rgb = li * dc + si * v2.rgb + v3.rgb + texture(t_pp, tc).rgb;
|
||||
//qgl_FragData[0].rgb = vec3(abs(lpos.xyz - pos.xyz)/10);
|
||||
//qgl_FragData[0].rgb = si.rgb;
|
||||
//qgl_FragData[0].rgb = vec3(ldist/1000);
|
||||
//qgl_FragData[0].rgb = vec3(length(v4.xyz)/10);
|
||||
//qgl_FragData[0].a = 0.;
|
||||
}
|
||||
|
||||
@@ -16,12 +16,14 @@ vec3 Uncharted2Tonemap(vec3 x) {
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
qgl_FragData[0].rgb = texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb;
|
||||
return;
|
||||
vec3 inColor = texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb;
|
||||
inColor *= exposure;
|
||||
float ExposureBias = 1;
|
||||
vec3 curr = Uncharted2Tonemap(ExposureBias*inColor);
|
||||
vec3 whiteScale = 1 / Uncharted2Tonemap(vec3(tW));
|
||||
vec3 color = curr * whiteScale;
|
||||
vec3 retColor = pow(color, vec3(1 / 2.2));
|
||||
vec3 retColor = pow(color, vec3(1 / 1.2));
|
||||
qgl_FragData[0].rgb = retColor;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user