mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Ternary: Use shader based per vertex coloring effect
This commit is contained in:
@@ -45,6 +45,11 @@
|
|||||||
#include "cafProgressInfo.h"
|
#include "cafProgressInfo.h"
|
||||||
#include "cvfRenderStatePolygonOffset.h"
|
#include "cvfRenderStatePolygonOffset.h"
|
||||||
#include "cvfRenderStateBlending.h"
|
#include "cvfRenderStateBlending.h"
|
||||||
|
#include "cvfShaderProgramGenerator.h"
|
||||||
|
#include "cvfShaderSourceRepository.h"
|
||||||
|
#include "cvfUniform.h"
|
||||||
|
#include "cvfShaderSourceProvider.h"
|
||||||
|
#include "cvfShaderProgram.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -328,32 +333,10 @@ void RivGridPartMgr::updateCellResultColor(size_t timeStepIndex, RimResultSlot*
|
|||||||
dg->setColorArray(surfaceFacesColorArray.p());
|
dg->setColorArray(surfaceFacesColorArray.p());
|
||||||
}
|
}
|
||||||
|
|
||||||
cvf::ref<cvf::Effect> colorArrayEffect = new cvf::Effect;
|
cvf::ref<cvf::Effect> perVertexColorEffect = createPerVertexColoringEffect();
|
||||||
|
m_surfaceFaces->setEffect(perVertexColorEffect.p());
|
||||||
cvf::ref<cvf::RenderStateMaterial_FF> mat = new cvf::RenderStateMaterial_FF(cvf::Color3::BLUE);
|
|
||||||
mat->setAlpha(m_opacityLevel);
|
|
||||||
mat->enableColorMaterial(true);
|
|
||||||
colorArrayEffect->setRenderState(mat.p());
|
|
||||||
|
|
||||||
cvf::ref<cvf::RenderStateLighting_FF> lighting = new cvf::RenderStateLighting_FF;
|
|
||||||
lighting->enableTwoSided(true);
|
|
||||||
colorArrayEffect->setRenderState(lighting.p());
|
|
||||||
|
|
||||||
// Simple transparency
|
|
||||||
if (m_opacityLevel < 1.0f)
|
|
||||||
{
|
|
||||||
cvf::ref<cvf::RenderStateBlending> blender = new cvf::RenderStateBlending;
|
|
||||||
blender->configureTransparencyBlending();
|
|
||||||
colorArrayEffect->setRenderState(blender.p());
|
|
||||||
}
|
|
||||||
|
|
||||||
caf::PolygonOffset polygonOffset = caf::PO_1;
|
|
||||||
cvf::ref<cvf::RenderStatePolygonOffset> polyOffset = caf::EffectGenerator::createAndConfigurePolygonOffsetRenderState(polygonOffset);
|
|
||||||
colorArrayEffect->setRenderState(polyOffset.p());
|
|
||||||
|
|
||||||
m_surfaceFaces->setPriority(100);
|
m_surfaceFaces->setPriority(100);
|
||||||
|
|
||||||
m_surfaceFaces->setEffect(colorArrayEffect.p());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -485,6 +468,53 @@ RivGridPartMgr::~RivGridPartMgr()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
cvf::ref<cvf::Effect> RivGridPartMgr::createPerVertexColoringEffect()
|
||||||
|
{
|
||||||
|
cvf::ref<cvf::Effect> colorArrayEffect = new cvf::Effect;
|
||||||
|
|
||||||
|
if (RiaApplication::instance()->useShaders())
|
||||||
|
{
|
||||||
|
cvf::ShaderProgramGenerator gen("PerVertexColor", cvf::ShaderSourceProvider::instance());
|
||||||
|
gen.addVertexCode(cvf::ShaderSourceRepository::vs_Standard);
|
||||||
|
gen.addFragmentCode(cvf::ShaderSourceRepository::src_VaryingColorGlobalAlpha);
|
||||||
|
gen.addFragmentCode(caf::CommonShaderSources::light_AmbientDiffuse());
|
||||||
|
gen.addFragmentCode(cvf::ShaderSourceRepository::fs_Standard);
|
||||||
|
|
||||||
|
cvf::ref<cvf::ShaderProgram> m_shaderProg = gen.generate();
|
||||||
|
m_shaderProg->setDefaultUniform(new cvf::UniformFloat("u_alpha", m_opacityLevel));
|
||||||
|
|
||||||
|
colorArrayEffect->setShaderProgram(m_shaderProg.p());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cvf::ref<cvf::RenderStateMaterial_FF> mat = new cvf::RenderStateMaterial_FF(cvf::Color3::BLUE);
|
||||||
|
mat->setAlpha(m_opacityLevel);
|
||||||
|
mat->enableColorMaterial(true);
|
||||||
|
colorArrayEffect->setRenderState(mat.p());
|
||||||
|
|
||||||
|
cvf::ref<cvf::RenderStateLighting_FF> lighting = new cvf::RenderStateLighting_FF;
|
||||||
|
lighting->enableTwoSided(true);
|
||||||
|
colorArrayEffect->setRenderState(lighting.p());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simple transparency
|
||||||
|
if (m_opacityLevel < 1.0f)
|
||||||
|
{
|
||||||
|
cvf::ref<cvf::RenderStateBlending> blender = new cvf::RenderStateBlending;
|
||||||
|
blender->configureTransparencyBlending();
|
||||||
|
colorArrayEffect->setRenderState(blender.p());
|
||||||
|
}
|
||||||
|
|
||||||
|
caf::PolygonOffset polygonOffset = caf::PO_1;
|
||||||
|
cvf::ref<cvf::RenderStatePolygonOffset> polyOffset = caf::EffectGenerator::createAndConfigurePolygonOffsetRenderState(polygonOffset);
|
||||||
|
colorArrayEffect->setRenderState(polyOffset.p());
|
||||||
|
|
||||||
|
return colorArrayEffect;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ namespace cvf
|
|||||||
class ModelBasicList;
|
class ModelBasicList;
|
||||||
class Transform;
|
class Transform;
|
||||||
class Part;
|
class Part;
|
||||||
|
class Effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
class RimResultSlot;
|
class RimResultSlot;
|
||||||
@@ -80,6 +81,7 @@ public:
|
|||||||
|
|
||||||
void updateCellColor(cvf::Color4f color);
|
void updateCellColor(cvf::Color4f color);
|
||||||
void updateCellResultColor(size_t timeStepIndex, RimResultSlot* cellResultSlot);
|
void updateCellResultColor(size_t timeStepIndex, RimResultSlot* cellResultSlot);
|
||||||
|
|
||||||
void updateCellEdgeResultColor(size_t timeStepIndex, RimResultSlot* cellResultSlot,
|
void updateCellEdgeResultColor(size_t timeStepIndex, RimResultSlot* cellResultSlot,
|
||||||
RimCellEdgeResultSlot* cellEdgeResultSlot);
|
RimCellEdgeResultSlot* cellEdgeResultSlot);
|
||||||
|
|
||||||
@@ -87,8 +89,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void generatePartGeometry(cvf::StructGridGeometryGenerator& geoBuilder, bool faultGeometry);
|
void generatePartGeometry(cvf::StructGridGeometryGenerator& geoBuilder, bool faultGeometry);
|
||||||
|
cvf::ref<cvf::Effect> createPerVertexColoringEffect();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
size_t m_gridIdx;
|
size_t m_gridIdx;
|
||||||
|
|||||||
Reference in New Issue
Block a user