//----------------------------------------------------------------------------- // 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; }
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; }
//-------------------------------------------------------------------------------------- // 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; }