Ejemplo n.º 1
0
    //-----------------------------------------------------------------------------
    //  CreateDefaultObjects
    //  Creates the default objects
    //-----------------------------------------------------------------------------
    void CRenderer::CreateDefaultObjects( void )
    {
        // Texture
        m_nDefaultTexture = LoadTexture2D( "Assets/Textures/DefaultTexture.png" );
        
        // Default mesh
        m_nDefaultMesh = CreateMesh();

        // debug sphere
        m_nSphereMesh = LoadMesh( "Assets/meshes/sphere.mesh" );

        // debug box
        m_nDebugBox = CreateDynamicBox();
        
        //////////////////////////////////////////
        //  Load Shaders
        LoadShaders();

        // a vertex shader for drawing lines        
        VPosColor pLineVertices[] =
        {
            { RVector3(  0.0f,  0.0f,  0.0f ), RVector4( 1.0f, 1.0f, 1.0f, 1.0f ) },
            { RVector3(  1.0f,  1.0f,  1.0f ), RVector4( 1.0f, 1.0f, 1.0f, 1.0f ) },
        };
        m_pLineBuffer = m_pDevice->CreateVertexBuffer( sizeof( pLineVertices ), pLineVertices );

        // Set the defaults
        SetVertexShader( eVS3DPosNorTexStd );
        SetPixelShader( ePS3DStd );
        SetSamplerState( eSamplerLinear );
        m_pDevice->SetPrimitiveType( GFX_PRIMITIVE_TRIANGLELIST );


        static float Vtx[] = 
        { 
            -1.0f, -1.0f, 
            -1.0f,  1.0f, 
             1.0f,  1.0f, 
             1.0f, -1.0f, 
        };
        static uint16 Idx[] = 
        { 
            0, 1, 2, 
            0, 2, 3,
        };

        m_pFSRectVB = m_pDevice->CreateVertexBuffer( sizeof( Vtx ), Vtx );
        m_pFSRectIB = m_pDevice->CreateIndexBuffer ( sizeof( Idx ), Idx );
    }
T* ResourceManager::LoadResource(std::string filepath)
{
	T* ret;
	// Checks if the resource we're looking for
	if (ret = dynamic_cast<T*>(CheckResourceCollection(filepath)))
	{		
		dynamic_cast<Resource*>(ret)->IncreaseReferenceCount();
		return ret;
	}

	// Checks the file extension to see if the file is of correct type
	uint index = (uint)filepath.find_last_of('.');
	std::string ext = filepath.substr(index, filepath.length() - 1);

	// If the given extension is not a valid key...
	if (typemap.find(ext) == typemap.end())
	{
#ifdef DEBUG
		Debug::LogError("[ResourceManager] File extension is invalid.");
#endif
		return 0;
	}

	// Call the appropriate loading function
	if (typemap[ext] == "Texture2D")
	{
		ret = dynamic_cast<T*>(LoadTexture2D(filepath));
	}
	else if (typemap[ext] == "Mesh")
	{
		ret = dynamic_cast<T*>(LoadMesh(filepath));
	}
	else
	{
#ifdef DEBUG
		Debug::LogError("[ResourceManager] Resource type not initialized in typemap");
#endif
		return 0;
	}

#ifdef DEBUG
	if (!ret)
	{
		Debug::LogError("[ResourceManager] File could not be loaded.");
	}
#endif
	return ret;
}
Ejemplo n.º 3
0
cTextureDummy* cTextureLoadFunct::LoadLibraryObject(std::fstream &f,std::string fname,int &m_currentId,std::map<std::string,int> &m_MapFilename,std::map<int, cTextureDummy *> &m_Map,unsigned int mod)
{
	cTextureDummy *dumy= new cTextureDummy();
	if(mod==0)
	{
		dumy->tex=LoadTexture2D(fname.c_str());
	}
	else
	{
		dumy->tex=LoadTextureCube(f);
	}
	pair<std::string,int> t(fname,m_currentId);
	m_MapFilename.insert(t);
	pair <int,cTextureDummy*> e(m_currentId,dumy);
	m_Map.insert(e);
	m_currentId++;

	return dumy;
}
Ejemplo n.º 4
0
//--------------------------------------------------------------------------------------
// Create any D3D11 resources that aren't dependent on the back buffer
//--------------------------------------------------------------------------------------
HRESULT PerlinFire::OnD3D11CreateDevice( ID3D11Device * pd3dDevice)
{
	HRESULT hr;
	
	m_time = 0.0f;
	FirePosition = D3DXVECTOR3(0,0,0);
	const float lengthOfSide = 0.5f;
	//const float myparameter = 1.0f;
	SimpleVertex vertices[] =
	{
		{ D3DXVECTOR3( -lengthOfSide, lengthOfSide, -lengthOfSide ) ,D3DXVECTOR3(0,0,0),D3DXVECTOR2(0,0)},
		{ D3DXVECTOR3( lengthOfSide, lengthOfSide, -lengthOfSide ) ,D3DXVECTOR3(0,0,0),D3DXVECTOR2(0,0)},
		{ D3DXVECTOR3( lengthOfSide, lengthOfSide, lengthOfSide ) ,D3DXVECTOR3(0,0,0),D3DXVECTOR2(0,0)},
		{ D3DXVECTOR3( -lengthOfSide, lengthOfSide, lengthOfSide ) ,D3DXVECTOR3(0,0,0),D3DXVECTOR2(0,0)},
		{ D3DXVECTOR3( -lengthOfSide, -lengthOfSide, -lengthOfSide ) ,D3DXVECTOR3(0,0,0),D3DXVECTOR2(0,0)},
		{ D3DXVECTOR3( lengthOfSide, -lengthOfSide, -lengthOfSide ) ,D3DXVECTOR3(0,0,0),D3DXVECTOR2(0,0)},
		{ D3DXVECTOR3( lengthOfSide, -lengthOfSide, lengthOfSide ) ,D3DXVECTOR3(0,0,0),D3DXVECTOR2(0,0)},
		{ D3DXVECTOR3( -lengthOfSide, -lengthOfSide, lengthOfSide ) ,D3DXVECTOR3(0,0,0),D3DXVECTOR2(0,0)},
	};
	D3D11_BUFFER_DESC bd;
	ZeroMemory( &bd, sizeof(bd) );
	bd.Usage = D3D11_USAGE_DEFAULT;
	bd.ByteWidth = sizeof( SimpleVertex ) * 8;
	bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
	bd.CPUAccessFlags = 0;
	D3D11_SUBRESOURCE_DATA InitData;
	ZeroMemory( &InitData, sizeof(InitData) );
	InitData.pSysMem = vertices;
	V_RETURN(pd3dDevice->CreateBuffer( &bd, &InitData, &g_pBuffer ));

	WORD indices[] =
	{
		3,1,0,
		2,1,3,

		0,5,4,
		1,5,0,

		3,4,7,
		0,4,3,

		1,6,5,
		2,6,1,

		2,7,6,
		3,7,2,

		6,4,5,
		7,4,6,
	};
	bd.Usage = D3D11_USAGE_DEFAULT;
	bd.ByteWidth = sizeof( WORD ) * 36;        // 36 vertices needed for 12 triangles in a triangle list
	bd.BindFlags = D3D11_BIND_INDEX_BUFFER;
	bd.CPUAccessFlags = 0;
	InitData.pSysMem = indices;
	V_RETURN(pd3dDevice->CreateBuffer( &bd, &InitData, &g_pIndex ));

	V_RETURN(LoadEffectFromFile(pd3dDevice,L"PerlinFire.hlsl",&g_pEffect));

	// Obtain techniques
	g_pPerlinFire3D = g_pEffect->GetTechniqueByName( "PerlinFire3D" );
	g_pPerlinFire3DFlow = g_pEffect->GetTechniqueByName( "PerlinFire3DFlow" );
	g_pPerlinFire4D = g_pEffect->GetTechniqueByName( "PerlinFire4D" );
	g_pGeometryTechnique = g_pEffect->GetTechniqueByName( "RenderGeometry" );
	g_pGeometryTechniqueAux = g_pEffect->GetTechniqueByName( "RenderGeometryAux" );

	g_pCurrentTechnique = g_pPerlinFire4D;

	// Obtain texture variables

	g_ptxScreenDepth = g_pEffect->GetVariableByName( "ScreenDepth" )->AsShaderResource();
	g_ptxSceneTexture = g_pEffect->GetVariableByName( "SceneTexture" )->AsShaderResource();
	g_ptxFireTex = g_pEffect->GetVariableByName( "FireShape" )->AsShaderResource();
	g_ptxJitterTex = g_pEffect->GetVariableByName( "JitterTexture" )->AsShaderResource();
	g_ptxPermTex = g_pEffect->GetVariableByName( "PermTexture" )->AsShaderResource();
	g_pCubeMapTextureVariable = g_pEffect->GetVariableByName( "ShadowMap" )->AsShaderResource();

	// Obtain miscellaneous variables

	g_pmCubeViewMatrixVariable = g_pEffect->GetVariableByName( "CubeViewMatrices" )->AsMatrix();
	g_pmCubeProjMatrixVariable = g_pEffect->GetVariableByName( "CubeProjectionMatrix" )->AsMatrix();
	g_pmWorldViewProj = g_pEffect->GetVariableByName( "WorldViewProj" )->AsMatrix();
	g_pvEyePos = g_pEffect->GetVariableByName( "EyePos" )->AsVector();
	g_pvLightPos = g_pEffect->GetVariableByName( "LightPos" )->AsVector();
	g_pfLightIntensity = g_pEffect->GetVariableByName( "LightIntensity" )->AsScalar();
	g_pfStepSize = g_pEffect->GetVariableByName( "StepSize" )->AsScalar();
	g_pfTime = g_pEffect->GetVariableByName( "Time" )->AsScalar();
	g_pfNoiseScale = g_pEffect->GetVariableByName( "NoiseScale" )->AsScalar();
	g_pfRoughness = g_pEffect->GetVariableByName( "Roughness" )->AsScalar();
	g_pfFrequencyWeights = g_pEffect->GetVariableByName( "FrequencyWeights" )->AsScalar();
	g_pbJitter = g_pEffect->GetVariableByName( "bJitter" )->AsScalar();
	g_piCubeMapFace = g_pEffect->GetVariableByName( "CubeMapFace" )->AsScalar();

	// Set input layouts

	D3DX11_PASS_DESC PassDesc;

	D3D11_INPUT_ELEMENT_DESC geometryLayout [] = {
		{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
		{ "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
		{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 }
	};

	unsigned int numElements = sizeof (geometryLayout) / sizeof (geometryLayout [0]);

	g_pGeometryTechnique->GetPassByIndex(0)->GetDesc( & PassDesc );
	V_RETURN(pd3dDevice->CreateInputLayout( geometryLayout, numElements, PassDesc.pIAInputSignature,	PassDesc.IAInputSignatureSize, & g_pGeometryVertexLayout ));

	// Load textures
	LoadTexture2D( pd3dDevice, L"Resource\\FireTexture\\Firetex.dds", & g_pFireTexture, & g_pFireTextureSRV );

	// Create noise texture
	// Fill the texture with random numbers from 0 to 256
	srand( GetTickCount() );

	BYTE data[256 * 256];
	for (int i = 0; i < 256 * 256; i++)
	{
		data[i] = (unsigned char) (rand () % 256);
	}

	D3D11_TEXTURE2D_DESC desc;
	desc.Width = 256;
	desc.Height = 256;
	desc.MipLevels = 1;
	desc.ArraySize = 1;
	desc.Format = DXGI_FORMAT_R8_TYPELESS;
	desc.SampleDesc.Count = 1;
	desc.SampleDesc.Quality = 0;
	desc.Usage = D3D11_USAGE_IMMUTABLE;
	desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
	desc.CPUAccessFlags = 0;
	desc.MiscFlags = 0;

	D3D11_SUBRESOURCE_DATA dataDesc;
	dataDesc.pSysMem = data;
	dataDesc.SysMemPitch = 256;

	V_RETURN(pd3dDevice->CreateTexture2D(&desc, &dataDesc, &g_pNoiseTexture));

	// Create the shader resource view for jittering
	D3D11_SHADER_RESOURCE_VIEW_DESC descSRV;

	ZeroMemory( &descSRV, sizeof(descSRV) );
	descSRV.Format = DXGI_FORMAT_R8_UNORM;
	descSRV.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
	descSRV.Texture2D.MipLevels = 1;
	descSRV.Texture2D.MostDetailedMip = 0;

	V_RETURN(pd3dDevice->CreateShaderResourceView( g_pNoiseTexture, &descSRV, &g_pJitterTextureSRV ));

	// Create the shader resource view for permutation
	descSRV.Format = DXGI_FORMAT_R8_UINT;

	V_RETURN(pd3dDevice->CreateShaderResourceView( g_pNoiseTexture, &descSRV, &g_pPermTextureSRV ));

	V_RETURN(g_ptxFireTex -> SetResource (g_pFireTextureSRV));
	V_RETURN(g_ptxJitterTex -> SetResource (g_pJitterTextureSRV));
	V_RETURN(g_ptxPermTex -> SetResource (g_pPermTextureSRV));

	//---------------------------------
	//resize swap chain
	//---------------------------------

	//----------------------------------
	// frame move
	//----------------------------------

	return S_OK;
}