| 215 | } |
| 216 | |
| 217 | GFXShader* ShaderData::_createShader( const Vector<GFXShaderMacro> ¯os ) |
| 218 | { |
| 219 | F32 pixver = mPixVersion; |
| 220 | if ( mUseDevicePixVersion ) |
| 221 | pixver = getMax( pixver, GFX->getPixelShaderVersion() ); |
| 222 | |
| 223 | // Enable shader error logging. |
| 224 | GFXShader::setLogging( true, true ); |
| 225 | |
| 226 | GFXShader *shader = GFX->createShader(); |
| 227 | bool success = false; |
| 228 | |
| 229 | Vector<String> samplers; |
| 230 | samplers.setSize(ShaderData::NumTextures); |
| 231 | for(int i = 0; i < ShaderData::NumTextures; ++i) |
| 232 | samplers[i] = mSamplerNames[i][0] == '$' ? mSamplerNames[i] : "$"+mSamplerNames[i]; |
| 233 | |
| 234 | // Initialize the right shader type. |
| 235 | switch( GFX->getAdapterType() ) |
| 236 | { |
| 237 | case Direct3D9_360: |
| 238 | case Direct3D9: |
| 239 | case Direct3D11: |
| 240 | { |
| 241 | success = shader->init( mDXVertexShaderName, |
| 242 | mDXPixelShaderName, |
| 243 | pixver, |
| 244 | macros, |
| 245 | samplers); |
| 246 | break; |
| 247 | } |
| 248 | |
| 249 | case OpenGL: |
| 250 | { |
| 251 | success = shader->init( mOGLVertexShaderName, |
| 252 | mOGLPixelShaderName, |
| 253 | pixver, |
| 254 | macros, |
| 255 | samplers); |
| 256 | break; |
| 257 | } |
| 258 | |
| 259 | default: |
| 260 | // Other device types are assumed to not support shaders. |
| 261 | success = false; |
| 262 | break; |
| 263 | } |
| 264 | |
| 265 | #if defined(TORQUE_DEBUG) |
| 266 | //Assert Sampler registers |
| 267 | const Vector<GFXShaderConstDesc>& descs = shader->getShaderConstDesc(); |
| 268 | for(int i = 0; i < descs.size(); ++i) |
| 269 | { |
| 270 | if(descs[i].constType != GFXSCT_Sampler && descs[i].constType != GFXSCT_SamplerCube) |
| 271 | continue; |
| 272 | |
| 273 | GFXShaderConstHandle *handle = shader->findShaderConstHandle(descs[i].name); |
| 274 | if(!handle || !handle->isValid()) |
nothing calls this directly
no test coverage detected