Commit 5cfeba46 authored by nadro's avatar nadro

- Fixed compilation issues with CG support enabled.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4560 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 40df626e
...@@ -154,8 +154,8 @@ void CCgUniformSampler2D::update(const void* data, const SMaterial& material) co ...@@ -154,8 +154,8 @@ void CCgUniformSampler2D::update(const void* data, const SMaterial& material) co
{ {
} }
CCgMaterialRenderer::CCgMaterialRenderer(IShaderConstantSetCallBack* callback, IMaterialRenderer* baseMaterial, s32 userData) : CCgMaterialRenderer::CCgMaterialRenderer(IShaderConstantSetCallBack* callback, s32 userData) :
CallBack(callback), BaseMaterial(baseMaterial), UserData(userData), CallBack(callback), UserData(userData),
VertexProgram(0), FragmentProgram(0), GeometryProgram(0), VertexProfile(CG_PROFILE_UNKNOWN), FragmentProfile(CG_PROFILE_UNKNOWN), GeometryProfile(CG_PROFILE_UNKNOWN), VertexProgram(0), FragmentProgram(0), GeometryProgram(0), VertexProfile(CG_PROFILE_UNKNOWN), FragmentProfile(CG_PROFILE_UNKNOWN), GeometryProfile(CG_PROFILE_UNKNOWN),
Material(IdentityMaterial), Error(CG_NO_ERROR) Material(IdentityMaterial), Error(CG_NO_ERROR)
{ {
...@@ -163,9 +163,6 @@ CCgMaterialRenderer::CCgMaterialRenderer(IShaderConstantSetCallBack* callback, I ...@@ -163,9 +163,6 @@ CCgMaterialRenderer::CCgMaterialRenderer(IShaderConstantSetCallBack* callback, I
setDebugName("CCgMaterialRenderer"); setDebugName("CCgMaterialRenderer");
#endif #endif
if(BaseMaterial)
BaseMaterial->grab();
if(CallBack) if(CallBack)
CallBack->grab(); CallBack->grab();
} }
...@@ -175,20 +172,12 @@ CCgMaterialRenderer::~CCgMaterialRenderer() ...@@ -175,20 +172,12 @@ CCgMaterialRenderer::~CCgMaterialRenderer()
if(CallBack) if(CallBack)
CallBack->drop(); CallBack->drop();
if(BaseMaterial)
BaseMaterial->drop();
for(unsigned int i = 0; i < UniformInfo.size(); ++i) for(unsigned int i = 0; i < UniformInfo.size(); ++i)
delete UniformInfo[i]; delete UniformInfo[i];
UniformInfo.clear(); UniformInfo.clear();
} }
bool CCgMaterialRenderer::isTransparent() const
{
return BaseMaterial ? BaseMaterial->isTransparent() : false;
}
s32 CCgMaterialRenderer::getVertexShaderConstantID(const c8* name) s32 CCgMaterialRenderer::getVertexShaderConstantID(const c8* name)
{ {
return getPixelShaderConstantID(name); return getPixelShaderConstantID(name);
......
...@@ -130,10 +130,10 @@ public: ...@@ -130,10 +130,10 @@ public:
class CCgMaterialRenderer : public IMaterialRenderer, public IMaterialRendererServices class CCgMaterialRenderer : public IMaterialRenderer, public IMaterialRendererServices
{ {
public: public:
CCgMaterialRenderer(IShaderConstantSetCallBack* callback = 0, IMaterialRenderer* baseMaterial = 0, s32 userData = 0); CCgMaterialRenderer(IShaderConstantSetCallBack* callback = 0, s32 userData = 0);
virtual ~CCgMaterialRenderer(); virtual ~CCgMaterialRenderer();
virtual bool isTransparent() const _IRR_OVERRIDE_; virtual bool isTransparent() const = 0;
virtual s32 getVertexShaderConstantID(const c8* name) _IRR_OVERRIDE_; virtual s32 getVertexShaderConstantID(const c8* name) _IRR_OVERRIDE_;
virtual s32 getPixelShaderConstantID(const c8* name) _IRR_OVERRIDE_; virtual s32 getPixelShaderConstantID(const c8* name) _IRR_OVERRIDE_;
...@@ -148,7 +148,6 @@ protected: ...@@ -148,7 +148,6 @@ protected:
void getUniformList(); void getUniformList();
IShaderConstantSetCallBack* CallBack; IShaderConstantSetCallBack* CallBack;
IMaterialRenderer* BaseMaterial;
s32 UserData; s32 UserData;
core::array<CCgUniform*> UniformInfo; core::array<CCgUniform*> UniformInfo;
......
...@@ -38,18 +38,24 @@ CD3D9CgMaterialRenderer::CD3D9CgMaterialRenderer(CD3D9Driver* driver, s32& mater ...@@ -38,18 +38,24 @@ CD3D9CgMaterialRenderer::CD3D9CgMaterialRenderer(CD3D9Driver* driver, s32& mater
const c8* geometryProgram, const c8* geometryEntry, E_GEOMETRY_SHADER_TYPE geometryProfile, const c8* geometryProgram, const c8* geometryEntry, E_GEOMETRY_SHADER_TYPE geometryProfile,
scene::E_PRIMITIVE_TYPE inType, scene::E_PRIMITIVE_TYPE outType, u32 vertices, scene::E_PRIMITIVE_TYPE inType, scene::E_PRIMITIVE_TYPE outType, u32 vertices,
IShaderConstantSetCallBack* callback, IMaterialRenderer* baseMaterial, s32 userData) : IShaderConstantSetCallBack* callback, IMaterialRenderer* baseMaterial, s32 userData) :
Driver(driver), CCgMaterialRenderer(callback, baseMaterial, userData) BaseMaterial(baseMaterial), Driver(driver), CCgMaterialRenderer(callback, userData)
{ {
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("CD3D9CgMaterialRenderer"); setDebugName("CD3D9CgMaterialRenderer");
#endif #endif
if(BaseMaterial)
BaseMaterial->grab();
init(materialType, vertexProgram, vertexEntry, vertexProfile, fragmentProgram, fragmentEntry, fragmentProfile, init(materialType, vertexProgram, vertexEntry, vertexProfile, fragmentProgram, fragmentEntry, fragmentProfile,
geometryProgram, geometryEntry, geometryProfile, inType, outType, vertices); geometryProgram, geometryEntry, geometryProfile, inType, outType, vertices);
} }
CD3D9CgMaterialRenderer::~CD3D9CgMaterialRenderer() CD3D9CgMaterialRenderer::~CD3D9CgMaterialRenderer()
{ {
if(BaseMaterial)
BaseMaterial->drop();
if (VertexProgram) if (VertexProgram)
{ {
cgD3D9UnloadProgram(VertexProgram); cgD3D9UnloadProgram(VertexProgram);
...@@ -60,11 +66,11 @@ CD3D9CgMaterialRenderer::~CD3D9CgMaterialRenderer() ...@@ -60,11 +66,11 @@ CD3D9CgMaterialRenderer::~CD3D9CgMaterialRenderer()
cgD3D9UnloadProgram(FragmentProgram); cgD3D9UnloadProgram(FragmentProgram);
cgDestroyProgram(FragmentProgram); cgDestroyProgram(FragmentProgram);
} }
/*if (GeometryProgram) }
{
cgD3D9UnloadProgram(GeometryProgram); bool CD3D9CgMaterialRenderer::isTransparent() const
cgDestroyProgram(GeometryProgram); {
}*/ return BaseMaterial ? BaseMaterial->isTransparent() : false;
} }
void CD3D9CgMaterialRenderer::OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates, IMaterialRendererServices* services) void CD3D9CgMaterialRenderer::OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates, IMaterialRendererServices* services)
......
...@@ -53,6 +53,8 @@ public: ...@@ -53,6 +53,8 @@ public:
virtual ~CD3D9CgMaterialRenderer(); virtual ~CD3D9CgMaterialRenderer();
virtual bool isTransparent() const _IRR_OVERRIDE_;
virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates, IMaterialRendererServices* services) _IRR_OVERRIDE_; virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates, IMaterialRendererServices* services) _IRR_OVERRIDE_;
virtual bool OnRender(IMaterialRendererServices* services, E_VERTEX_TYPE vtxtype) _IRR_OVERRIDE_; virtual bool OnRender(IMaterialRendererServices* services, E_VERTEX_TYPE vtxtype) _IRR_OVERRIDE_;
virtual void OnUnsetMaterial() _IRR_OVERRIDE_; virtual void OnUnsetMaterial() _IRR_OVERRIDE_;
...@@ -72,6 +74,8 @@ protected: ...@@ -72,6 +74,8 @@ protected:
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
u32 vertices = 0); u32 vertices = 0);
IMaterialRenderer* BaseMaterial;
CD3D9Driver* Driver; CD3D9Driver* Driver;
}; };
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "COpenGLCgMaterialRenderer.h" #include "COpenGLCgMaterialRenderer.h"
#include "COpenGLDriver.h" #include "COpenGLDriver.h"
#include "COpenGLTexture.h" #include "COpenGLTexture.h"
#include "COpenGLMaterialRenderer.h"
namespace irr namespace irr
{ {
...@@ -38,19 +39,31 @@ COpenGLCgMaterialRenderer::COpenGLCgMaterialRenderer(COpenGLDriver* driver, s32& ...@@ -38,19 +39,31 @@ COpenGLCgMaterialRenderer::COpenGLCgMaterialRenderer(COpenGLDriver* driver, s32&
const c8* fragmentProgram, const c8* fragmentEntry, E_PIXEL_SHADER_TYPE fragmentProfile, const c8* fragmentProgram, const c8* fragmentEntry, E_PIXEL_SHADER_TYPE fragmentProfile,
const c8* geometryProgram, const c8* geometryEntry, E_GEOMETRY_SHADER_TYPE geometryProfile, const c8* geometryProgram, const c8* geometryEntry, E_GEOMETRY_SHADER_TYPE geometryProfile,
scene::E_PRIMITIVE_TYPE inType, scene::E_PRIMITIVE_TYPE outType, u32 vertices, scene::E_PRIMITIVE_TYPE inType, scene::E_PRIMITIVE_TYPE outType, u32 vertices,
IShaderConstantSetCallBack* callback, IMaterialRenderer* baseMaterial, s32 userData) : IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) :
Driver(driver), CCgMaterialRenderer(callback, baseMaterial, userData) BaseMaterial(0), Driver(driver), CCgMaterialRenderer(callback, userData)
{ {
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("COpenGLCgMaterialRenderer"); setDebugName("COpenGLCgMaterialRenderer");
#endif #endif
if (baseMaterial == EMT_ONETEXTURE_BLEND || baseMaterial == EMT_TRANSPARENT_ADD_COLOR || baseMaterial == EMT_TRANSPARENT_VERTEX_ALPHA ||
baseMaterial == EMT_TRANSPARENT_ALPHA_CHANNEL || baseMaterial == EMT_TRANSPARENT_ALPHA_CHANNEL_REF)
{
BaseMaterial = static_cast<COpenGLMaterialRenderer*>(Driver->getMaterialRenderer(baseMaterial));
}
if (BaseMaterial)
BaseMaterial->grab();
init(materialType, vertexProgram, vertexEntry, vertexProfile, fragmentProgram, fragmentEntry, fragmentProfile, init(materialType, vertexProgram, vertexEntry, vertexProfile, fragmentProgram, fragmentEntry, fragmentProfile,
geometryProgram, geometryEntry, geometryProfile, inType, outType, vertices); geometryProgram, geometryEntry, geometryProfile, inType, outType, vertices);
} }
COpenGLCgMaterialRenderer::~COpenGLCgMaterialRenderer() COpenGLCgMaterialRenderer::~COpenGLCgMaterialRenderer()
{ {
if(BaseMaterial)
BaseMaterial->drop();
if (VertexProgram) if (VertexProgram)
{ {
cgGLUnloadProgram(VertexProgram); cgGLUnloadProgram(VertexProgram);
...@@ -68,6 +81,11 @@ COpenGLCgMaterialRenderer::~COpenGLCgMaterialRenderer() ...@@ -68,6 +81,11 @@ COpenGLCgMaterialRenderer::~COpenGLCgMaterialRenderer()
} }
} }
bool COpenGLCgMaterialRenderer::isTransparent() const
{
return BaseMaterial ? BaseMaterial->isTransparent() : false;
}
void COpenGLCgMaterialRenderer::OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates, IMaterialRendererServices* services) void COpenGLCgMaterialRenderer::OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates, IMaterialRendererServices* services)
{ {
if (Driver->getFixedPipelineState() == COpenGLDriver::EOFPS_ENABLE) if (Driver->getFixedPipelineState() == COpenGLDriver::EOFPS_ENABLE)
......
...@@ -42,6 +42,7 @@ namespace video ...@@ -42,6 +42,7 @@ namespace video
{ {
class COpenGLDriver; class COpenGLDriver;
class COpenGLMaterialRenderer;
class IShaderConstantSetCallBack; class IShaderConstantSetCallBack;
class COpenGLCgUniformSampler2D : public CCgUniform class COpenGLCgUniformSampler2D : public CCgUniform
...@@ -65,10 +66,12 @@ public: ...@@ -65,10 +66,12 @@ public:
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES, scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
u32 vertices = 0, IShaderConstantSetCallBack* callback = 0, u32 vertices = 0, IShaderConstantSetCallBack* callback = 0,
IMaterialRenderer* baseMaterial = 0, s32 userData = 0); E_MATERIAL_TYPE baseMaterial = EMT_SOLID, s32 userData = 0);
virtual ~COpenGLCgMaterialRenderer(); virtual ~COpenGLCgMaterialRenderer();
virtual bool isTransparent() const _IRR_OVERRIDE_;
virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates, IMaterialRendererServices* services) _IRR_OVERRIDE_; virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates, IMaterialRendererServices* services) _IRR_OVERRIDE_;
virtual bool OnRender(IMaterialRendererServices* services, E_VERTEX_TYPE vtxtype) _IRR_OVERRIDE_; virtual bool OnRender(IMaterialRendererServices* services, E_VERTEX_TYPE vtxtype) _IRR_OVERRIDE_;
virtual void OnUnsetMaterial() _IRR_OVERRIDE_; virtual void OnUnsetMaterial() _IRR_OVERRIDE_;
...@@ -88,6 +91,8 @@ protected: ...@@ -88,6 +91,8 @@ protected:
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
u32 vertices = 0); u32 vertices = 0);
COpenGLMaterialRenderer* BaseMaterial;
COpenGLDriver* Driver; COpenGLDriver* Driver;
}; };
......
...@@ -4231,7 +4231,7 @@ s32 COpenGLDriver::addHighLevelShaderMaterial( ...@@ -4231,7 +4231,7 @@ s32 COpenGLDriver::addHighLevelShaderMaterial(
pixelShaderProgram, pixelShaderEntryPointName, psCompileTarget, pixelShaderProgram, pixelShaderEntryPointName, psCompileTarget,
geometryShaderProgram, geometryShaderEntryPointName, gsCompileTarget, geometryShaderProgram, geometryShaderEntryPointName, gsCompileTarget,
inType, outType, verticesOut, inType, outType, verticesOut,
callback,getMaterialRenderer(baseMaterial), userData); callback,baseMaterial, userData);
r->drop(); r->drop();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment