Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Plugin-Render-DepthPeeling
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenFlipper-Free
Plugin-Render-DepthPeeling
Commits
9514a1e6
Commit
9514a1e6
authored
Mar 21, 2018
by
Jan Möbius
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'featureCoreProfile' into 'master'
Feature core profile See merge request
!2
parents
fed70c63
18a4b35d
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
136 additions
and
34 deletions
+136
-34
DepthPeeling.cc
DepthPeeling.cc
+71
-34
Shaders/DepthPeeling/blend_330.glsl
Shaders/DepthPeeling/blend_330.glsl
+12
-0
Shaders/DepthPeeling/blend_dual_330.glsl
Shaders/DepthPeeling/blend_dual_330.glsl
+14
-0
Shaders/DepthPeeling/final_330.glsl
Shaders/DepthPeeling/final_330.glsl
+13
-0
Shaders/DepthPeeling/final_dual_330.glsl
Shaders/DepthPeeling/final_dual_330.glsl
+16
-0
Shaders/DepthPeeling/screenquad_330.glsl
Shaders/DepthPeeling/screenquad_330.glsl
+10
-0
No files found.
DepthPeeling.cc
View file @
9514a1e6
...
...
@@ -132,9 +132,19 @@ public:
{
_code
->
push_back
(
"float fragDepth = gl_FragCoord.z;"
);
#ifdef __APPLE__
if
(
ACG
::
openGLVersion
(
3
,
3
))
{
//on Apple systems with OpenGL 3.3 or higher, ht eGLSL version 330 is used no matter what we write
_code
->
push_back
(
"vec2 depthLayer = texture(g_DepthLayer, sg_vScreenPos).xy;"
);
_code
->
push_back
(
"vec4 forwardTemp = texture(g_FrontLayer, sg_vScreenPos);"
);
}
else
#endif
{
_code
->
push_back
(
"vec2 depthLayer = texture2D(g_DepthLayer, sg_vScreenPos).xy;"
);
_code
->
push_back
(
"vec4 forwardTemp = texture2D(g_FrontLayer, sg_vScreenPos);"
);
}
_code
->
push_back
(
"outDepth = vec4(depthLayer, 0, 0);"
);
_code
->
push_back
(
"outFragment = forwardTemp;"
);
_code
->
push_back
(
"outBackColor = vec4(0,0,0,0);"
);
...
...
@@ -215,23 +225,14 @@ DepthPeeling::~DepthPeeling()
QString
DepthPeeling
::
checkOpenGL
()
{
//if(!ACG::compatibilityProfile())
// return QString("DepthPeeling render-plugin is nto yet compatible with core profile contexts.");
if
(
!
ACG
::
openGLVersion
(
3
,
2
))
return
QString
(
"Insufficient OpenGL Version! OpenGL 3.2 or higher required"
);
return
QString
(
"Insufficient OpenGL Version! OpenGL 3.2 or higher required"
);
QString
missing
(
""
);
//no other extensions are necessary, as OpenGL version 3.2 includes them all in the spec
if
(
!
ACG
::
checkExtensionSupported
(
"GL_ARB_vertex_buffer_object"
))
missing
+=
"GL_ARB_vertex_buffer_object extension missing
\n
"
;
#ifndef __APPLE__
if
(
!
ACG
::
checkExtensionSupported
(
"GL_ARB_vertex_program"
))
missing
+=
"GL_ARB_vertex_program extension missing
\n
"
;
#endif
if
(
!
ACG
::
checkExtensionSupported
(
"GL_ARB_occlusion_query"
))
missing
+=
"GL_ARB_occlusion_query extension missing
\n
"
;
return
missing
;
return
QString
(
""
);
}
...
...
@@ -614,7 +615,8 @@ void DepthPeeling::renderDualPeeling(ACG::GLState* _glState, Viewer::ViewerPrope
glEnable
(
GL_BLEND
);
glBlendEquation
(
GL_MAX_EXT
);
// get min/max depth
glDisable
(
GL_ALPHA_TEST
);
if
(
_glState
->
compatibilityProfile
())
glDisable
(
GL_ALPHA_TEST
);
glEnable
(
GL_DEPTH_TEST
);
glDepthFunc
(
GL_LESS
);
...
...
@@ -918,14 +920,19 @@ void DepthPeeling::ViewerResources::resize(bool _dualPeeling, unsigned int _widt
// depth textures: store layer depth as float
// front color textures: store (r,g,b,a) colors as R8G8B8A8
// color blending and accumulation texture: (r,g,b,a) color as R8G8B8A8
GLint
wrapmode
;
if
(
ACG
::
openGLVersion
(
3
,
2
))
wrapmode
=
GL_CLAMP_TO_EDGE
;
else
wrapmode
=
GL_CLAMP
;
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT0
,
width_
,
height_
,
GL_R32F
,
GL_RGB
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT1
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT0
,
width_
,
height_
,
GL_R32F
,
GL_RGB
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT1
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT2
,
width_
,
height_
,
GL_R32F
,
GL_RGB
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT3
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT2
,
width_
,
height_
,
GL_R32F
,
GL_RGB
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT3
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT4
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT4
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
singleFbo_
->
attachTexture2DDepth
(
width_
,
height_
);
...
...
@@ -961,16 +968,22 @@ void DepthPeeling::ViewerResources::resize(bool _dualPeeling, unsigned int _widt
// depth textures: store (min,max) depth as float2
// front+back color textures: store (r,g,b,a) colors as R8G8B8A8
// color blending and accumulation texture: (r,g,b) color as R8G8B8X8
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT0
,
width_
,
height_
,
GL_RG32F
,
GL_RGB
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT1
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT2
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
GLint
wrapmode
;
if
(
ACG
::
openGLVersion
(
3
,
2
))
{
wrapmode
=
GL_CLAMP_TO_EDGE
;
}
else
wrapmode
=
GL_CLAMP
;
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT0
,
width_
,
height_
,
GL_RG32F
,
GL_RGB
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT1
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT2
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT3
,
width_
,
height_
,
GL_RG32F
,
GL_RGB
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT4
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT5
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT3
,
width_
,
height_
,
GL_RG32F
,
GL_RGB
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT4
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT5
,
width_
,
height_
,
GL_RGBA
,
GL_RGBA
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT6
,
width_
,
height_
,
GL_RGB
,
GL_RGB
,
GL_CLAMP
,
GL_NEAREST
,
GL_NEAREST
);
dualFbo_
->
attachTexture2D
(
GL_COLOR_ATTACHMENT6
,
width_
,
height_
,
GL_RGB
,
GL_RGB
,
wrapmode
,
GL_NEAREST
,
GL_NEAREST
);
dualDepthTex_
[
0
]
=
dualFbo_
->
getAttachment
(
GL_COLOR_ATTACHMENT0
);
dualDepthTex_
[
1
]
=
dualFbo_
->
getAttachment
(
GL_COLOR_ATTACHMENT3
);
...
...
@@ -1010,11 +1023,24 @@ void DepthPeeling::initDepthPeeling()
ShaderProgGenerator
::
registerModifier
(
&
PeelLayerModifier
::
instance
);
// load intermediate blending and final shader
#ifdef __APPLE__
if
(
ACG
::
openGLVersion
(
3
,
3
))
{
if
(
!
peelBlend_
)
peelBlend_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad_330.glsl"
,
"DepthPeeling/blend_330.glsl"
);
if
(
!
peelFinal_
)
peelFinal_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad_330.glsl"
,
"DepthPeeling/final_330.glsl"
);
}
else
#endif
{
if
(
!
peelBlend_
)
peelBlend_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad.glsl"
,
"DepthPeeling/blend.glsl"
);
if
(
!
peelFinal_
)
peelFinal_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad.glsl"
,
"DepthPeeling/final.glsl"
);
}
// occ query id
if
(
!
peelQueryID_
)
...
...
@@ -1034,11 +1060,22 @@ void DepthPeeling::initDualDepthPeeling()
ShaderProgGenerator
::
registerModifier
(
&
PeelDualLayerModifier
::
instance
);
// load intermediate blending and final shader
if
(
!
peelBlendDual_
)
peelBlendDual_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad.glsl"
,
"DepthPeeling/blend_dual.glsl"
);
if
(
!
peelFinalDual_
)
peelFinalDual_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad.glsl"
,
"DepthPeeling/final_dual.glsl"
);
#ifdef __APPLE__ //this is fugly, pimpl pattern would be much appreciated
if
(
ACG
::
openGLVersion
(
3
,
3
))
{
if
(
!
peelBlendDual_
)
peelBlendDual_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad_330.glsl"
,
"DepthPeeling/blend_dual_330.glsl"
);
if
(
!
peelFinalDual_
)
peelFinalDual_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad_330.glsl"
,
"DepthPeeling/final_dual_330.glsl"
);
}
else
#endif
{
if
(
!
peelBlendDual_
)
peelBlendDual_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad.glsl"
,
"DepthPeeling/blend_dual.glsl"
);
if
(
!
peelFinalDual_
)
peelFinalDual_
=
GLSL
::
loadProgram
(
"DepthPeeling/screenquad.glsl"
,
"DepthPeeling/final_dual.glsl"
);
}
// occ query id
if
(
!
peelQueryID_
)
...
...
Shaders/DepthPeeling/blend_330.glsl
0 → 100644
View file @
9514a1e6
#version 330
uniform
sampler2D
BlendTex
;
in
vec2
vTexCoord
;
out
vec4
oColor
;
void
main
()
{
oColor
=
texture
(
BlendTex
,
vTexCoord
);
}
\ No newline at end of file
Shaders/DepthPeeling/blend_dual_330.glsl
0 → 100644
View file @
9514a1e6
#version 330
uniform
sampler2D
BlendTex
;
in
vec2
vTexCoord
;
out
vec4
oColor
;
void
main
()
{
oColor
=
texture
(
BlendTex
,
vTexCoord
);
// for occlusion query
if
(
oColor
.
a
==
0
)
discard
;
}
\ No newline at end of file
Shaders/DepthPeeling/final_330.glsl
0 → 100644
View file @
9514a1e6
#version 330
uniform
sampler2D
SceneTex
;
uniform
vec3
BkgColor
;
in
vec2
vTexCoord
;
out
vec4
oColor
;
void
main
()
{
vec4
c
=
texture
(
SceneTex
,
vTexCoord
);
oColor
=
vec4
(
c
.
rgb
+
BkgColor
*
c
.
a
,
1
.
0
);
}
\ No newline at end of file
Shaders/DepthPeeling/final_dual_330.glsl
0 → 100644
View file @
9514a1e6
#version 330
uniform
sampler2D
FrontSceneTex
;
uniform
sampler2D
BackSceneTex
;
in
vec2
vTexCoord
;
out
vec4
oColor
;
void
main
()
{
vec4
cf
=
texture
(
FrontSceneTex
,
vTexCoord
);
vec4
cb
=
texture
(
BackSceneTex
,
vTexCoord
);
// combine front and back color
oColor
=
vec4
(
cf
.
rgb
+
cb
.
rbg
*
(
1
.
0
-
cf
.
a
),
1
.
0
);
}
\ No newline at end of file
Shaders/DepthPeeling/screenquad_330.glsl
0 → 100644
View file @
9514a1e6
#version 330
in
vec4
inPosition
;
out
vec2
vTexCoord
;
void
main
()
{
gl_Position
=
inPosition
;
vTexCoord
=
inPosition
.
xy
*
0
.
5
+
vec2
(
0
.
5
,
0
.
5
);
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment