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