I'm trying to implement a multitexute demo using Irrlicht-1.7.3, I wrote my own glsl shaders and had been proved right in Rendermonkey, but it didn't work in my irrlicht demo project(this demo is modified from the "10.Shaders" example shipped in Irrlicht-1.7.3's examples).
I had created a custom material type to use my own shaders:
Code: Select all
newMaterialType1 = gpu->addHighLevelShaderMaterialFromFiles(
vsFileName, "main", video::EVST_VS_1_1,
psFileName, "main", video::EPST_PS_1_1,
mc, video::EMT_NORMAL_MAP_SOLID);
...
scene::IAnimatedMesh* mesh = smgr->getMesh("../../media/GUN.3DS");
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
node->setPosition(core::vector3df(0,0,0));
node->setMaterialTexture(0, driver->getTexture("../../media/D.tga"));
node->setMaterialTexture(1, driver->getTexture("../../media/E.tga"));Code: Select all
int base_map = GL_TEXTURE0_ARB;
int emission_map = GL_TEXTURE1_ARB;
...
services->setPixelShaderConstant("base_map",(float*)&base_map, 1);
services->setPixelShaderConstant("emission_map",(float*)&emission_map, 1);Vertex Shader:
Code: Select all
varying vec2 vTexCoord;
void main(void)
{
vTexCoord = vec2(gl_MultiTexCoord0);
gl_Position = ftransform();
}Pixel Shader:
Code: Select all
uniform sampler2D base_map;
uniform sampler2D emission_map;
varying vec2 vTexCoord;
void main(void)
{
vec3 base_color = texture2D(base_map,vTexCoord).xyz;
vec3 emission_color = texture2D(emission_map,vTexCoord).xyz;
vec3 color0 = base_color + emission_color;
float color0_a = 1.0;
gl_FragColor = vec4(color0.xyz, color0_a);
}