Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
		}
	}
}
Esempio n. 3
0
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_
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
//--------------------------------------------------------------------------------------
// 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;
}
Esempio n. 7
0
//--------------------------------------------------------------------------------------
// 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;
}
Esempio n. 8
0
//--------------------------------------------------------------------------------------
// 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;
}
Esempio n. 9
0
//--------------------------------------------------------------------------------------
// 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;
}