void HwShaderExporter::exportSampler ( const TCHAR* paramName, const PBBitmap* bitmap ) { COLLADASW::StreamWriter* streamWriter = &mDocumentExporter->getStreamWriter(); // Name of the current texture #ifdef UNICODE String stringParamName = COLLADABU::StringUtils::wideString2utf8String( paramName ); const char* surfaceSid = stringParamName.c_str(); #else const char* surfaceSid = paramName;//cgGetParameterName( cgTextureParam ); #endif // Get the name of the current parameter //const char* samplerSid = cgGetParameterName ( cgParameter ); char samplerSid[256]; _snprintf_s( samplerSid, 256, "%sSampler", surfaceSid ); // Create the collada sampler object COLLADASW::Sampler sampler ( COLLADASW::Sampler::SAMPLER_TYPE_UNSPECIFIED, samplerSid, surfaceSid ); /* // Look for the wraps cgStateAssignment = cgGetNamedSamplerStateAssignment ( cgParameter, COLLADASW::CSWC::CSW_ELEMENT_WRAP_S.c_str() ); if ( cgStateAssignment ) { CGstate cgState = cgGetSamplerStateAssignmentState ( cgStateAssignment ); const int* values = cgGetIntStateAssignmentValues ( cgStateAssignment, &valueCount ); const char* cgStateEnum = cgGetStateEnumerantName ( cgState, values[0] ); sampler.setWrapS ( COLLADASW::OPEN_GL::getWrapModeFromOpenGL ( cgStateEnum ) ); } cgStateAssignment = cgGetNamedSamplerStateAssignment ( cgParameter, COLLADASW::CSWC::CSW_ELEMENT_WRAP_T.c_str() ); if ( cgStateAssignment ) { CGstate cgState = cgGetSamplerStateAssignmentState ( cgStateAssignment ); const int* values = cgGetIntStateAssignmentValues ( cgStateAssignment, &valueCount ); const char* cgStateEnum = cgGetStateEnumerantName ( cgState, values[0] ); sampler.setWrapT ( COLLADASW::OPEN_GL::getWrapModeFromOpenGL ( cgStateEnum ) ); } cgStateAssignment = cgGetNamedSamplerStateAssignment ( cgParameter, COLLADASW::CSWC::CSW_ELEMENT_WRAP_P.c_str() ); if ( cgStateAssignment ) { CGstate cgState = cgGetSamplerStateAssignmentState ( cgStateAssignment ); const int* values = cgGetIntStateAssignmentValues ( cgStateAssignment, &valueCount ); const char* cgStateEnum = cgGetStateEnumerantName ( cgState, values[0] ); sampler.setWrapP ( COLLADASW::OPEN_GL::getWrapModeFromOpenGL ( cgStateEnum ) ); } // Look for the filters cgStateAssignment = cgGetNamedSamplerStateAssignment ( cgParameter, COLLADASW::CSWC::CSW_ELEMENT_MAGFILTER.c_str() ); if ( cgStateAssignment ) { CGstate cgState = cgGetSamplerStateAssignmentState ( cgStateAssignment ); const int* values = cgGetIntStateAssignmentValues ( cgStateAssignment, &valueCount ); const char* cgStateEnum = cgGetStateEnumerantName ( cgState, values[0] ); sampler.setMagFilter( COLLADASW::OPEN_GL::getSamplerFilterFromOpenGL ( cgStateEnum ) ); } cgStateAssignment = cgGetNamedSamplerStateAssignment ( cgParameter, COLLADASW::CSWC::CSW_ELEMENT_MINFILTER.c_str() ); if ( cgStateAssignment ) { CGstate cgState = cgGetSamplerStateAssignmentState ( cgStateAssignment ); const int* values = cgGetIntStateAssignmentValues ( cgStateAssignment, &valueCount ); const char* cgStateEnum = cgGetStateEnumerantName ( cgState, values[0] ); sampler.setMinFilter( COLLADASW::OPEN_GL::getSamplerFilterFromOpenGL ( cgStateEnum ) ); } cgStateAssignment = cgGetNamedSamplerStateAssignment ( cgParameter, COLLADASW::CSWC::CSW_ELEMENT_MIPFILTER.c_str() ); if ( cgStateAssignment ) { CGstate cgState = cgGetSamplerStateAssignmentState ( cgStateAssignment ); const int* values = cgGetIntStateAssignmentValues ( cgStateAssignment, &valueCount ); const char* cgStateEnum = cgGetStateEnumerantName ( cgState, values[0] ); sampler.setMipFilter( COLLADASW::OPEN_GL::getSamplerFilterFromOpenGL ( cgStateEnum ) ); } // Look for the border color cgStateAssignment = cgGetNamedSamplerStateAssignment ( cgParameter, COLLADASW::CSWC::CSW_ELEMENT_BORDER_COLOR.c_str() ); if ( cgStateAssignment ) { CGstate cgState = cgGetSamplerStateAssignmentState ( cgStateAssignment ); const float* values = cgGetFloatStateAssignmentValues ( cgStateAssignment, &valueCount ); if ( valueCount == 3 ) sampler.setBorderColor ( COLLADASW::Color ( values[0], values[1], values[2] ) ); else if ( valueCount == 4 ) sampler.setBorderColor ( COLLADASW::Color ( values[0], values[1], values[2], values[3] ) ); } // Look for the mipmaps cgStateAssignment = cgGetNamedSamplerStateAssignment ( cgParameter, COLLADASW::CSWC::CSW_ELEMENT_MIPMAP_MAXLEVEL.c_str() ); if ( cgStateAssignment ) { CGstate cgState = cgGetSamplerStateAssignmentState ( cgStateAssignment ); const int* values = cgGetIntStateAssignmentValues ( cgStateAssignment, &valueCount ); sampler.setMipmapMaxlevel ( ( unsigned char ) ( values[0] ) ); } cgStateAssignment = cgGetNamedSamplerStateAssignment ( cgParameter, COLLADASW::CSWC::CSW_ELEMENT_MIPMAP_BIAS.c_str() ); if ( cgStateAssignment ) { CGstate cgState = cgGetSamplerStateAssignmentState ( cgStateAssignment ); const float* values = cgGetFloatStateAssignmentValues ( cgStateAssignment, &valueCount ); sampler.setMipmapBias ( values[0] ); } // TODO Look for extra tags // exportSamplerStateAssignments (cgParameter, cgTextureParam, surfaceType, samplerType, samplerValueType); */ //:TODO: get sampler type from data COLLADASW::Sampler::SamplerType samplerType = COLLADASW::Sampler::SAMPLER_TYPE_2D; // Set the sampler type sampler.setSamplerType ( samplerType ); // Add the texture, if exist setTexture ( bitmap, sampler ); //if ( writeNewParam ) { // Get the surface annotations. std::vector<COLLADASW::Annotation> surfaceAnnotations; //getAnnotations( surfaceAnnotations, cgTextureParam ); // Get the sampler annotations. std::vector<COLLADASW::Annotation> samplerAnnotations; //getAnnotations( samplerAnnotations, cgParameter ); // Add the parameter. sampler.addInNewParam ( streamWriter, &surfaceAnnotations, &samplerAnnotations ); } /* else { // Add the parameter. sampler.addInSetParam ( streamWriter ); } */ }