Clean some code
This commit is contained in:
parent
f7bc014b16
commit
9e2061e88b
@ -93,36 +93,6 @@ void GrassShaderProvider::OnSetConstants(IMaterialRendererServices *srv, int use
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------
|
||||
void SkyboxProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
{
|
||||
const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f;
|
||||
srv->setVertexShaderConstant("time", &time, 1);
|
||||
|
||||
vector3df sun_pos = m_sunpos;
|
||||
srv->setVertexShaderConstant("sun_pos", &sun_pos.X, 3);
|
||||
|
||||
core::matrix4 ModelViewProjectionMatrix = srv->getVideoDriver()->getTransform(ETS_PROJECTION);
|
||||
ModelViewProjectionMatrix *= srv->getVideoDriver()->getTransform(ETS_VIEW);
|
||||
ModelViewProjectionMatrix *= srv->getVideoDriver()->getTransform(ETS_WORLD);
|
||||
srv->setVertexShaderConstant("ModelViewProjectionMatrix", ModelViewProjectionMatrix.pointer(), 16);
|
||||
|
||||
if (!firstdone)
|
||||
{
|
||||
s32 tex = 0;
|
||||
srv->setPixelShaderConstant("tex", &tex, 1);
|
||||
s32 glow_tex = 1;
|
||||
srv->setPixelShaderConstant("glow_tex", &glow_tex, 1);
|
||||
firstdone = true;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------
|
||||
|
||||
void BubbleEffectProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------
|
||||
|
||||
void MotionBlurProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
@ -160,13 +130,6 @@ void MotionBlurProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
|
||||
//-------------------------------------
|
||||
|
||||
void GaussianBlurProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
{
|
||||
srv->setVertexShaderConstant("pixel", m_pixel, 2);
|
||||
}
|
||||
|
||||
//-------------------------------------
|
||||
|
||||
void MipVizProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
{
|
||||
const ITexture * const tex = mat.TextureLayer[0].Texture;
|
||||
@ -187,18 +150,6 @@ void MipVizProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
|
||||
//-------------------------------------
|
||||
|
||||
void ColorizeProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------
|
||||
|
||||
void ObjectPassProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------
|
||||
|
||||
void SunLightProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
{
|
||||
const int hasclouds = World::getWorld()->getTrack()->hasClouds() &&
|
||||
|
@ -137,87 +137,6 @@ private:
|
||||
|
||||
//
|
||||
|
||||
class SkyboxProvider: public CallBase
|
||||
{
|
||||
public:
|
||||
virtual void OnSetConstants(video::IMaterialRendererServices *srv, int);
|
||||
|
||||
void setSunPosition(const core::vector3df &in)
|
||||
{
|
||||
m_sunpos = in;
|
||||
//m_sunpos.normalize();
|
||||
}
|
||||
|
||||
private:
|
||||
core::vector3df m_sunpos;
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
class BubbleEffectProvider: public CallBase
|
||||
{
|
||||
public:
|
||||
virtual void OnSetConstants(video::IMaterialRendererServices *srv, int);
|
||||
|
||||
BubbleEffectProvider()
|
||||
{
|
||||
}
|
||||
|
||||
// We hijack the material type param 2 of bubbles.
|
||||
// It's time to start the fade, negative if fade out, positive if in.
|
||||
// It'd be unused otherwise.
|
||||
|
||||
void onMadeVisible(scene::IMeshBuffer * const mb)
|
||||
{
|
||||
if (!contains(mb))
|
||||
return;
|
||||
|
||||
video::SMaterial &mat = mb->getMaterial();
|
||||
mat.MaterialTypeParam2 = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f;
|
||||
}
|
||||
|
||||
void onHidden(scene::IMeshBuffer * const mb)
|
||||
{
|
||||
if (!contains(mb))
|
||||
return;
|
||||
|
||||
video::SMaterial &mat = mb->getMaterial();
|
||||
mat.MaterialTypeParam2 = irr_driver->getDevice()->getTimer()->getTime() / -1000.0f;
|
||||
}
|
||||
|
||||
void isInitiallyHidden(scene::IMeshBuffer * const mb)
|
||||
{
|
||||
if (!contains(mb))
|
||||
return;
|
||||
|
||||
video::SMaterial &mat = mb->getMaterial();
|
||||
mat.MaterialTypeParam2 = irr_driver->getDevice()->getTimer()->getTime() / -1000.0f;
|
||||
}
|
||||
|
||||
void removeBubble(const scene::IMeshBuffer * const mb)
|
||||
{
|
||||
m_bubbles.erase(mb);
|
||||
}
|
||||
|
||||
void addBubble(scene::IMeshBuffer * const mb)
|
||||
{
|
||||
m_bubbles.insert(mb);
|
||||
|
||||
video::SMaterial &mat = mb->getMaterial();
|
||||
mat.MaterialTypeParam2 = 1;
|
||||
}
|
||||
|
||||
bool contains(const scene::IMeshBuffer * const mb) const
|
||||
{
|
||||
return m_bubbles.count(mb)!=0;
|
||||
}
|
||||
|
||||
private:
|
||||
std::set<const scene::IMeshBuffer *> m_bubbles;
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
class MotionBlurProvider: public CallBase
|
||||
{
|
||||
public:
|
||||
@ -284,29 +203,6 @@ private:
|
||||
|
||||
//
|
||||
|
||||
class GaussianBlurProvider: public CallBase
|
||||
{
|
||||
public:
|
||||
GaussianBlurProvider()
|
||||
{
|
||||
m_pixel[0] = 1.0f / UserConfigParams::m_width;
|
||||
m_pixel[1] = 1.0f / UserConfigParams::m_height;
|
||||
}
|
||||
|
||||
void setResolution(int x, int y)
|
||||
{
|
||||
m_pixel[0] = 1.0f / x;
|
||||
m_pixel[1] = 1.0f / y;
|
||||
}
|
||||
|
||||
virtual void OnSetConstants(video::IMaterialRendererServices *srv, int);
|
||||
|
||||
private:
|
||||
float m_pixel[2];
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
class MipVizProvider: public CallBase
|
||||
{
|
||||
public:
|
||||
@ -315,47 +211,6 @@ public:
|
||||
|
||||
//
|
||||
|
||||
class ColorizeProvider: public CallBase
|
||||
{
|
||||
public:
|
||||
virtual void OnSetConstants(video::IMaterialRendererServices *srv, int);
|
||||
|
||||
void setColor(float r, float g, float b)
|
||||
{
|
||||
m_color[0] = r;
|
||||
m_color[1] = g;
|
||||
m_color[2] = b;
|
||||
}
|
||||
|
||||
float getRed() const
|
||||
{
|
||||
return m_color[0];
|
||||
}
|
||||
|
||||
float getGreen() const
|
||||
{
|
||||
return m_color[1];
|
||||
}
|
||||
|
||||
float getBlue() const
|
||||
{
|
||||
return m_color[2];
|
||||
}
|
||||
|
||||
private:
|
||||
float m_color[3];
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
class ObjectPassProvider: public CallBase
|
||||
{
|
||||
public:
|
||||
virtual void OnSetConstants(video::IMaterialRendererServices *srv, int);
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
class SunLightProvider: public CallBase
|
||||
{
|
||||
public:
|
||||
|
@ -2490,7 +2490,6 @@ scene::ISceneNode *IrrDriver::addLight(const core::vector3df &pos, float energy,
|
||||
m_suncam->updateAbsolutePosition();
|
||||
|
||||
((WaterShaderProvider *) m_shaders->m_callbacks[ES_WATER])->setSunPosition(pos);
|
||||
((SkyboxProvider *) m_shaders->m_callbacks[ES_SKYBOX])->setSunPosition(pos);
|
||||
}
|
||||
|
||||
return light;
|
||||
|
@ -203,10 +203,6 @@ Material::Material(const XMLNode *node, bool deprecated)
|
||||
node->get("splatting-texture-3", &m_splatting_texture_3);
|
||||
node->get("splatting-texture-4", &m_splatting_texture_4);
|
||||
}
|
||||
else if (s == "bubble")
|
||||
{
|
||||
m_shader_type = SHADERTYPE_BUBBLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
Log::warn("Material", "Unknown shader type <%s> for <%s>", s.c_str(), m_texname.c_str());
|
||||
@ -261,10 +257,6 @@ Material::Material(const XMLNode *node, bool deprecated)
|
||||
{
|
||||
m_water_splash = true;
|
||||
}
|
||||
else if (s == "bubble")
|
||||
{
|
||||
m_shader_type = SHADERTYPE_BUBBLE;
|
||||
}
|
||||
else if (s == "grass")
|
||||
{
|
||||
m_shader_type = SHADERTYPE_VEGETATION;
|
||||
@ -779,17 +771,6 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m
|
||||
m->MaterialType = irr_driver->getShader(ES_GRASS_REF);
|
||||
m->setTexture(1, glossytex);
|
||||
return;
|
||||
case SHADERTYPE_BUBBLE:
|
||||
if (mb)
|
||||
{
|
||||
BubbleEffectProvider * bubble = (BubbleEffectProvider *)
|
||||
irr_driver->getCallback(ES_BUBBLES);
|
||||
bubble->addBubble(mb);
|
||||
|
||||
m->MaterialType = irr_driver->getShader(ES_BUBBLES);
|
||||
m->BlendOperation = video::EBO_ADD;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!m->getTexture(0))
|
||||
@ -996,12 +977,6 @@ void Material::adjustForFog(scene::ISceneNode* parent, video::SMaterial *m,
|
||||
void Material::onMadeVisible(scene::IMeshBuffer* who)
|
||||
{
|
||||
if (!irr_driver->isGLSL()) return;
|
||||
|
||||
BubbleEffectProvider * bubble = (BubbleEffectProvider *)
|
||||
irr_driver->getCallback(ES_BUBBLES);
|
||||
|
||||
if (bubble != NULL)
|
||||
bubble->onMadeVisible(who);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -1010,11 +985,6 @@ void Material::onMadeVisible(scene::IMeshBuffer* who)
|
||||
void Material::onHidden(scene::IMeshBuffer* who)
|
||||
{
|
||||
if (!irr_driver->isGLSL()) return;
|
||||
|
||||
BubbleEffectProvider * bubble = (BubbleEffectProvider *)
|
||||
irr_driver->getCallback(ES_BUBBLES);
|
||||
if (bubble != NULL)
|
||||
bubble->onHidden(who);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -1022,11 +992,6 @@ void Material::onHidden(scene::IMeshBuffer* who)
|
||||
void Material::isInitiallyHidden(scene::IMeshBuffer* who)
|
||||
{
|
||||
if (!irr_driver->isGLSL()) return;
|
||||
|
||||
BubbleEffectProvider * bubble = (BubbleEffectProvider *)
|
||||
irr_driver->getCallback(ES_BUBBLES);
|
||||
if (bubble != NULL)
|
||||
bubble->isInitiallyHidden(who);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -53,8 +53,6 @@ public:
|
||||
SHADERTYPE_ALPHA_BLEND,
|
||||
SHADERTYPE_ADDITIVE,
|
||||
SHADERTYPE_SOLID_UNLIT,
|
||||
/** Effect where the UV texture is moved in a wave pattern */
|
||||
SHADERTYPE_BUBBLE,
|
||||
/** Effect that makes grass wave as in the wind */
|
||||
SHADERTYPE_VEGETATION,
|
||||
SHADERTYPE_WATER,
|
||||
|
@ -621,8 +621,6 @@ FrameBuffer *PostProcessing::render(scene::ICameraSceneNode * const camnode, boo
|
||||
|
||||
// Set the sun's color
|
||||
const SColor col = track->getGodRaysColor();
|
||||
ColorizeProvider * const colcb = (ColorizeProvider *)irr_driver->getCallback(ES_COLORIZE);
|
||||
colcb->setColor(col.getRed() / 255.0f, col.getGreen() / 255.0f, col.getBlue() / 255.0f);
|
||||
|
||||
// The sun interposer
|
||||
STKMeshSceneNode *sun = irr_driver->getSunInterposer();
|
||||
|
@ -828,7 +828,6 @@ void IrrDriver::renderGlow(std::vector<GlowData>& glows)
|
||||
glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
|
||||
|
||||
const u32 glowcount = (int)glows.size();
|
||||
ColorizeProvider * const cb = (ColorizeProvider *) m_shaders->m_callbacks[ES_COLORIZE];
|
||||
|
||||
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
|
||||
glStencilFunc(GL_ALWAYS, 1, ~0);
|
||||
|
@ -110,14 +110,10 @@ Shaders::Shaders()
|
||||
// Callbacks
|
||||
memset(m_callbacks, 0, sizeof(m_callbacks));
|
||||
|
||||
m_callbacks[ES_SKYBOX] = new SkyboxProvider();
|
||||
m_callbacks[ES_WATER] = new WaterShaderProvider();
|
||||
m_callbacks[ES_GRASS] = new GrassShaderProvider();
|
||||
m_callbacks[ES_BUBBLES] = new BubbleEffectProvider();
|
||||
m_callbacks[ES_MOTIONBLUR] = new MotionBlurProvider();
|
||||
m_callbacks[ES_GAUSSIAN3V] = m_callbacks[ES_GAUSSIAN3H] = new GaussianBlurProvider();
|
||||
m_callbacks[ES_MIPVIZ] = new MipVizProvider();
|
||||
m_callbacks[ES_COLORIZE] = new ColorizeProvider();
|
||||
m_callbacks[ES_SUNLIGHT] = new SunLightProvider();
|
||||
m_callbacks[ES_DISPLACE] = new DisplaceProvider();
|
||||
|
||||
@ -346,9 +342,6 @@ void Shaders::loadShaders()
|
||||
m_shaders[ES_GRASS_REF] = glslmat(dir + "pass.vert", dir + "pass.frag",
|
||||
m_callbacks[ES_GRASS], EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
|
||||
|
||||
m_shaders[ES_BUBBLES] = glslmat(dir + "pass.vert", dir + "pass.frag",
|
||||
m_callbacks[ES_BUBBLES], EMT_TRANSPARENT_ALPHA_CHANNEL);
|
||||
|
||||
m_shaders[ES_MOTIONBLUR] = glsl(dir + "pass.vert", dir + "pass.frag",
|
||||
m_callbacks[ES_MOTIONBLUR]);
|
||||
|
||||
@ -407,7 +400,6 @@ void Shaders::loadShaders()
|
||||
initFrustrumVBO();
|
||||
initShadowVPMUBO();
|
||||
initParticleQuadVBO();
|
||||
MeshShader::BubbleShader::init();
|
||||
MeshShader::ViewFrustrumShader::init();
|
||||
UtilShader::ColoredLine::init();
|
||||
}
|
||||
@ -1000,30 +992,6 @@ namespace MeshShader
|
||||
7, "tex_detail3");
|
||||
}
|
||||
|
||||
GLuint BubbleShader::Program;
|
||||
GLuint BubbleShader::uniform_MVP;
|
||||
GLuint BubbleShader::uniform_tex;
|
||||
GLuint BubbleShader::uniform_time;
|
||||
GLuint BubbleShader::uniform_transparency;
|
||||
|
||||
void BubbleShader::init()
|
||||
{
|
||||
Program = LoadProgram(OBJECT,
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/bubble.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/bubble.frag").c_str());
|
||||
uniform_MVP = glGetUniformLocation(Program, "ModelViewProjectionMatrix");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
uniform_time = glGetUniformLocation(Program, "time");
|
||||
uniform_transparency = glGetUniformLocation(Program, "transparency");
|
||||
}
|
||||
void BubbleShader::setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex, float time, float transparency)
|
||||
{
|
||||
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, ModelViewProjectionMatrix.pointer());
|
||||
glUniform1i(uniform_tex, TU_tex);
|
||||
glUniform1f(uniform_time, time);
|
||||
glUniform1f(uniform_transparency, transparency);
|
||||
}
|
||||
|
||||
TransparentShader::TransparentShader()
|
||||
{
|
||||
Program = LoadProgram(OBJECT,
|
||||
|
@ -179,16 +179,6 @@ public:
|
||||
SplattingShader();
|
||||
};
|
||||
|
||||
class BubbleShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint uniform_MVP, uniform_tex, uniform_time, uniform_transparency;
|
||||
|
||||
static void init();
|
||||
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex, float time, float transparency);
|
||||
};
|
||||
|
||||
class TransparentShader : public ShaderHelperSingleton<TransparentShader, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||
{
|
||||
public:
|
||||
@ -628,7 +618,6 @@ public:
|
||||
ACT(ES_SPHERE_MAP) \
|
||||
ACT(ES_GRASS) \
|
||||
ACT(ES_GRASS_REF) \
|
||||
ACT(ES_BUBBLES) \
|
||||
ACT(ES_MOTIONBLUR) \
|
||||
ACT(ES_GAUSSIAN3H) \
|
||||
ACT(ES_GAUSSIAN3V) \
|
||||
|
@ -33,8 +33,6 @@ TransparentMaterial MaterialTypeToTransparentMaterial(video::E_MATERIAL_TYPE typ
|
||||
{
|
||||
if (type == irr_driver->getShader(ES_DISPLACE))
|
||||
return TM_DISPLACEMENT;
|
||||
if (type == irr_driver->getShader(ES_BUBBLES))
|
||||
return TM_BUBBLE;
|
||||
video::E_BLEND_FACTOR srcFact, DstFact;
|
||||
video::E_MODULATE_FUNC mod;
|
||||
u32 alpha;
|
||||
@ -241,23 +239,6 @@ core::vector3df getWindDir()
|
||||
return m_speed * vector3df(1., 0., 0.) * cos(time);
|
||||
}
|
||||
|
||||
void drawBubble(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix)
|
||||
{
|
||||
irr_driver->IncreaseObjectCount();
|
||||
const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f;
|
||||
float transparency = 1.;
|
||||
|
||||
GLenum ptype = mesh.PrimitiveType;
|
||||
GLenum itype = mesh.IndexType;
|
||||
size_t count = mesh.IndexCount;
|
||||
|
||||
compressTexture(mesh.textures[0], true);
|
||||
setTexture(0, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
||||
|
||||
MeshShader::BubbleShader::setUniforms(ModelViewProjectionMatrix, 0, time, transparency);
|
||||
glDrawElementsBaseVertex(ptype, count, itype, (GLvoid *)mesh.vaoOffset, mesh.vaoBaseVertex);
|
||||
}
|
||||
|
||||
bool isObject(video::E_MATERIAL_TYPE type)
|
||||
{
|
||||
if (type == irr_driver->getShader(ES_OBJECTPASS))
|
||||
@ -276,8 +257,6 @@ bool isObject(video::E_MATERIAL_TYPE type)
|
||||
return true;
|
||||
if (type == irr_driver->getShader(ES_GRASS_REF))
|
||||
return true;
|
||||
if (type == irr_driver->getShader(ES_BUBBLES))
|
||||
return true;
|
||||
if (type == irr_driver->getShader(ES_DISPLACE))
|
||||
return true;
|
||||
if (type == irr_driver->getShader(ES_OBJECT_UNLIT))
|
||||
|
@ -27,7 +27,6 @@ enum TransparentMaterial
|
||||
{
|
||||
TM_DEFAULT,
|
||||
TM_ADDITIVE,
|
||||
TM_BUBBLE,
|
||||
TM_DISPLACEMENT,
|
||||
TM_COUNT
|
||||
};
|
||||
@ -185,9 +184,6 @@ class ListDisplacement : public MiscList<ListDisplacement, GLMesh *, core::matri
|
||||
class ListInstancedGlow : public Singleton<ListInstancedGlow>, public std::vector<GLMesh *>
|
||||
{};
|
||||
|
||||
// Forward pass (for transparents meshes)
|
||||
void drawBubble(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix);
|
||||
|
||||
MeshMaterial MaterialTypeToMeshMaterial(video::E_MATERIAL_TYPE, video::E_VERTEX_TYPE);
|
||||
TransparentMaterial MaterialTypeToTransparentMaterial(video::E_MATERIAL_TYPE, f32 MaterialTypeParam);
|
||||
|
||||
|
@ -429,18 +429,5 @@ void STKMeshSceneNode::render()
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
GLMesh* mesh;
|
||||
if (!TransparentMesh[TM_BUBBLE].empty())
|
||||
glUseProgram(MeshShader::BubbleShader::Program);
|
||||
if (irr_driver->hasARB_base_instance())
|
||||
glBindVertexArray(VAOManager::getInstance()->getVAO(video::EVT_STANDARD));
|
||||
for_in(mesh, TransparentMesh[TM_BUBBLE])
|
||||
{
|
||||
if (irr_driver->hasARB_base_instance())
|
||||
glBindVertexArray(mesh->vao);
|
||||
drawBubble(*mesh, ModelViewProjectionMatrix);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user