Some settings for the normal shaded material.

--HG--
branch : gsoc2013-dfighter
hg/feature/gsoc2013-dfighter
dfighter1985 11 years ago
parent e740fd4aeb
commit c74e279282

@ -54,6 +54,7 @@ namespace NL3D
if( itr != vertexPrograms.end() ) if( itr != vertexPrograms.end() )
return false; return false;
glGetError();
nglAttachShader( programId, shader->getShaderId() ); nglAttachShader( programId, shader->getShaderId() );
GLenum error = glGetError(); GLenum error = glGetError();
@ -78,6 +79,7 @@ namespace NL3D
if( itr != pixelPrograms.end() ) if( itr != pixelPrograms.end() )
return false; return false;
glGetError();
nglAttachShader( programId, shader->getShaderId() ); nglAttachShader( programId, shader->getShaderId() );
GLenum error = glGetError(); GLenum error = glGetError();

@ -239,7 +239,7 @@ namespace NL3D
void CGLSLShaderGenerator::addDiffuse() void CGLSLShaderGenerator::addDiffuse()
{ {
ss << "float diffuse = vec4( "; ss << "vec4 diffuse = vec4( ";
ss << float( material->getDiffuse().R / 255.0f ) << ", "; ss << float( material->getDiffuse().R / 255.0f ) << ", ";
ss << float( material->getDiffuse().G / 255.0f ) << ", "; ss << float( material->getDiffuse().G / 255.0f ) << ", ";
ss << float( material->getDiffuse().B / 255.0f ) << ", "; ss << float( material->getDiffuse().B / 255.0f ) << ", ";

@ -1071,6 +1071,9 @@ private:
void setupUVPtr(uint stage, CVertexBufferInfo &VB, uint uvId); void setupUVPtr(uint stage, CVertexBufferInfo &VB, uint uvId);
void setupNormalPass();
/// \name Lightmap. /// \name Lightmap.
// @{ // @{
void computeLightMapInfos(const CMaterial &mat); void computeLightMapInfos(const CMaterial &mat);

@ -577,6 +577,32 @@ void CDriverGL3::endMultiPass()
} }
} }
const char *samplers[ 4 ] =
{
"sampler0",
"sampler1",
"sampler2",
"sampler3"
};
void CDriverGL3::setupNormalPass()
{
const CMaterial &mat = *_CurrentMaterial;
for( int i = 0; i < 4; i++ )
{
ITexture *t = mat.getTexture( i );
if( t == NULL )
continue;
int index = getUniformLocation( samplers[ i ] );
if( index == -1 )
continue;
setUniform1i( index, i );
}
}
// *************************************************************************** // ***************************************************************************
void CDriverGL3::computeLightMapInfos (const CMaterial &mat) void CDriverGL3::computeLightMapInfos (const CMaterial &mat)
{ {

@ -118,22 +118,25 @@ namespace NL3D
bool CDriverGL3::renderTriangles2( CMaterial &mat, uint32 startIndex, uint32 numTris ) bool CDriverGL3::renderTriangles2( CMaterial &mat, uint32 startIndex, uint32 numTris )
{ {
if( !setupMaterial( mat ) )
return false;
if( !setupProgram( mat ) ) if( !setupProgram( mat ) )
return false; return false;
//glDrawArrays( GL_TRIANGLES, startIndex * 3, numTris * 3 ); //glDrawArrays( GL_TRIANGLES, startIndex * 3, numTris * 3 );
if( numTris ) if( numTris )
{ {
if (_LastIB._Format == CIndexBuffer::Indices16) if (_LastIB._Format == CIndexBuffer::Indices16)
{ {
glDrawElements(GL_TRIANGLES,3*numTris,GL_UNSIGNED_SHORT, ((uint16 *) _LastIB._Values)+startIndex); glDrawElements(GL_TRIANGLES,3*numTris,GL_UNSIGNED_SHORT, ((uint16 *) _LastIB._Values)+startIndex);
} }
else else
{ {
nlassert(_LastIB._Format == CIndexBuffer::Indices32); nlassert(_LastIB._Format == CIndexBuffer::Indices32);
glDrawElements(GL_TRIANGLES,3*numTris,GL_UNSIGNED_INT, ((uint32 *) _LastIB._Values)+startIndex); glDrawElements(GL_TRIANGLES,3*numTris,GL_UNSIGNED_INT, ((uint32 *) _LastIB._Values)+startIndex);
} }
} }
releaseProgram(); releaseProgram();
@ -186,9 +189,7 @@ namespace NL3D
p->attachPixelProgram( pp ); p->attachPixelProgram( pp );
if( !p->link( log ) ) if( !p->link( log ) )
{ {
delete vp;
vp = NULL; vp = NULL;
delete pp;
pp = NULL; pp = NULL;
delete p; delete p;
p = NULL; p = NULL;
@ -206,6 +207,13 @@ namespace NL3D
setUniformMatrix4fv( mvpIndex, 1, false, mat.get() ); setUniformMatrix4fv( mvpIndex, 1, false, mat.get() );
} }
switch( mat.getShader() )
{
case CMaterial::Normal:
setupNormalPass();
break;
}
return true; return true;
} }

Loading…
Cancel
Save