| 221 | } |
| 222 | |
| 223 | void GLRenderSystem::applyFixedFunctionParams(const GpuProgramParametersPtr& params, uint16 mask) |
| 224 | { |
| 225 | bool updateLightPos = false; |
| 226 | |
| 227 | // Autoconstant index is not a physical index |
| 228 | for (const auto& ac : params->getAutoConstants()) |
| 229 | { |
| 230 | // Only update needed slots |
| 231 | if (ac.variability & mask) |
| 232 | { |
| 233 | const float* ptr = params->getFloatPointer(ac.physicalIndex); |
| 234 | switch(ac.paramType) |
| 235 | { |
| 236 | case GpuProgramParameters::ACT_WORLD_MATRIX: |
| 237 | setWorldMatrix(Matrix4(ptr)); |
| 238 | break; |
| 239 | case GpuProgramParameters::ACT_VIEW_MATRIX: |
| 240 | // force light update |
| 241 | updateLightPos = true; |
| 242 | mask |= GPV_LIGHTS; |
| 243 | setViewMatrix(Matrix4(ptr)); |
| 244 | break; |
| 245 | case GpuProgramParameters::ACT_PROJECTION_MATRIX: |
| 246 | setProjectionMatrix(Matrix4(ptr)); |
| 247 | break; |
| 248 | case GpuProgramParameters::ACT_SURFACE_AMBIENT_COLOUR: |
| 249 | mStateCacheManager->setMaterialAmbient(ptr[0], ptr[1], ptr[2], ptr[3]); |
| 250 | break; |
| 251 | case GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR: |
| 252 | mStateCacheManager->setMaterialDiffuse(ptr[0], ptr[1], ptr[2], ptr[3]); |
| 253 | break; |
| 254 | case GpuProgramParameters::ACT_SURFACE_SPECULAR_COLOUR: |
| 255 | mStateCacheManager->setMaterialSpecular(ptr[0], ptr[1], ptr[2], ptr[3]); |
| 256 | break; |
| 257 | case GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR: |
| 258 | mStateCacheManager->setMaterialEmissive(ptr[0], ptr[1], ptr[2], ptr[3]); |
| 259 | break; |
| 260 | case GpuProgramParameters::ACT_SURFACE_SHININESS: |
| 261 | mStateCacheManager->setMaterialShininess(ptr[0]); |
| 262 | break; |
| 263 | case GpuProgramParameters::ACT_POINT_PARAMS: |
| 264 | mStateCacheManager->setPointSize(ptr[0]); |
| 265 | mStateCacheManager->setPointParameters(ptr + 1); |
| 266 | break; |
| 267 | case GpuProgramParameters::ACT_FOG_PARAMS: |
| 268 | glFogf(GL_FOG_DENSITY, ptr[0]); |
| 269 | glFogf(GL_FOG_START, ptr[1]); |
| 270 | glFogf(GL_FOG_END, ptr[2]); |
| 271 | break; |
| 272 | case GpuProgramParameters::ACT_FOG_COLOUR: |
| 273 | glFogfv(GL_FOG_COLOR, ptr); |
| 274 | break; |
| 275 | case GpuProgramParameters::ACT_AMBIENT_LIGHT_COLOUR: |
| 276 | mStateCacheManager->setLightAmbient(ptr[0], ptr[1], ptr[2]); |
| 277 | break; |
| 278 | case GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR: |
| 279 | glLightfv(GL_LIGHT0 + ac.data, GL_DIFFUSE, ptr); |
| 280 | break; |
no test coverage detected