IDirect3DSurface9 * HoeRenderTexture::GetSurface() { IDirect3DSurface9 * sur = NULL; #else IDirect3DSurface8 * HoeRenderTexture::GetSurface() { IDirect3DSurface8 * sur = NULL; #endif assert(m_texture); HRESULT hRef = m_texture->GetSurfaceLevel(0,&sur); assert(hRef==S_OK); return sur; } #endif /////////////////////////////////////////////////// bool HoeVideoTexture::Create(uint w,uint h,HOEFORMAT f) { width = w; height = h; format = f; #ifdef _HOE_D3D_ HRESULT hRes; hRes = D3DDevice()->CreateTexture(w,h,1,D3DUSAGE_DYNAMIC,HoeFormatX(f),D3DPOOL_DEFAULT,&m_texture RESERVE_PAR); assert(hRes==S_OK); #endif #ifdef _HOE_OPENGL_ glGenTextures(1,&m_texture); FillEmpty(); #endif return true; }
void ListState() { Con_Print("List render states"); for (dword dw=0;dw<210;dw++) { if (GetRenderStateString(dw)) { DWORD state; D3DDevice()->GetRenderState((D3DRENDERSTATETYPE)dw, &state); Con_Print("%s = %d", GetRenderStateString(dw), state); } } }
void HoeTexture::Set() { #ifdef _HOE_D3D_ HRESULT hRes; hRes = D3DDevice()->SetTexture(0,this->m_texture); if (FAILED(hRes)) exit(0); #endif // _HOE_D3D_ #ifdef _HOE_OPENGL_ glBindTexture(GL_TEXTURE_2D,this->m_texture); #endif // _HOE_OPENGL_ }
bool HoeRenderTexture::Create(uint w,uint h,HOEFORMAT f) { width = w; height = h; format = f; #ifdef _HOE_D3D_ HRESULT hRes; hRes = D3DDevice()->CreateTexture(w,h,1,D3DUSAGE_RENDERTARGET,HoeFormatX(f),D3DPOOL_DEFAULT,&m_texture RESERVE_PAR); assert(hRes==S_OK); #endif #ifdef _HOE_OPENGL_ glGenTextures(1,&m_texture); FillEmpty(); #endif return true; }
bool HoeTexture::Create(uint w,uint h,HOEFORMAT f) { width = w; height = h; format = f; #ifdef _HOE_D3D_ HRESULT hRes; SAFE_RELEASE(m_texture); hRes = D3DDevice()->CreateTexture(w,h,1,0,HoeFormatX(f),D3DPOOL_MANAGED,&m_texture RESERVE_PAR); checkres(hRes,"CreateTexture"); #endif #ifdef _HOE_OPENGL_ glGenTextures(1,&m_texture); checkgl("glGenTextures"); #endif return true; }
//-------------------------------------------------------------------------------------- // Name: CreateLightingFBO() // Desc: //-------------------------------------------------------------------------------------- BOOL CSample::CreateLightingFBO() { FreeLightingFBO(); // Texture description - render to a 32-bit RGBA color texture D3D11_TEXTURE2D_DESC textureDesc; ZeroMemory( &textureDesc, sizeof(textureDesc) ); textureDesc.Width = m_nWidth; textureDesc.Height = m_nHeight; textureDesc.MipLevels = 1; textureDesc.ArraySize = 1; textureDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; textureDesc.SampleDesc.Count = 1; textureDesc.Usage = D3D11_USAGE_DEFAULT; textureDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; textureDesc.CPUAccessFlags = 0; textureDesc.MiscFlags = 0; // Render target view D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc; ZeroMemory(&renderTargetViewDesc, sizeof(renderTargetViewDesc)); renderTargetViewDesc.Format = textureDesc.Format; renderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; renderTargetViewDesc.Texture2D.MipSlice = 0; // Shader resource view D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc; ZeroMemory(&shaderResourceViewDesc, sizeof(shaderResourceViewDesc)); shaderResourceViewDesc.Format = textureDesc.Format; shaderResourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; shaderResourceViewDesc.Texture2D.MipLevels = 1; shaderResourceViewDesc.Texture2D.MostDetailedMip = 0; // Sampler description D3D11_SAMPLER_DESC samplerDesc; ZeroMemory(&samplerDesc, sizeof(samplerDesc)); samplerDesc.Filter = D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT; samplerDesc.MaxAnisotropy = 0; samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.MipLODBias = 0.0f; samplerDesc.MinLOD = 0; samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; samplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; samplerDesc.BorderColor[0] = 0.0f; samplerDesc.BorderColor[1] = 0.0f; samplerDesc.BorderColor[2] = 0.0f; samplerDesc.BorderColor[3] = 0.0f; // Create a depth/stencil texture for the depth attachment if ( FAILED( D3DDevice()->CreateTexture2D( &textureDesc, NULL, &m_pDiffuseSpecularTexture ) ) ) return FALSE; // Create the render target view if ( FAILED( D3DDevice()->CreateRenderTargetView( m_pDiffuseSpecularTexture.Get(), &renderTargetViewDesc, &m_pDiffuseSpecularTextureRenderTargetView ) ) ) return FALSE; // Create the shader resource view if ( FAILED( D3DDevice()->CreateShaderResourceView( m_pDiffuseSpecularTexture.Get(), &shaderResourceViewDesc, &m_pDiffuseSpecularTextureShaderResourceView ) ) ) return FALSE; // Create the sampler if ( FAILED(D3DDevice()->CreateSamplerState( &samplerDesc, &m_pDiffuseSpecularTextureSampler ) ) ) return FALSE; // Create a depth/stencil texture for the depth attachment textureDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; textureDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; if ( FAILED(D3DDevice()->CreateTexture2D( &textureDesc, NULL, &m_pDiffuseSpecularDepthTexture ) ) ) return FALSE; // Create depth stencil view D3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc; ZeroMemory(&depthStencilViewDesc, sizeof(depthStencilViewDesc)); depthStencilViewDesc.Format = textureDesc.Format; depthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; depthStencilViewDesc.Texture2D.MipSlice = 0; if ( FAILED(D3DDevice()->CreateDepthStencilView( m_pDiffuseSpecularDepthTexture.Get(), &depthStencilViewDesc, &m_pDiffuseSpecularDepthStencilView ) ) ) return FALSE; return TRUE; }
//-------------------------------------------------------------------------------------- // Name: Initialize() // Desc: //-------------------------------------------------------------------------------------- BOOL CSample::Initialize() { // Initialize sample variables m_nCurMeshIndex = CUBE_MESH; m_bShowShadowMap = TRUE; m_vLightPosition = FRMVECTOR3( 0.0f, 8.0f, 0.01f ); // Create the font if( FALSE == m_Font.Create( "Tuffy12.pak" ) ) return FALSE; // Load the packed resources CFrmPackedResourceD3D resource; if( FALSE == resource.LoadFromFile( "Textures.pak" ) ) return FALSE; // Create the logo texture m_pLogoTexture = resource.GetTexture( "Logo" ); // Setup the user interface if( FALSE == m_UserInterface.Initialize( &m_Font, m_strName ) ) return FALSE; m_UserInterface.AddOverlay( m_pLogoTexture, -5, -5, m_pLogoTexture->m_nWidth, m_pLogoTexture->m_nHeight ); m_UserInterface.AddTextString( "Press " FRM_FONT_KEY_0 " for Help", 1.0f, -1.0f, 1.0f ); m_UserInterface.AddIntVariable( &m_nShadowMapFBOTextureWidth , "Shadow Map Size", "%d" ); m_UserInterface.AddBoolVariable( &m_bUsePCF , "PCF On", "True", "False" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_0, "Toggle Help" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_1, "Next Model" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_2, "Next Floor" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_3, "Decrease Shadow Map Size" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_4, "Increase Shadow Map Size" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_5, "Toggle PCF" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_6, "Toggle Shadow Map Display" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_DPAD, "Rotate light" ); // Load the meshes if( FALSE == m_Floor[ PLANE_FLOOR ].Load( "Plane.mesh" ) ) return FALSE; if( FALSE == m_Floor[ PLANE_FLOOR ].MakeDrawable() ) return FALSE; if( FALSE == m_Floor[ TERRAIN_FLOOR ].Load( "Terrain.mesh" ) ) return FALSE; if( FALSE == m_Floor[ TERRAIN_FLOOR ].MakeDrawable() ) return FALSE; if( FALSE == m_Meshes[ CUBE_MESH ].Load( "Cube.mesh" ) ) return FALSE; if( FALSE == m_Meshes[ CUBE_MESH ].MakeDrawable() ) return FALSE; if( FALSE == m_Meshes[ SPHERE_MESH ].Load( "Sphere.mesh" ) ) return FALSE; if( FALSE == m_Meshes[ SPHERE_MESH ].MakeDrawable() ) return FALSE; if( FALSE == m_Meshes[ BUMPY_SPHERE_MESH ].Load( "BumpySphere.mesh" ) ) return FALSE; if( FALSE == m_Meshes[ BUMPY_SPHERE_MESH ].MakeDrawable() ) return FALSE; if( FALSE == m_Meshes[ TORUS_MESH ].Load( "Torus.mesh" ) ) return FALSE; if( FALSE == m_Meshes[ TORUS_MESH ].MakeDrawable() ) return FALSE; if( FALSE == m_Meshes[ ROCKET_MESH ].Load( "Rocket.mesh" ) ) return FALSE; if( FALSE == m_Meshes[ ROCKET_MESH ].MakeDrawable() ) return FALSE; // Initialize the shaders if( FALSE == InitShaders() ) return FALSE; // Initialize the camera and light perspective matrices FLOAT32 fAspect = (FLOAT32)m_nWidth / (FLOAT32)m_nHeight; m_matCameraPersp = FrmMatrixPerspectiveFovRH( FRM_PI/4.0f, fAspect, 1.0f, 100.0f ); m_matLightPersp = FrmMatrixPerspectiveFovRH( FRM_PI/4.0f, 1.0f, 5.0f, 20.0f ); // Setup the FBOs m_nShadowMapFBOTextureExp = 7; m_nShadowMapFBOTextureWidth = 2 << m_nShadowMapFBOTextureExp; m_nShadowMapFBOTextureHeight = 2 << m_nShadowMapFBOTextureExp; if( FALSE == CreateShadowMapFBO() ) return FALSE; if( FALSE == CreateLightingFBO() ) return FALSE; // Setup the camera view matrix FRMVECTOR3 vCameraPosition = FRMVECTOR3( 0.0f, 4.0f, 10.0f ); FRMVECTOR3 vCameraLookAt = FRMVECTOR3( 0.0f, 0.0f, 0.0f ); FRMVECTOR3 vCameraUp = FRMVECTOR3( 0.0f, 1.0f, 0.0f ); m_matCameraView = FrmMatrixLookAtRH( vCameraPosition, vCameraLookAt, vCameraUp ); // Setup the floor's camera relative model view projection matrix FRMMATRIX4X4 matFloorScale = FrmMatrixScale( 5.0f, 5.0f, 5.0f ); FRMMATRIX4X4 matFloorTranslate = FrmMatrixTranslate( 0.0f, -0.1f, 0.0f ); m_matFloorModel = FrmMatrixMultiply( matFloorScale, matFloorTranslate ); m_matCameraFloorModelView = FrmMatrixMultiply( m_matFloorModel, m_matCameraView ); m_matCameraFloorModelViewProj = FrmMatrixMultiply( m_matCameraFloorModelView, m_matCameraPersp ); m_matCameraFloorNormal = FrmMatrixNormal( m_matCameraFloorModelView ); // Setup the light look at and up vectors m_vLightLookAt = FRMVECTOR3( 0.0f, 0.0f, 0.0f ); m_vLightUp = FRMVECTOR3( 0.0f, 1.0f, 0.0f ); // Create our scale and bias matrix that is used to convert the coordinates of vertices that are multiplied by a // model view projection matrix from the range [-1, 1] to the range [0, 1], so that they can be used for texture lookups m_matScaleAndBias.M( 0, 0 ) = 0.5f; m_matScaleAndBias.M( 0, 1 ) = 0.0f; m_matScaleAndBias.M( 0, 2 ) = 0.0f; m_matScaleAndBias.M( 0, 3 ) = 0.0f; m_matScaleAndBias.M( 1, 0 ) = 0.0f; m_matScaleAndBias.M( 1, 1 ) = -0.5f; m_matScaleAndBias.M( 1, 2 ) = 0.0f; m_matScaleAndBias.M( 1, 3 ) = 0.0f; m_matScaleAndBias.M( 2, 0 ) = 0.0f; m_matScaleAndBias.M( 2, 1 ) = 0.0f; m_matScaleAndBias.M( 2, 2 ) = 0.5f; m_matScaleAndBias.M( 2, 3 ) = 0.0f; m_matScaleAndBias.M( 3, 0 ) = 0.5f; m_matScaleAndBias.M( 3, 1 ) = 0.5f; m_matScaleAndBias.M( 3, 2 ) = 0.5f; m_matScaleAndBias.M( 3, 3 ) = 1.0f; // State blocks D3D11_RASTERIZER_DESC rdesc = CD3D11_RASTERIZER_DESC(D3D11_DEFAULT); rdesc.FrontCounterClockwise = TRUE; // Change the winding direction to match GL D3DDevice()->CreateRasterizerState(&rdesc, &m_DefaultRasterizerState); D3DDeviceContext()->RSSetState(m_DefaultRasterizerState.Get()); rdesc = CD3D11_RASTERIZER_DESC(D3D11_DEFAULT); rdesc.CullMode = D3D11_CULL_NONE; rdesc.DepthBias = 200; rdesc.SlopeScaledDepthBias = 2.0f; D3DDevice()->CreateRasterizerState(&rdesc, &m_PolygonOffsetRasterizerState); D3D11_DEPTH_STENCIL_DESC dsdesc = CD3D11_DEPTH_STENCIL_DESC(D3D11_DEFAULT); dsdesc.DepthFunc = D3D11_COMPARISON_LESS_EQUAL; D3DDevice()->CreateDepthStencilState(&dsdesc, &m_DepthLEqualStencilState); D3DDeviceContext()->OMSetDepthStencilState( m_DepthLEqualStencilState.Get(), 0 ); return TRUE; }
//-------------------------------------------------------------------------------------- // Name: Initialize() // Desc: //-------------------------------------------------------------------------------------- BOOL CSample::Initialize() { // Initialize sample variables // m_nCurMeshIndex = CUBE_MESH; m_vLightPosition = FRMVECTOR3( 0.0f, 8.0f, 0.01f ); // Create the font if( FALSE == m_Font.Create( "Tuffy12.pak" ) ) return FALSE; // Load the packed resources CFrmPackedResourceD3D resource; if( FALSE == resource.LoadFromFile( "Textures.pak" ) ) return FALSE; // Create the logo texture m_pLogoTexture = resource.GetTexture( "Logo" ); // Setup the user interface if( FALSE == m_UserInterface.Initialize( &m_Font, m_strName ) ) return FALSE; m_UserInterface.AddOverlay( m_pLogoTexture, -5, -5, m_pLogoTexture->m_nWidth, m_pLogoTexture->m_nHeight ); m_UserInterface.AddTextString( "Press " FRM_FONT_KEY_0 " for Help", 1.0f, -1.0f, 1.0f ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_0, "Toggle Help" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_1, "Increase Hg param " ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_2, "Decrease Hg param " ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_3, "Increase InscatteringMultiplier param" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_4, "Decrease InscatteringMultiplier param" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_5, "Increase MieMultiplier param" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_6, "Decrease MieMultiplier param" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_7, "Increase Turbitity param" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_8, "Decrease Turbitity param" ); // m_UserInterface.AddHelpKey( FRM_FONT_KEY_9, "Change Shader Hoffman/Preetham" ); // Create a new terrain height field and landscape UINT32 nWidth, nHeight; BYTE* pHeightMapData = LoadTGA( "heights.tga", &nWidth, &nHeight, 3 ); if( NULL == pHeightMapData ) return FALSE; HeightField heightField; heightField.createFromRGBImage ( pHeightMapData , nWidth , nHeight , 2.0 , 40.0 ); delete [] pHeightMapData; BYTE* pTextureData = LoadTGA( "terrain.tga", &nWidth, &nHeight, 4 ); if( NULL == pTextureData ) return FALSE; UINT32 nNormalsWidth, nNormalsHeight; BYTE* pNormalMapData = LoadTGA( "normals.tga", &nNormalsWidth, &nNormalsHeight, 4 ); if( NULL == pNormalMapData ) return FALSE; m_terrain.create( heightField ); mover.SetPosition( FRMVECTOR3( -((float)m_terrain.getTotalWidth())/2.0f, -70.0f, -((float)m_terrain.getTotalHeight())/2.0f)); m_terrain.GenTerrainAndNormalTextures( pTextureData, nWidth, nHeight, pNormalMapData, nNormalsWidth, nNormalsHeight); delete [] pTextureData; delete [] pNormalMapData; //////////////// // Initialize the shaders if( FALSE == InitShaders() ) return FALSE; // Initialize the camera and light perspective matrices FLOAT32 fAspect = (FLOAT32)m_nWidth / (FLOAT32)m_nHeight; m_matCameraPersp = FrmMatrixPerspectiveFovRH( FRM_PI/4.0f, fAspect, 1.0f, 6000.0f ); // m_matLightPersp = FrmMatrixPerspectiveFovRH( FRM_PI/4.0f, 1.0f, 5.0f, 20.0f ); // Initialize the viewport #ifdef TEMP glViewport( 0, 0, m_nWidth, m_nHeight ); #endif // Setup the camera view matrix FRMVECTOR3 vCameraPosition = FRMVECTOR3( 0.0f, 0.0f, 10.0f ); FRMVECTOR3 vCameraLookAt = FRMVECTOR3( 0.0f, 0.0f, 0.0f ); FRMVECTOR3 vCameraUp = FRMVECTOR3( 0.0f, 1.0f, 0.0f ); m_matCameraView = FrmMatrixLookAtRH( vCameraPosition, vCameraLookAt, vCameraUp ); // Setup the light look at and up vectors m_vLightLookAt = FRMVECTOR3( 0.0f, 0.0f, 0.0f ); m_vLightUp = FRMVECTOR3( 0.0f, 1.0f, 0.0f ); // Initial state D3D11_RASTERIZER_DESC rdesc = CD3D11_RASTERIZER_DESC(D3D11_DEFAULT); rdesc.CullMode = D3D11_CULL_NONE; // No culling for the terrain rdesc.FrontCounterClockwise = TRUE; // Change the winding direction to match GL D3DDevice()->CreateRasterizerState(&rdesc, &m_RasterizerState); D3DDeviceContext()->RSSetState(m_RasterizerState.Get()); return TRUE; }
//-------------------------------------------------------------------------------------- // Name: Initialize() // Desc: //-------------------------------------------------------------------------------------- BOOL CSample::Initialize() { // Initialize sample variables m_nCurMeshIndex = CUBE_MESH; m_vLightPosition = FRMVECTOR3( 0.0f, 4.0f, 0.0f ); // Create the font if( FALSE == m_Font.Create( "Tuffy12.pak" ) ) return FALSE; // Load the packed resources CFrmPackedResourceD3D resource; if( FALSE == resource.LoadFromFile( "Textures.pak" ) ) return FALSE; // Create the logo texture m_pLogoTexture = resource.GetTexture( "Logo" ); // Setup the user interface if( FALSE == m_UserInterface.Initialize( &m_Font, m_strName ) ) return FALSE; //hack in a title for first model m_UserInterface.SetHeading("Cook Torrance"); m_UserInterface.AddOverlay( m_pLogoTexture, -5, -5, m_pLogoTexture->m_nWidth, m_pLogoTexture->m_nHeight ); m_UserInterface.AddTextString( "Press " FRM_FONT_KEY_0 " for Help", 1.0f, -1.0f, 1.0f ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_0, "Toggle Help" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_1, "Next Model" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_2, "Next Shader" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_3, "Increase Material Glossinesss" ); m_UserInterface.AddHelpKey( FRM_FONT_KEY_4, "Decrease Material Glossinesss" ); // Load the meshes if( FALSE == m_Meshes[ CUBE_MESH ].Load( "Cube.mesh" ) )// return FALSE; if( FALSE == m_Meshes[ CUBE_MESH ].MakeDrawable() ) return FALSE; if( FALSE == m_Meshes[ SPHERE_MESH ].Load( "Sphere.mesh" ) ) return FALSE; if( FALSE == m_Meshes[ SPHERE_MESH ].MakeDrawable() ) return FALSE; if( FALSE == m_Meshes[ BUMPY_SPHERE_MESH ].Load( "BumpySphere.mesh" ) ) return FALSE; if( FALSE == m_Meshes[ BUMPY_SPHERE_MESH ].MakeDrawable() ) return FALSE; if( FALSE == m_Meshes[ TORUS_MESH ].Load( "Torus.mesh" ) ) return FALSE; if( FALSE == m_Meshes[ TORUS_MESH ].MakeDrawable() ) return FALSE; if( FALSE == m_Meshes[ ROCKET_MESH ].Load( "Rocket.mesh" ) ) return FALSE; if( FALSE == m_Meshes[ ROCKET_MESH ].MakeDrawable() ) return FALSE; //////////// // Initialize the shaders if( FALSE == InitShaders() ) return FALSE; // Initialize the camera and light perspective matrices FLOAT32 fAspect = (FLOAT32)m_nWidth / (FLOAT32)m_nHeight; m_matCameraPersp = FrmMatrixPerspectiveFovRH( FRM_PI/4.0f, fAspect, 1.0f, 100.0f ); m_matLightPersp = FrmMatrixPerspectiveFovRH( FRM_PI/4.0f, 1.0f, 5.0f, 20.0f ); // Setup the camera view matrix FRMVECTOR3 vCameraPosition = FRMVECTOR3( 0.0f, 0.0f, 10.0f ); FRMVECTOR3 vCameraLookAt = FRMVECTOR3( 0.0f, 0.0f, 0.0f ); FRMVECTOR3 vCameraUp = FRMVECTOR3( 0.0f, 1.0f, 0.0f ); m_matCameraView = FrmMatrixLookAtRH( vCameraPosition, vCameraLookAt, vCameraUp ); // Setup the light look at and up vectors m_vLightLookAt = FRMVECTOR3( 0.0f, 0.0f, 0.0f ); m_vLightUp = FRMVECTOR3( 0.0f, 1.0f, 0.0f ); // Initial state D3D11_RASTERIZER_DESC rdesc = CD3D11_RASTERIZER_DESC(D3D11_DEFAULT); rdesc.FrontCounterClockwise = TRUE; // Change the winding direction to match GL D3DDevice()->CreateRasterizerState(&rdesc, &m_RasterizerState); D3DDeviceContext()->RSSetState(m_RasterizerState.Get()); return TRUE; }