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

This commit is contained in:
2019-12-06 13:47:45 +00:00
parent c5bbf5ef8f
commit 6c409d0e12
14 changed files with 167 additions and 125 deletions

View File

@@ -191,7 +191,7 @@ QVector<float> Framebuffer::grabF(int index) const {
} }
void Framebuffer::blit(int index_from, GLuint fb_to, int index_to, QRect from, QRect to, GLbitfield mask, GLenum filter) { void Framebuffer::blit(int index_from, GLuint fb_to, int index_to, QRect from, QRect to, GLbitfield mask, GLenum filter) const {
if (index_from < 0 || index_from >= colors.size()) return; if (index_from < 0 || index_from >= colors.size()) return;
GLenum e = GL_COLOR_ATTACHMENT0 + index_to; GLenum e = GL_COLOR_ATTACHMENT0 + index_to;
f->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb_to); f->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb_to);

View File

@@ -24,6 +24,7 @@
class Framebuffer class Framebuffer
{ {
friend class FramebufferMipmap;
public: public:
Framebuffer(QOpenGLExtraFunctions * f_, int colorAttachments = 1, bool withDepth = true, GLenum colorFormat = GL_RGBA8, GLenum _target = GL_TEXTURE_2D); Framebuffer(QOpenGLExtraFunctions * f_, int colorAttachments = 1, bool withDepth = true, GLenum colorFormat = GL_RGBA8, GLenum _target = GL_TEXTURE_2D);
Framebuffer(QOpenGLExtraFunctions * f_, QVector<GLenum> colors_, bool withDepth = true, GLenum _target = GL_TEXTURE_2D); Framebuffer(QOpenGLExtraFunctions * f_, QVector<GLenum> colors_, bool withDepth = true, GLenum _target = GL_TEXTURE_2D);
@@ -47,7 +48,7 @@ public:
QVector<uint> getPoints() const; QVector<uint> getPoints() const;
QImage getImage() const; QImage getImage() const;
int queriedPoints() const {return pbo_queried;} int queriedPoints() const {return pbo_queried;}
void blit(int index_from, GLuint fb_to, int index_to, QRect from, QRect to, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST); void blit(int index_from, GLuint fb_to, int index_to, QRect from, QRect to, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST) const;
void resize(int width, int height, bool force = false); void resize(int width, int height, bool force = false);
void bind(); void bind();

View File

@@ -0,0 +1,50 @@
/*
QGLView
Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QOpenGLExtraFunctions>
#include "glframebuffer_mipmap.h"
#include <QTime>
FramebufferMipmap::FramebufferMipmap(const Framebuffer & fb, int index_from_, int levels): src_fb(fb) {
index_from = index_from_;
for (int i = 0; i < levels; ++i)
fbo << new Framebuffer(fb.f, 1, false, fb.color_formats[index_from]);
}
FramebufferMipmap::~FramebufferMipmap() {
}
void FramebufferMipmap::resize() {
QSize sz = src_fb.size();
for (int i = 0; i < fbo.size(); ++i) {
sz /= 2;
fbo[i]->resize(sz.width(), sz.height());
}
}
void FramebufferMipmap::create() {
if (fbo.isEmpty()) return;
src_fb.blit(index_from, fbo[0]->id(), 0, src_fb.rect(), fbo[0]->rect(), GL_COLOR_BUFFER_BIT, GL_LINEAR);
for (int i = 0; i < fbo.size() - 1; ++i)
fbo[i]->blit(0, fbo[i + 1]->id(), 0, fbo[i]->rect(), fbo[i + 1]->rect(), GL_COLOR_BUFFER_BIT, GL_LINEAR);
}

View File

@@ -0,0 +1,49 @@
/*
QGLView
Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef GLFRAMEBUFFER_MIPMAP_H
#define GLFRAMEBUFFER_MIPMAP_H
#include "glframebuffer.h"
class FramebufferMipmap
{
public:
FramebufferMipmap(const Framebuffer & fb, int index_from_, int levels = 2);
virtual ~FramebufferMipmap();
int levelsCount() const {return fbo.size();}
int lastLevel() const {return fbo.size() - 1;}
Framebuffer & plane(int level) {return *fbo[level];}
int width (int level) const {return fbo[level]->wid;}
int height(int level) const {return fbo[level]->hei;}
QSize size(int level) const {return fbo[level]->size();}
QRect rect(int level) const {return fbo[level]->rect();}
void resize();
void create();
private:
int index_from;
const Framebuffer & src_fb;
QVector<Framebuffer*> fbo;
};
#endif // GLFRAMEBUFFER_MIPMAP_H

View File

@@ -174,6 +174,8 @@ class Map;
class Material; class Material;
class TextureManager; class TextureManager;
class Texture2DArray; class Texture2DArray;
class Framebuffer;
class FramebufferMipmap;
class Mesh; class Mesh;
class Scene; class Scene;
class RendererBase; class RendererBase;

View File

@@ -48,6 +48,7 @@ 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 (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)
@@ -109,6 +110,7 @@ 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_;}
int maxAnisotropicLevel() const {return max_anisotropic;} int maxAnisotropicLevel() const {return max_anisotropic;}
QColor ambientColor() const {return ambientColor_;} QColor ambientColor() const {return ambientColor_;}
@@ -228,6 +230,7 @@ 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 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;}

View File

@@ -30,7 +30,6 @@ QGLViewWindow::QGLViewWindow(QWidget * parent): QMainWindow(parent), Ui::QGLView
setupUi(this); setupUi(this);
session.setFile("session_qglview_test.conf"); session.setFile("session_qglview_test.conf");
session.addEntry(this); session.addEntry(this);
spinViewLineWidth->setValue(lineThickness()*2);
//view->view()->camera()->setPos(QVector3D(2, 2, 2)); //view->view()->camera()->setPos(QVector3D(2, 2, 2));
//view->view()->camera()->setAim(QVector3D()); //view->view()->camera()->setAim(QVector3D());

View File

@@ -63,6 +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_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);}

View File

@@ -57,7 +57,7 @@
<item> <item>
<widget class="QTabWidget" name="tabWidget"> <widget class="QTabWidget" name="tabWidget">
<property name="currentIndex"> <property name="currentIndex">
<number>3</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
@@ -67,7 +67,7 @@
<item> <item>
<widget class="QTabWidget" name="tabWidget_2"> <widget class="QTabWidget" name="tabWidget_2">
<property name="currentIndex"> <property name="currentIndex">
<number>1</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="tab_5"> <widget class="QWidget" name="tab_5">
<attribute name="title"> <attribute name="title">
@@ -107,86 +107,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QDoubleSpinBox" name="spinDepthStart">
<property name="decimals">
<number>3</number>
</property>
<property name="maximum">
<double>999999999.000000000000000</double>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string> - </string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="spinDepthEnd">
<property name="decimals">
<number>3</number>
</property>
<property name="maximum">
<double>999999999.000000000000000</double>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Renderer</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboRenderer">
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>Simple</string>
</property>
</item>
<item>
<property name="text">
<string>Deferred shading</string>
</property>
</item>
<item>
<property name="text">
<string>RT</string>
</property>
</item>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>Draw mode</string> <string>Draw mode</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="2" column="1">
<widget class="QComboBox" name="comboViewRenderMode"> <widget class="QComboBox" name="comboViewRenderMode">
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>2</number>
@@ -208,14 +136,14 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="text"> <property name="text">
<string>Back color</string> <string>Back color</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="3" column="1">
<widget class="ColorButton" name="colorBack"> <widget class="ColorButton" name="colorBack">
<property name="color"> <property name="color">
<color> <color>
@@ -226,14 +154,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_7"> <widget class="QLabel" name="label_7">
<property name="text"> <property name="text">
<string>Ambient</string> <string>Ambient</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="4" column="1">
<widget class="ColorButton" name="colorAmbient"> <widget class="ColorButton" name="colorAmbient">
<property name="color"> <property name="color">
<color> <color>
@@ -244,21 +172,40 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0" colspan="2"> <item row="5" column="0">
<widget class="QCheckBox" name="checkMSAA"> <widget class="QLabel" name="label_22">
<property name="text"> <property name="text">
<string>MSAA</string> <string>Exposure</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="0" colspan="2"> <item row="5" column="1">
<widget class="SpinSlider" name="spinViewExposure">
<property name="minimum">
<double>0.010000000000000</double>
</property>
<property name="maximum">
<double>99.000000000000000</double>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="squareScale">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" 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="9" column="0" colspan="2"> <item row="7" 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>
@@ -313,7 +260,7 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="10" column="0" colspan="2"> <item row="8" 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>
@@ -368,7 +315,7 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="11" column="0" colspan="2"> <item row="9" 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>
@@ -397,29 +344,19 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="6" column="1"> <item row="1" column="1">
<widget class="QDoubleSpinBox" name="spinViewLineWidth"> <widget class="QDoubleSpinBox" name="spinDepthStart">
<property name="minimum"> <property name="decimals">
<double>0.000000000000000</double> <number>3</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<double>99999.000000000000000</double> <double>999999999.000000000000000</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property> </property>
<property name="value"> <property name="value">
<double>1.000000000000000</double> <double>1.000000000000000</double>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Line width</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tab_6"> <widget class="QWidget" name="tab_6">
@@ -440,8 +377,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>968</width> <width>960</width>
<height>636</height> <height>737</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_9"> <layout class="QVBoxLayout" name="verticalLayout_9">
@@ -1079,8 +1016,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1009</width> <width>999</width>
<height>877</height> <height>853</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_8"> <layout class="QVBoxLayout" name="verticalLayout_8">
@@ -1163,7 +1100,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1125</width> <width>1125</width>
<height>21</height> <height>24</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">

View File

@@ -30,9 +30,8 @@ using namespace QGLEngineShaders;
Renderer::Renderer(QGLView * view_): RendererBase(view_), Renderer::Renderer(QGLView * view_): RendererBase(view_),
fbo_ds (view_, QVector<GLenum>() << GL_RGBA16F << GL_RGBA32F << GL_RGBA16F << GL_RGBA16F << GL_RGBA16F), fbo_ds (view_, QVector<GLenum>() << GL_RGBA16F << GL_RGBA32F << GL_RGBA16F << GL_RGBA16F << GL_RGBA16F),
fbo_out (view_, 6, false, GL_RGBA16F), fbo_out (view_, 6, false, GL_RGBA16F),
fbo_small_4 (view_, 1, false, GL_RGBA16F),
fbo_small_16 (view_, 1, false, GL_RGBA16F),
fbo_1x1 (view_, 1, false, GL_RGB32F ), fbo_1x1 (view_, 1, false, GL_RGB32F ),
fbomm(fbo_out, obrSum, 3),
buffer_vbo(GL_ARRAY_BUFFER, GL_DYNAMIC_DRAW), buffer_vbo(GL_ARRAY_BUFFER, GL_DYNAMIC_DRAW),
rend_mat(this), rend_service(this), rend_selection(this) { rend_mat(this), rend_service(this), rend_selection(this) {
shader_sum = 0; shader_sum = 0;
@@ -104,8 +103,7 @@ void Renderer::resize(int width, int height) {
rend_selection.resize(width, height); rend_selection.resize(width, height);
fbo_ds .resize(width, height); fbo_ds .resize(width, height);
fbo_out .resize(width, height); fbo_out .resize(width, height);
fbo_small_4 .resize(width / 4 , height / 4 ); fbomm.resize();
fbo_small_16 .resize(width / 16, height / 16);
resizeSum(); resizeSum();
} }
@@ -228,12 +226,12 @@ void Renderer::prepareSum() {
void Renderer::resizeSum() { void Renderer::resizeSum() {
QOpenGLExtraFunctions * f = view; QOpenGLExtraFunctions * f = view;
int pcnt = fbo_small_16.width() * fbo_small_16.height(); int pcnt = fbomm.width(fbomm.lastLevel()) * fbomm.height(fbomm.lastLevel());
QVector<Vector2i> _data; QVector<Vector2i> _data;
_data.resize(pcnt); _data.resize(pcnt);
pcnt = -1; pcnt = -1;
for (int x = 0; x < fbo_small_16.width(); ++x) for (int x = 0; x < fbomm.width(fbomm.lastLevel()); ++x)
for (int y = 0; y < fbo_small_16.height(); ++y) for (int y = 0; y < fbomm.height(fbomm.lastLevel()); ++y)
_data[++pcnt] = Vector2i(x,y); _data[++pcnt] = Vector2i(x,y);
buffer_vbo.bind(f); buffer_vbo.bind(f);
buffer_vbo.resize(f, _data.size() * sizeof(Vector2i)); buffer_vbo.resize(f, _data.size() * sizeof(Vector2i));
@@ -348,11 +346,11 @@ void Renderer::renderScene() {
fbo_out.setWriteBuffer(obrSum); fbo_out.setWriteBuffer(obrSum);
renderQuad(prog, quad); renderQuad(prog, quad);
} }
fbo_out.blit(obrSum, fbo_small_4.id(), 0, fbo_out.rect(), fbo_small_4.rect(), GL_COLOR_BUFFER_BIT, GL_LINEAR); fbomm.create();
fbo_small_4.blit(0, fbo_small_16.id(), 0, fbo_small_4.rect(), fbo_small_16.rect(), GL_COLOR_BUFFER_BIT, GL_LINEAR); renderSum(fbomm.plane(fbomm.lastLevel()), 0);
renderSum(fbo_small_16, 0);
fbo_out.bind(); fbo_out.bind();
if (bindShader(srTonemapPass, &prog)) { if (bindShader(srTonemapPass, &prog)) {
prog->setUniformValue("exposure", exposure_);
fbo_1x1.bindColorTexture(0, 1); fbo_1x1.bindColorTexture(0, 1);
fbo_out.bindColorTexture(obrSum, 0); fbo_out.bindColorTexture(obrSum, 0);
fbo_out.setWriteBuffer(obrTonemap); fbo_out.setWriteBuffer(obrTonemap);

View File

@@ -23,6 +23,7 @@
#include "renderer_material.h" #include "renderer_material.h"
#include "renderer_service.h" #include "renderer_service.h"
#include "renderer_selection.h" #include "renderer_selection.h"
#include "glframebuffer_mipmap.h"
#include <QQueue> #include <QQueue>
@@ -101,7 +102,8 @@ protected:
private: private:
float exposure_; float exposure_;
bool edit_mode, need_init_shaders, is_camera_light; bool edit_mode, need_init_shaders, is_camera_light;
Framebuffer fbo_ds, fbo_out, fbo_small_4, fbo_small_16, fbo_1x1; Framebuffer fbo_ds, fbo_out, fbo_1x1;
FramebufferMipmap fbomm;
/*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;
QOpenGLShaderProgram * shader_bloom_0, * shader_bloom_1, * shader_motion_blur, * shader_fbo_add; QOpenGLShaderProgram * shader_bloom_0, * shader_bloom_1, * shader_motion_blur, * shader_fbo_add;
QOpenGLShaderProgram * shader_shadow, * shader_ssr, * shader_ssr_blur, * shader_ssr_merge; QOpenGLShaderProgram * shader_shadow, * shader_ssr, * shader_ssr_blur, * shader_ssr_merge;

View File

@@ -9,11 +9,10 @@ void main(void) {
uniform sampler2D tex_0, tex_1, tex_2, tex_3, tex_4; uniform sampler2D tex_0, tex_1, tex_2, tex_3, tex_4;
const vec3 luma = vec3(0.299, 0.587, 0.114);
void main(void) { void main(void) {
ivec2 tc = ivec2(gl_FragCoord.xy); ivec2 tc = ivec2(gl_FragCoord.xy);
vec4 v0 = texelFetch(tex_0, tc, 0); vec4 v0 = texelFetch(tex_0, tc, 0);
vec4 v1 = texelFetch(tex_1, tc, 0); vec4 v1 = texelFetch(tex_1, tc, 0);
qgl_FragColor = v0 + v1; vec3 res = v0.rgb + v1.rgb;
qgl_FragColor.rgb = res;
} }

View File

@@ -81,7 +81,7 @@ void calcLight(in int index, in vec3 n, in vec3 v) {
float ndlc = (1. - NdotLs) / NdotLs; float ndlc = (1. - NdotLs) / NdotLs;
float der = NdotLs * (shm_diff + ndlc); float der = NdotLs * (shm_diff + ndlc);
diff = 2. / (1. + sqrt(1. + (1. - shm_diff) * ndlc)); diff = 2. / (1. + sqrt(1. + (1. - shm_diff) * ndlc));
li += spot * diff * qgl_light_parameter[index].color.rgb;// * light_diffuse(0, ldir, n); li += spot * diff * qgl_light_parameter[index].color.rgb;
ndlc = (1. - NdotHs) / NdotHs; ndlc = (1. - NdotHs) / NdotHs;
der = NdotHs * (shm_spec + ndlc); der = NdotHs * (shm_spec + ndlc);

View File

@@ -8,6 +8,7 @@ void main(void) {
// frag // // frag //
uniform sampler2D tex_0, tex_sum; uniform sampler2D tex_0, tex_sum;
uniform float exposure;
const vec3 luma = vec3(0.299, 0.587, 0.114); const vec3 luma = vec3(0.299, 0.587, 0.114);
@@ -17,7 +18,7 @@ void main(void) {
vec4 sum = texelFetch(tex_sum, ivec2(0,0), 0); vec4 sum = texelFetch(tex_sum, ivec2(0,0), 0);
vec3 res = src.rgb; vec3 res = src.rgb;
float l = dot(res, luma); float l = dot(res, luma);
float g = 2.2/dot(sum.rgb, luma); float g = exposure / dot(sum.rgb, luma);
res /= l; res /= l;
//res = log(res + vec3(2.)) - log(vec3(2.)); //res = log(res + vec3(2.)) - log(vec3(2.));
//res = pow(res,vec3(1/2.2)); //res = pow(res,vec3(1/2.2));