void GLSLProgram<real>::SetupLights() { const std::vector<Light<real>*>* lights = RenderState<real>::Get()->GetLights(); // Setup enabled lights for ( uint i=0 ; i<lights->size() && i<mLightLocations.size() ; ++i ) { Light<real>* light = (*lights)[i]; glUniform1i( mLightLocations[i].enabled, true ); glUniform1i( mLightLocations[i].type, light->GetLightType() ); Vector3<float> position = light->GetLocalToGlobal() * Vector3<real>( 0, 0, 0 ); glUniform3fv( mLightLocations[i].position, 1, (float*)&position ); Color<float> intensity = light->GetIntensity(); glUniform4fv( mLightLocations[i].intensity, 1, (float*)&intensity ); Color<float> ambient = light->GetAmbient(); glUniform4fv( mLightLocations[i].ambient, 1, (float*)&ambient ); // Setup sub-parameters switch( light->GetLightType() ) { case Light<real>::TypeDirectional: SetupDirectionalLight( i, light ); break; case Light<real>::TypePoint: SetupPointLight( i, light ); break; case Light<real>::TypeSpot: SetupSpotLight( i, light ); break; } } // Disabled lights for ( uint i=lights->size() ; i<mLightLocations.size() ; ++i ) glUniform1i( mLightLocations[i].enabled, false ); // Nb of lights glUniform1i( mNbLightsLocation, lights->size() ); }
HRESULT InitD3D( HWND hWnd ) { // Create the D3D object, which is needed to create the D3DDevice. if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) { MessageBoxA(NULL, "Create D3D9 object failed!", "Error", 0) ; return E_FAIL; } D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; // use window mode, not full screen d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; d3dpp.EnableAutoDepthStencil = TRUE ; d3dpp.AutoDepthStencilFormat = D3DFMT_D16 ; // Create device if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) { MessageBoxA(NULL, "Create D3D9 device failed!", "Error", 0) ; return E_FAIL; } // Create teapot D3DXCreateTeapot(g_pd3dDevice, &g_pTeapotMesh, NULL) ; // Setup a Yellow material D3DCOLOR red = D3DCOLOR_XRGB(255, 255, 0); SetupMaterial(red); // Setup a white light D3DCOLOR white = D3DCOLOR_XRGB(255, 255, 255); D3DXVECTOR3 position(10, 10, -5); SetupPointLight(position, white); return S_OK; }