bool TextureDemo::LoadContent( ) { ID3DBlob * vsBuffer = 0; bool CompileResult = CompileD3DShader( "solidGreenColor.fx" , "VS_Main" , "vs_4_0" , &vsBuffer ); if( CompileResult == false ) { MessageBox( 0 , "¼ÓÔض¥µã×ÅÉ«Æ÷ʧ°Ü£¡" , "±àÒë´íÎó£¡" , MB_OK ); return false; } HRESULT d3dResult; d3dResult = d3dDevice_ ->CreateVertexShader( vsBuffer ->GetBufferPointer() , vsBuffer ->GetBufferSize() , 0 , &solidColorVS_ ); if( FAILED( d3dResult )) { if( vsBuffer ) { vsBuffer ->Release(); } return false; } //ÓësolidGreenColor.fx¶ÔÓ¦ D3D11_INPUT_ELEMENT_DESC solidColorLayer[ ]= { { "POSITION" , 0 , DXGI_FORMAT_R32G32B32_FLOAT , 0 , 0 , D3D11_INPUT_PER_VERTEX_DATA , 0 } , { "TEXCOORD" , 1 , DXGI_FORMAT_R32G32_FLOAT , 0 , 12 , D3D11_INPUT_PER_VERTEX_DATA , 0 } }; unsigned int totalLayerElements = ARRAYSIZE( solidColorLayer ); d3dResult = d3dDevice_ ->CreateInputLayout( solidColorLayer , totalLayerElements , vsBuffer ->GetBufferPointer() , vsBuffer ->GetBufferSize() , &inputLayer_ ); vsBuffer->Release( ); ID3DBlob * psBuffer; CompileResult = CompileD3DShader( "solidGreenColor.fx" , "PS_Main" , "ps_4_0" , &psBuffer ); if( CompileResult == false ) { MessageBox( 0 , "¼ÓÔØÏñËØ×ÅÉ«Æ÷ʧ°Ü£¡" , "±àÒë´íÎó£¡" , MB_OK ); } d3dResult = d3dDevice_ ->CreatePixelShader( psBuffer ->GetBufferPointer() , psBuffer ->GetBufferSize() , 0 , &solidColorPS_ ); if( FAILED( d3dResult ) ) { return false; } VertexPos vertices[ ]= { { XMFLOAT3( 1.0f , 1.0f , 1.0f ) , XMFLOAT2( 1.0f , 1.0f )} , { XMFLOAT3( 1.0f , -1.0f , 1.0f ) , XMFLOAT2( 1.0f , 0.0f )} , { XMFLOAT3( -1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 0.0f )} , { XMFLOAT3( -1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 0.0f )} , { XMFLOAT3( -1.0f , 1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f )} , { XMFLOAT3( 1.0f , 1.0f , 1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , }; D3D11_BUFFER_DESC vertexDesc; ZeroMemory( &vertexDesc , sizeof( vertexDesc )); vertexDesc.Usage = D3D11_USAGE_DEFAULT; vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexDesc.ByteWidth = sizeof( VertexPos ) * 6; D3D11_SUBRESOURCE_DATA resourceData; ZeroMemory( &resourceData , sizeof( resourceData )); resourceData.pSysMem = vertices; d3dResult = d3dDevice_ ->CreateBuffer( &vertexDesc , &resourceData , &vertexBuffer_ ); if( FAILED( d3dResult )) { return false; } d3dResult = D3DX11CreateShaderResourceViewFromFile( d3dDevice_ , "yosuga.jpg" , 0 , 0 , &colorMap_ , 0 ); if( FAILED( d3dResult )) { DXTRACE_MSG( "¼ÓÔØÎÆÀíͼÏñʧ°Ü£¡" ); return false; } D3D11_SAMPLER_DESC colorMapDesc; ZeroMemory( &colorMapDesc , sizeof( colorMapDesc )); colorMapDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; colorMapDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; colorMapDesc.MaxLOD = D3D11_FLOAT32_MAX; d3dResult = d3dDevice_ ->CreateSamplerState( &colorMapDesc , &colorMapSample_ ); if( FAILED( d3dResult )) { DXTRACE_MSG( "Failed to create color map sampler state!" ); return false; } return true; }
bool ColorInversionDemo::LoadContent() { ID3DBlob * buffer = 0; //ColorInversionDemo //bool compileResult = CompileD3DShader( "ColorInversion.fx" , 0 , "fx_5_0" , &buffer ); //ColorShiftingDemo bool compileResult = CompileD3DShader( "ColorShift.fx" , 0 , "fx_5_0" , &buffer ); if( compileResult == false ) { DXTRACE_MSG( "±àÒëeffect shader ʧ°Ü£¡" ); return false; } HRESULT d3dResult ; d3dResult = D3DX11CreateEffectFromMemory( buffer ->GetBufferPointer() , buffer ->GetBufferSize() , 0 , d3dDevice_ , &effect_ ); if( FAILED( d3dResult )) { DXTRACE_MSG( "´´½¨effect shader ʧ°Ü£¡" ); if( buffer ) { buffer ->Release(); } return false; } D3D11_INPUT_ELEMENT_DESC solidColorLayout[ ] = { { "POSITION" , 0 , DXGI_FORMAT_R32G32B32_FLOAT , 0 , 0 , D3D11_INPUT_PER_VERTEX_DATA , 0 } , { "TEXTURE" , 0 , DXGI_FORMAT_R32G32_FLOAT , 0 , 12 , D3D11_INPUT_PER_VERTEX_DATA , 0 } }; unsigned int totalLayoutElements = ARRAYSIZE( solidColorLayout ); ID3DX11EffectTechnique * colorInvTechnique; /*** //ColorInversionDemo colorInvTechnique = effect_ ->GetTechniqueByName( "ColorInversion" ); ID3DX11EffectPass * effectPass = colorInvTechnique ->GetPassByIndex( 0 ); */ colorInvTechnique = effect_ ->GetTechniqueByName( "ColorShift" ); ID3DX11EffectPass * effectPass = colorInvTechnique ->GetPassByIndex( 0 ); D3DX11_PASS_SHADER_DESC passDesc; D3DX11_EFFECT_SHADER_DESC shaderDesc; effectPass->GetVertexShaderDesc( &passDesc ); passDesc.pShaderVariable ->GetShaderDesc( passDesc.ShaderIndex , &shaderDesc ); d3dResult = d3dDevice_ ->CreateInputLayout( solidColorLayout , totalLayoutElements , shaderDesc.pBytecode , shaderDesc.BytecodeLength , &inputLayout_ ); buffer ->Release(); if( FAILED( d3dResult )) { DXTRACE_MSG( "´´½¨ÊäÈë²ãʧ°Ü£¡" ); return false; } VertexPos vertices[ ] = { { XMFLOAT3( -1.0f , 1.0f , -1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , 1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , 1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , -1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , 1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( -1.0f , -1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( -1.0f , 1.0f , -1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , 1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( 1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , -1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( 1.0f , 1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , -1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , -1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , 1.0f , -1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , 1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , 1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , 1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } }; D3D11_BUFFER_DESC vertexDesc; ZeroMemory( &vertexDesc , sizeof( vertexDesc )); vertexDesc.Usage = D3D11_USAGE_DEFAULT; vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexDesc.ByteWidth = sizeof( VertexPos ) * 24; D3D11_SUBRESOURCE_DATA resourceData; ZeroMemory( &resourceData , sizeof( resourceData )); resourceData.pSysMem = vertices; d3dResult = d3dDevice_ ->CreateBuffer( &vertexDesc , &resourceData , &vertexBuffer_ ); if( FAILED( d3dResult )) { DXTRACE_MSG( "´´½¨¶¥µã»º³åÇøʧ°Ü£¡" ); return false; } WORD indices[ ] = { 3 , 1 , 0 , 2 , 1 , 3 , 6 , 4 , 5 , 7 , 4 , 6 , 11 , 9 , 8 , 10 , 9 , 11 , 14 , 12 , 13 , 15 , 12 , 14 , 19 , 17 , 16 , 18 , 17 , 19 , 22 , 20 , 21 ,23 , 20 , 22 }; D3D11_BUFFER_DESC indexDesc; ZeroMemory( &indexDesc , sizeof( indexDesc )); indexDesc.Usage = D3D11_USAGE_DEFAULT ; indexDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; indexDesc.ByteWidth = sizeof( WORD ) * 36 ; indexDesc.CPUAccessFlags = 0; resourceData.pSysMem = indices; d3dResult =d3dDevice_ ->CreateBuffer( &indexDesc , &resourceData , &indexBuffer_ ); if( FAILED( d3dResult )) { DXTRACE_MSG( "´´½¨Ë÷Òý»º³åÇøʧ°Ü£¡" ); return false; } d3dResult = D3DX11CreateShaderResourceViewFromFile( d3dDevice_ , "decal.dds" , 0 , 0 , &colorMap_ , 0 ); if( FAILED( d3dResult )) { DXTRACE_MSG( "¼ÓÔØÎÆÀíͼÏñʧ°Ü£¡" ); return false; } D3D11_SAMPLER_DESC colorMapDesc; ZeroMemory( &colorMapDesc , sizeof( colorMapDesc )); colorMapDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; colorMapDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; colorMapDesc.MaxLOD = D3D11_FLOAT32_MAX; d3dResult = d3dDevice_ ->CreateSamplerState( &colorMapDesc ,&colorMapSampler_ ); if( FAILED( d3dResult )) { DXTRACE_MSG( "´´½¨²ÉÑùÆ÷ʧ°Ü£¡" ); return false; } viewMatrix_ = XMMatrixIdentity(); projMatrix_ = XMMatrixPerspectiveFovLH( XM_PIDIV4 , 800.0f / 600.0f , 0.01f , 100.0f ); return true; }
bool EndOfDirectX11::LoadContent() { HRESULT result = 0; ID3DBlob* buffer = 0; ID3DBlob* vsBuffer = 0; ID3DBlob* psBuffer = 0; bool compileResult = CompileD3DShader( "MultiTexture.fx", 0, "fx_5_0", &buffer ); if( compileResult == false ) { DXTRACE_MSG( "Error compiling the effect shader!" ); return false; } result = D3DX11CreateEffectFromMemory( buffer->GetBufferPointer( ), buffer->GetBufferSize( ), 0, d3dDevice_, &effect_ ); if( FAILED(result) ) { DXTRACE_MSG( "error creating the effect shader" ); if( buffer ) { buffer->Release(); } return false; } buffer->Release(); D3D11_INPUT_ELEMENT_DESC solidColorLayout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 } }; unsigned int totalLayoutElements = ARRAYSIZE( solidColorLayout ); ID3DX11EffectTechnique * colorInvTechnique = 0; colorInvTechnique = effect_->GetTechniqueByName( "MultiTexture" ); ID3DX11EffectPass * effectPass = colorInvTechnique->GetPassByIndex( 0 ); D3DX11_PASS_SHADER_DESC passDesc; D3DX11_EFFECT_SHADER_DESC shaderDesc; effectPass->GetVertexShaderDesc( &passDesc ); passDesc.pShaderVariable->GetShaderDesc( passDesc.ShaderIndex, &shaderDesc ); result = d3dDevice_->CreateInputLayout( solidColorLayout, totalLayoutElements, shaderDesc.pBytecode, shaderDesc.BytecodeLength, &inputLayout_ ); if( FAILED( result ) ) { DXTRACE_MSG( "Error creating the input layout" ); return false; } VertexPos vertices[] = { { XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) }, { XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) }, { XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) }, { XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) }, { XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) }, { XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) }, { XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) }, { XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) }, { XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) }, { XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) }, { XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) }, { XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) }, { XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) }, { XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) }, { XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) }, { XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) }, { XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) }, { XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) }, { XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) }, { XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 1.0f ) }, { XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) }, { XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 1.0f, 0.0f ) }, { XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) }, { XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) }, }; D3D11_BUFFER_DESC vertexDesc; ZeroMemory( &vertexDesc, sizeof( vertexDesc ) ); vertexDesc.Usage = D3D11_USAGE_DEFAULT; vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexDesc.ByteWidth = sizeof( VertexPos ) * 24; D3D11_SUBRESOURCE_DATA resourceData; ZeroMemory( &resourceData, sizeof( resourceData ) ); resourceData.pSysMem = vertices; result = d3dDevice_->CreateBuffer( &vertexDesc, &resourceData, &vertexBuffer_ ); if( FAILED( result ) ) { DXTRACE_MSG( "Failed to create vertex buffer!" ); return false; } WORD indices[] = { 3, 1, 0, 2, 1, 3, 6, 4, 5, 7, 4, 6, 11, 9, 8, 10, 9, 11, 14, 12, 13, 15, 12, 14, 19, 17, 16, 18, 17, 19, 22, 20, 21, 23, 20, 22 }; D3D11_BUFFER_DESC indexDesc; ZeroMemory( &indexDesc, sizeof( indexDesc ) ); indexDesc.Usage = D3D11_USAGE_DEFAULT; indexDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; indexDesc.ByteWidth = sizeof( WORD ) * 36; indexDesc.CPUAccessFlags = 0; resourceData.pSysMem = indices; result = d3dDevice_->CreateBuffer( &indexDesc, &resourceData, &indexBuffer_ ); if( FAILED( result ) ) { DXTRACE_MSG( "Error in creating index buffer" ); return false; } result = D3DX11CreateShaderResourceViewFromFile( d3dDevice_, "decal.dds", 0, 0, &colorMap_, 0 ); if( FAILED( result ) ) { DXTRACE_MSG( "Error in creating ShaderResource by decal.dds" ); return false; } result = D3DX11CreateShaderResourceViewFromFile( d3dDevice_, "decal2.dds", 0, 0, &secondMap_, 0 ); if( FAILED( result ) ) { DXTRACE_MSG( "Error in creating shader resource by decal2.dds" ); return false; } D3D11_SAMPLER_DESC colorMapDesc; ZeroMemory( &colorMapDesc, sizeof( colorMapDesc ) ); colorMapDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; colorMapDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; colorMapDesc.MaxLOD = D3D11_FLOAT32_MAX; result = d3dDevice_->CreateSamplerState( &colorMapDesc, &samplerState_ ); if( FAILED(result) ) { return false; } D3D11_BUFFER_DESC constDesc; ZeroMemory( &constDesc, sizeof( constDesc ) ); constDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; constDesc.ByteWidth = sizeof( XMMATRIX ); constDesc.Usage = D3D11_USAGE_DEFAULT; result = d3dDevice_->CreateBuffer( &constDesc, 0, &worldCB_ ); if( FAILED( result ) ) { DXTRACE_MSG( "Error in creating world constant buffer" ); return false; } result = d3dDevice_->CreateBuffer( &constDesc, 0, &viewCB_ ); if( FAILED( result ) ) { DXTRACE_MSG( "Error in creating view constant buffer" ); return false; } result = d3dDevice_->CreateBuffer( &constDesc, 0, &projCB_ ); if( FAILED( result ) ) { DXTRACE_MSG( "Error in creating project constant buffer" ); return false; } viewMatrix_ = XMMatrixIdentity(); projMatrix_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, 800.0f / 600.0f, 0.01f, 100.0f ); XMMATRIX rotationMat = XMMatrixRotationY( XM_PIDIV4 * 0.5 ); XMMATRIX translationMat = XMMatrixTranslation( 0.0f, 0.0f, 6.0f ); worldMat_ = rotationMat * translationMat; return true; }
bool EngineBase::LoadContent() { //load models vector<VertexPos> vertexbuffer; vector<int> indexbuffer; vector<SubSet> subsets; if (!SpriteModel::instance()->load_model("rescs/Smodel.in", vertexbuffer, indexbuffer, subsets)) { MessageBox(0, "error loading models!", 0, 0); return false; } //int direct3d device ID3DBlob* vsBuffer = 0; bool compileResult = CompileD3DShader(L"rescs/TextureMap.fx", "VS_Main", "vs_4_0", &vsBuffer); if (compileResult == false) { MessageBox(0, "Error compiling the vertex shader!", 0, 0); return false; } HRESULT d3dResult; d3dResult = d3dDevice_->CreateVertexShader(vsBuffer->GetBufferPointer(), vsBuffer->GetBufferSize(), 0, &solidColorVS_); if (FAILED(d3dResult)) { MessageBox(0, "Error creating the vertex shader!", 0, 0); if (vsBuffer) vsBuffer->Release(); return false; } D3D11_INPUT_ELEMENT_DESC solidColorLayout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 } }; int totalLayoutElements = ARRAYSIZE(solidColorLayout); d3dResult = d3dDevice_->CreateInputLayout(solidColorLayout, totalLayoutElements, vsBuffer->GetBufferPointer(), vsBuffer->GetBufferSize(), &inputLayout_); vsBuffer->Release(); if (FAILED(d3dResult)) { MessageBox(0, "Error creating the input layout!", 0, 0); return false; } ID3DBlob* psBuffer = 0; compileResult = CompileD3DShader(L"rescs/TextureMap.fx", "PS_Main", "ps_4_0", &psBuffer); if (compileResult == false) { MessageBox(0, "Error compiling pixel shader!", 0, 0); return false; } d3dResult = d3dDevice_->CreatePixelShader(psBuffer->GetBufferPointer(), psBuffer->GetBufferSize(), 0, &solidColorPS_); psBuffer->Release(); if (FAILED(d3dResult)) { MessageBox(0, "Error creating pixel shader!", 0, 0); return false; } d3dResult = CreateDDSTextureFromFile(d3dDevice_, L"rescs/resc.dds", nullptr, &colorMap_); if (FAILED(d3dResult)) { MessageBox(0, "Failed to load the texture image!", 0, 0); return false; } D3D11_SAMPLER_DESC colorMapDesc; ZeroMemory(&colorMapDesc, sizeof(colorMapDesc)); colorMapDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; colorMapDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; colorMapDesc.MaxLOD = D3D11_FLOAT32_MAX; d3dResult = d3dDevice_->CreateSamplerState(&colorMapDesc, &colorMapSampler_); if (FAILED(d3dResult)) { MessageBox(0, "Failed to create color map sampler state!", 0, 0); return false; } D3D11_BUFFER_DESC vertexDesc; ZeroMemory(&vertexDesc, sizeof(vertexDesc)); vertexDesc.Usage = D3D11_USAGE_DEFAULT; vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexDesc.ByteWidth = sizeof(VertexPos) * (int)vertexbuffer.size(); D3D11_SUBRESOURCE_DATA resourceData; ZeroMemory(&resourceData, sizeof(resourceData)); resourceData.pSysMem = &vertexbuffer[0]; d3dResult = d3dDevice_->CreateBuffer(&vertexDesc, &resourceData, &vertexBuffer_); if (FAILED(d3dResult)) { MessageBox(0, "Failed to create vertex buffer!", 0, 0); return false; } vertexDesc.Usage = D3D11_USAGE_DEFAULT; vertexDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; vertexDesc.ByteWidth = sizeof(int) * (int)indexbuffer.size(); vertexDesc.CPUAccessFlags = 0; resourceData.pSysMem = &indexbuffer[0]; d3dResult = d3dDevice_->CreateBuffer(&vertexDesc, &resourceData, &indexBuffer_); if (FAILED(d3dResult)) { MessageBox(0, "Failed to create index buffer!", 0, 0); return false; } //create constant buffer D3D11_BUFFER_DESC constDesc; ZeroMemory(&constDesc, sizeof(constDesc)); constDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; constDesc.ByteWidth = sizeof(XMMATRIX); constDesc.Usage = D3D11_USAGE_DEFAULT; d3dResult = d3dDevice_->CreateBuffer(&constDesc, 0, &mvpCB_); if (FAILED(d3dResult)) { return false; } constDesc.ByteWidth = sizeof(tex_co_trans); d3dResult = d3dDevice_->CreateBuffer(&constDesc, 0, &texTrans_); sets = subsets; XMMATRIX view = XMMatrixIdentity(); XMMATRIX projection = XMMatrixOrthographicOffCenterLH(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f); vpMatrix_ = XMMatrixMultiply(view, projection); D3D11_BLEND_DESC blendDesc; ZeroMemory(&blendDesc, sizeof(blendDesc)); blendDesc.RenderTarget[0].BlendEnable = TRUE; blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ZERO; blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; blendDesc.RenderTarget[0].RenderTargetWriteMask = 0x0F; float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; d3dDevice_->CreateBlendState(&blendDesc, &alphaBlendState_); d3dContext_->OMSetBlendState(alphaBlendState_, blendFactor, 0xFFFFFFFF); //set states UINT stride = sizeof(VertexPos); UINT offset = 0; d3dContext_->IASetInputLayout(inputLayout_); d3dContext_->IASetVertexBuffers(0, 1, &vertexBuffer_, &stride, &offset); d3dContext_->IASetIndexBuffer(indexBuffer_, DXGI_FORMAT_R32_UINT, 0); d3dContext_->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); d3dContext_->VSSetShader(solidColorVS_, 0, 0); d3dContext_->PSSetShader(solidColorPS_, 0, 0); d3dContext_->PSSetShaderResources(0, 1, &colorMap_); d3dContext_->PSSetSamplers(0, 1, &colorMapSampler_); return true; }
bool Graphics::CreateDefaultShader() { HRESULT r = 0; ID3DBlob* vsBuffer = 0; ID3DBlob* buffer = 0; ID3DBlob* Errors = 0; DWORD shaderFlags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG; bool b = CompileD3DShader("..\\te010\\DefaultShader.fx", 0, "fx_5_0", &buffer); if (!b) { if (buffer) { buffer->Release(); } NAIA_FATAL("Unnable to compile default shader"); } r = D3DX11CreateEffectFromMemory(buffer->GetBufferPointer(), buffer->GetBufferSize(), 0 , m_Device, &m_Effect); if (FAILED(r)) { NAIA_FATAL("Unnable to create effect"); } m_Technique = m_Effect->GetTechniqueByName("DefaultTechnique"); if (!m_Technique) { NAIA_FATAL("Can not find DefaultTechnique in default shader"); } D3D11_INPUT_ELEMENT_DESC defaultLayout[] = { {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"TEXCOORD", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0} }; unsigned int totalLayoutElements = ARRAYSIZE(defaultLayout); D3DX11_PASS_DESC descPASS; m_Technique->GetPassByIndex(0)->GetDesc(&descPASS); r = m_Device->CreateInputLayout(defaultLayout, totalLayoutElements, descPASS.pIAInputSignature, descPASS.IAInputSignatureSize, &m_InputLayout); if (FAILED(r)) { NAIA_FATAL("Failed to create input layout"); } m_Context->IASetInputLayout(m_InputLayout); Mat4x4 world = Mat4x4::g_Identity; SetWorldMatrix(world); Mat4x4 view = Mat4x4::g_Identity; Vec3 eye(6.0f, 6.0f, 6.0f); Vec3 at(0.f,0.f,0.f); Vec3 up(0.f,1.0f,0.f); D3DXMatrixLookAtLH(&view, &eye, &at, &up); SetViewMatrix(view); Mat4x4 proj = Mat4x4::g_Identity; D3DXMatrixPerspectiveFovLH(&proj, NAIA_PI/2, Application::instance()->m_Width/(float)Application::instance()->m_Height, 0.01f, 100.0f); SetProjectionMatrix(proj); #pragma region Create constant buffers D3D11_BUFFER_DESC bd; ZeroMemory(&bd, sizeof(bd)); bd.Usage = D3D11_USAGE_DEFAULT; bd.ByteWidth = sizeof(CBNeverChanges); bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; bd.CPUAccessFlags = 0; r = m_Device->CreateBuffer(&bd, NULL, &m_cbNeverChanges); if (FAILED(r)) { NAIA_FATAL("Can not create constant buffer (Never changes)"); } bd.ByteWidth = sizeof(CBChangeOnResize); r = m_Device->CreateBuffer(&bd, NULL, &m_cbChangesOnResize); if (FAILED(r)) { NAIA_FATAL("Can not create constant buffer (Changes on resize)"); } bd.ByteWidth = sizeof(CBChangesEveryFrame); r = m_Device->CreateBuffer(&bd, NULL, &m_cbChangesEveryFrame); if (FAILED(r)) { NAIA_FATAL("Can not create constant buffer (Changes every frame)"); } #pragma endregion CBNeverChanges cbNeverChanges; cbNeverChanges.View = view; m_Context->UpdateSubresource(m_cbNeverChanges, 0, NULL, &cbNeverChanges, 0, 0); CBChangeOnResize cbChangesOnResize; cbChangesOnResize.Projection = proj; m_Context->UpdateSubresource(m_cbChangesOnResize, 0, NULL, &cbChangesOnResize, 0, 0); CBChangesEveryFrame cbChangesEveryFrame; cbChangesEveryFrame.World = world; m_Context->UpdateSubresource(m_cbChangesEveryFrame, 0, NULL, &cbChangesEveryFrame, 0, 0); return true; }
void Texture::loadFromFile(const std::string &filename) { ID3DBlob* vsBuffer, *psBuffer = 0; D3D11_INPUT_ELEMENT_DESC solidColorLayout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 28, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; CompileD3DShader("Shaders/TextureMap.fx", "VS_Main", "vs_4_0", &vsBuffer); CompileD3DShader("Shaders/TextureMap.fx", "PS_Main", "ps_4_0", &psBuffer); DirectX::ThrowIfFailed( _dev->CreateVertexShader(vsBuffer->GetBufferPointer(), vsBuffer->GetBufferSize(), 0, &solidColorVS) ); DirectX::ThrowIfFailed( _dev->CreatePixelShader(psBuffer->GetBufferPointer(), psBuffer->GetBufferSize(), 0, &solidColorPS) ); unsigned int totalLayoutElements = ARRAYSIZE(solidColorLayout); DirectX::ThrowIfFailed( _dev->CreateInputLayout(solidColorLayout, totalLayoutElements, vsBuffer->GetBufferPointer(), vsBuffer->GetBufferSize(), &inputLayout) ); D3DX11CreateShaderResourceViewFromFile(_dev.Get(), filename.c_str(), 0, 0, &colorMap, 0); ID3D11Resource *resource; ID3D11Texture2D *texture2D; D3D11_TEXTURE2D_DESC textureDesc; colorMap->GetResource(&resource); resource->QueryInterface<ID3D11Texture2D>(&texture2D); texture2D->GetDesc(&textureDesc); _textureWidth = static_cast<float>(textureDesc.Width); _textureHeight = static_cast<float>(textureDesc.Height); ID3D11Resource* colorTex; colorMap->GetResource(&colorTex); D3D11_TEXTURE2D_DESC colorTexDesc; ((ID3D11Texture2D*)colorTex)->GetDesc(&colorTexDesc); colorTex->Release(); ID3D11RasterizerState *rasterize; D3D11_RASTERIZER_DESC rasterizerDesc; ZeroMemory(&rasterizerDesc, sizeof(D3D11_RASTERIZER_DESC)); rasterizerDesc.AntialiasedLineEnable = false; rasterizerDesc.CullMode = D3D11_CULL_NONE; rasterizerDesc.DepthBias = 0; rasterizerDesc.DepthBiasClamp = 0.0f; rasterizerDesc.DepthClipEnable = true; rasterizerDesc.FillMode = D3D11_FILL_SOLID; rasterizerDesc.FrontCounterClockwise = false; rasterizerDesc.MultisampleEnable = false; rasterizerDesc.ScissorEnable = false; rasterizerDesc.SlopeScaledDepthBias = 0.0f; _dev->CreateRasterizerState(&rasterizerDesc, &rasterize); _devcon->RSSetState(rasterize); // transparence D3D11_BLEND_DESC blendDesc; ZeroMemory(&blendDesc, sizeof(blendDesc)); blendDesc.RenderTarget[0].BlendEnable = TRUE; blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; blendDesc.RenderTarget[0].RenderTargetWriteMask = 0x0f; float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; _dev->CreateBlendState(&blendDesc, alphaBlendState.GetAddressOf()); _devcon->OMSetBlendState(alphaBlendState.Get(), blendFactor, 0xFFFFFFFF); D3D11_SAMPLER_DESC desc = CD3D11_SAMPLER_DESC(CD3D11_DEFAULT()); _dev->CreateSamplerState(&desc, &colorMapSampler); }
bool BitmapFontClass::InitializeShaders(ID3D11Device* device, const char* basisShaderFileName) { char* vertexShaderFileName = (char*)malloc(1 + strlen(basisShaderFileName) + strlen(".vs")); char* pixelShaderFileName = (char*)malloc(1 + strlen(basisShaderFileName) + strlen(".ps")); strcpy_s(vertexShaderFileName, 1 + strlen(basisShaderFileName), basisShaderFileName); strcat_s(vertexShaderFileName, 1 + strlen(basisShaderFileName) + strlen(".vs"), ".vs"); strcpy_s(pixelShaderFileName, 1 + strlen(basisShaderFileName), basisShaderFileName); strcat_s(pixelShaderFileName, 1 + strlen(basisShaderFileName) + strlen(".ps"), ".ps"); // Vertex Shader ID3DBlob* vertexShaderBuffer = NULL; bool compileResult = CompileD3DShader(vertexShaderFileName, "VS_Main", "vs_4_0", &vertexShaderBuffer); if (!compileResult) { if (vertexShaderFileName) free(vertexShaderFileName); if (pixelShaderFileName) free(pixelShaderFileName); MessageBox(0, L"Error loading vertex shader!", L"Compile Error", MB_OK); return false; } HRESULT result; result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_textureVS); if (FAILED(result)) { if (vertexShaderBuffer) vertexShaderBuffer->Release(); if (vertexShaderFileName) free(vertexShaderFileName); if (pixelShaderFileName) free(pixelShaderFileName); MessageBox(0, L"Error creating vertex shader!", L"Compile Error", MB_OK); return false; } // Pixel Shader ID3DBlob* pixelShaderBuffer = NULL; compileResult = CompileD3DShader(/*pixelShaderFileName*/"Resource Files/myColorFont.ps", "PS_Main", "ps_4_0", &pixelShaderBuffer); if (!compileResult) { if (vertexShaderFileName) free(vertexShaderFileName); if (pixelShaderFileName) free(pixelShaderFileName); MessageBox(0, L"Error loading pixel shader!", L"Compile Error", MB_OK); return false; } result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &m_texturePS); if (FAILED(result)) { if (pixelShaderBuffer) pixelShaderBuffer->Release(); if (vertexShaderFileName) free(vertexShaderFileName); if (pixelShaderFileName) free(pixelShaderFileName); MessageBox(0, L"Error creating pixel shader!", L"Compile Error", MB_OK); return false; } free(vertexShaderFileName); free(pixelShaderFileName); // Input Layer D3D11_INPUT_ELEMENT_DESC solidColorLayout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 } }; unsigned int totalLayoutElements = ARRAYSIZE(solidColorLayout); result = device->CreateInputLayout(solidColorLayout, totalLayoutElements, vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), &m_inputLayout); if (FAILED(result)) { if (pixelShaderBuffer) pixelShaderBuffer->Release(); if (vertexShaderFileName) free(vertexShaderFileName); if (pixelShaderFileName) free(pixelShaderFileName); MessageBox(0, L"Error creating input layout!", L"Compile Error", MB_OK); return false; } return true; }
bool ModelsDemo::LoadContent( ) { //////////////////////////////GRID STUFF/////////////////////// MyGrid = new WorldGrid(120,120); //MyGrid->InitSnow(); //MyGrid->BuildBuffer(d3dDevice_, 26.0f, 20.0f); //26 20 ID3DBlob* vsBuffer = 0; ////////shaders start bool compileResult = CompileD3DShader( "TextureMap.fx", "VS_Main", "vs_4_0", &vsBuffer ); if( compileResult == false ) { DXTRACE_MSG( "Error compiling the vertex shader!" ); return false; } HRESULT d3dResult; d3dResult = d3dDevice_->CreateVertexShader( vsBuffer->GetBufferPointer( ), vsBuffer->GetBufferSize( ), 0, &textureMapVS_ ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Error creating the vertex shader!" ); if( vsBuffer ) vsBuffer->Release( ); return false; } D3D11_INPUT_ELEMENT_DESC solidColorLayout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 32, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "BITANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 44, D3D11_INPUT_PER_VERTEX_DATA, 0 } }; unsigned int totalLayoutElements = ARRAYSIZE( solidColorLayout ); d3dResult = d3dDevice_->CreateInputLayout( solidColorLayout, totalLayoutElements, vsBuffer->GetBufferPointer( ), vsBuffer->GetBufferSize( ), &inputLayout_ ); //vsBuffer->Release( ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Error creating the input layout!" ); return false; } ID3DBlob* psBuffer = 0; compileResult = CompileD3DShader( "TextureMap.fx", "PS_Main", "ps_4_0", &psBuffer ); if( compileResult == false ) { DXTRACE_MSG( "Error compiling pixel shader!" ); return false; } d3dResult = d3dDevice_->CreatePixelShader( psBuffer->GetBufferPointer( ), psBuffer->GetBufferSize( ), 0, &textureMapPS_ ); //psBuffer->Release( ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Error creating pixel shader!" ); return false; } //////////////////////////////////////////////////////////////////normal shaders ////////shaders start compileResult = CompileD3DShader( "NormalMap.fx", "VS_Main", "vs_4_0", &vsBuffer ); if( compileResult == false ) { DXTRACE_MSG( "Error compiling the vertex shader!" ); return false; } d3dResult = d3dDevice_->CreateVertexShader( vsBuffer->GetBufferPointer( ), vsBuffer->GetBufferSize( ), 0, &normalTextureMapVS_ ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Error creating the vertex shader!" ); if( vsBuffer ) vsBuffer->Release( ); return false; } d3dResult = d3dDevice_->CreateInputLayout( solidColorLayout, totalLayoutElements, vsBuffer->GetBufferPointer( ), vsBuffer->GetBufferSize( ), &inputLayout_ ); //vsBuffer->Release( ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Error creating the input layout!" ); return false; } compileResult = CompileD3DShader( "NormalMap.fx", "PS_Main", "ps_4_0", &psBuffer ); if( compileResult == false ) { DXTRACE_MSG( "Error compiling pixel shader!" ); return false; } d3dResult = d3dDevice_->CreatePixelShader( psBuffer->GetBufferPointer( ), psBuffer->GetBufferSize( ), 0, &normalTextureMapPS_ ); //psBuffer->Release( ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Error creating pixel shader!" ); return false; } ////////////////////////////////////////////text 2d shaders//////////////////////////////////////////////////////////// //ID3DBlob* vsBuffer = 0; vsBuffer = 0; compileResult = CompileD3DShader( "TextTextureMap.fx", "VS_Main", "vs_4_0", &vsBuffer ); if( compileResult == false ) { DXTRACE_MSG( "Error compiling the vertex shader!" ); return false; } d3dResult = d3dDevice_->CreateVertexShader( vsBuffer->GetBufferPointer( ), vsBuffer->GetBufferSize( ), 0, &textTextureMapVS_ ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Error creating the vertex shader!" ); if( vsBuffer ) vsBuffer->Release( ); return false; } D3D11_INPUT_ELEMENT_DESC textSolidColorLayout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 } }; totalLayoutElements = ARRAYSIZE( textSolidColorLayout ); d3dResult = d3dDevice_->CreateInputLayout( textSolidColorLayout, totalLayoutElements, vsBuffer->GetBufferPointer( ), vsBuffer->GetBufferSize( ), &textInputLayout_ ); vsBuffer->Release( ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Error creating the input layout!" ); return false; } //ID3DBlob* psBuffer = 0; psBuffer = 0; compileResult = CompileD3DShader( "TextTextureMap.fx", "PS_Main", "ps_4_0", &psBuffer ); if( compileResult == false ) { DXTRACE_MSG( "Error compiling pixel shader!" ); return false; } d3dResult = d3dDevice_->CreatePixelShader( psBuffer->GetBufferPointer( ), psBuffer->GetBufferSize( ), 0, &textTextureMapPS_ ); psBuffer->Release( ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Error creating pixel shader!" ); return false; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////texture d3dResult = D3DX11CreateShaderResourceViewFromFile( d3dDevice_, "fontEX.png", 0, 0, &textColorMap_, 0 ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Failed to load the texture image!" ); return false; } /////////////////// d3dResult = D3DX11CreateShaderResourceViewFromFile( d3dDevice_, "tilemaptemplate.png", 0, 0, &GridColorMap_, 0 ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Failed to load the texture image!" ); return false; } d3dResult = D3DX11CreateShaderResourceViewFromFile( d3dDevice_, "tilemaplava.png", 0, 0, &GridColorMapLava_, 0 ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Failed to load the texture image!" ); return false; } d3dResult = D3DX11CreateShaderResourceViewFromFile( d3dDevice_, "tilemaptemple.png", 0, 0, &GridColorMapTemple_, 0 ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Failed to load the texture image!" ); return false; } /////////////////// D3D11_SAMPLER_DESC textColorMapDesc; ZeroMemory( &textColorMapDesc, sizeof( textColorMapDesc ) ); textColorMapDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; textColorMapDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; textColorMapDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; textColorMapDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; textColorMapDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; textColorMapDesc.MaxLOD = D3D11_FLOAT32_MAX; d3dResult = d3dDevice_->CreateSamplerState( &textColorMapDesc, &textColorMapSampler_ ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Failed to create color map sampler state!" ); return false; } D3D11_BUFFER_DESC textVertexDesc; ZeroMemory( &textVertexDesc, sizeof( textVertexDesc ) ); textVertexDesc.Usage = D3D11_USAGE_DYNAMIC; textVertexDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; textVertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; const int sizeOfSprite = sizeof( TextVertexPos ) * 6; const int maxLetters = 24; textVertexDesc.ByteWidth = sizeOfSprite * maxLetters; d3dResult = d3dDevice_->CreateBuffer( &textVertexDesc, 0, &textVertexBuffer_ ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Failed to create vertex buffer!" ); return false; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// d3dResult = D3DX11CreateShaderResourceViewFromFile( d3dDevice_, "Image/decal.dds", 0, 0, &colorMap_, 0 ); //"41.jpg", 0, 0, &colorMap_, 0 ); //TEXTURE_NAME, 0, 0, &colorMap_, 0 ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Failed to load the texture image!" ); return false; } D3D11_SAMPLER_DESC colorMapDesc; ZeroMemory( &colorMapDesc, sizeof( colorMapDesc ) ); colorMapDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; colorMapDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; //colorMapDesc.Filter = D3D11_FILTER_ANISOTROPIC; colorMapDesc.MaxLOD = D3D11_FLOAT32_MAX; d3dResult = d3dDevice_->CreateSamplerState( &colorMapDesc, &colorMapSampler_ ); if( FAILED( d3dResult ) ) { DXTRACE_MSG( "Failed to create color map sampler state!" ); return false; } D3D11_BUFFER_DESC constDesc; ZeroMemory( &constDesc, sizeof( constDesc ) ); constDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; constDesc.ByteWidth = sizeof( XMMATRIX ); constDesc.Usage = D3D11_USAGE_DEFAULT; d3dResult = d3dDevice_->CreateBuffer( &constDesc, 0, &viewCB_ ); if( FAILED( d3dResult ) ) { return false; } d3dResult = d3dDevice_->CreateBuffer( &constDesc, 0, &projCB_ ); if( FAILED( d3dResult ) ) { return false; } d3dResult = d3dDevice_->CreateBuffer( &constDesc, 0, &worldCB_ ); if( FAILED( d3dResult ) ) { return false; } constDesc.ByteWidth = sizeof( XMFLOAT4 ); d3dResult = d3dDevice_->CreateBuffer( &constDesc, 0, &camPosCB_ ); if( FAILED( d3dResult ) ) { return false; } /////////////////////////////////////////////////////////////////////////////////////////////////////// /* D3D11_BLEND_DESC blendDesc2; ZeroMemory( &blendDesc2, sizeof( blendDesc2 ) ); blendDesc2.RenderTarget[0].BlendEnable = TRUE; blendDesc2.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; blendDesc2.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; blendDesc2.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; blendDesc2.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; blendDesc2.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ZERO; blendDesc2.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; blendDesc2.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; d3dDevice_->CreateBlendState( &blendDesc2, &alphaBlendState_ ); //d3dDevice_->CreateBlendState( &BlendState, &alphaBlendState_ ); d3dContext_->OMSetBlendState( alphaBlendState_, blendFactor, 0xFFFFFFFF );*/ ////////////////////////////////////////////////////////////////////////////////////////////////////////// D3D11_BLEND_DESC blendStateDescription; // Clear the blend state description. ZeroMemory(&blendStateDescription, sizeof(D3D11_BLEND_DESC)); // Create an alpha enabled blend state description. blendStateDescription.RenderTarget[0].BlendEnable = TRUE; //blendStateDescription.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE; blendStateDescription.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; blendStateDescription.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; blendStateDescription.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; //blendStateDescription.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; blendStateDescription.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ZERO; blendStateDescription.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; blendStateDescription.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; blendStateDescription.RenderTarget[0].RenderTargetWriteMask = 0x0f; // Create the blend state using the description. d3dResult = d3dDevice_->CreateBlendState(&blendStateDescription, &m_alphaEnableBlendingState); if(FAILED(d3dResult)) { return false; } // Modify the description to create an alpha disabled blend state description. blendStateDescription.RenderTarget[0].BlendEnable = FALSE; // Create the blend state using the description. d3dResult = d3dDevice_->CreateBlendState(&blendStateDescription, &m_alphaDisableBlendingState); if(FAILED(d3dResult)) { return false; } projMatrix_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, 800.0f / 600.0f, 0.01f, 10000.0f ); projMatrix_ = XMMatrixTranspose( projMatrix_ ); camera_.SetDistance( 12.0f, 4.0f, 20.0f ); return true; }
bool KeyboardDemo::LoadContent( ) { ID3DBlob* vsBuffer = 0; bool compileResult = CompileD3DShader( "CustomColor.hlsl", "VS_Main", "vs_4_0", &vsBuffer ); if( compileResult == false ) { MessageBox( 0, "Error loading vertex shader!", "Compile Error", MB_OK ); return false; } HRESULT d3dResult; d3dResult = d3dDevice_->CreateVertexShader( vsBuffer->GetBufferPointer( ), vsBuffer->GetBufferSize( ), 0, &customColorVS_ ); if( FAILED( d3dResult ) ) { if( vsBuffer ) vsBuffer->Release( ); return false; } D3D11_INPUT_ELEMENT_DESC solidColorLayout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 } }; unsigned int totalLayoutElements = ARRAYSIZE( solidColorLayout ); d3dResult = d3dDevice_->CreateInputLayout( solidColorLayout, totalLayoutElements, vsBuffer->GetBufferPointer( ), vsBuffer->GetBufferSize( ), &inputLayout_ ); vsBuffer->Release( ); if( FAILED( d3dResult ) ) { return false; } ID3DBlob* psBuffer = 0; compileResult = CompileD3DShader( "CustomColor.hlsl", "PS_Main", "ps_4_0", &psBuffer ); if( compileResult == false ) { MessageBox( 0, "Error loading pixel shader!", "Compile Error", MB_OK ); return false; } d3dResult = d3dDevice_->CreatePixelShader( psBuffer->GetBufferPointer( ), psBuffer->GetBufferSize( ), 0, &customColorPS_ ); psBuffer->Release( ); if( FAILED( d3dResult ) ) { return false; } VertexPos vertices[] = { XMFLOAT3( 0.5f, 0.5f, 0.5f ), XMFLOAT3( 0.5f, -0.5f, 0.5f ), XMFLOAT3( -0.5f, -0.5f, 0.5f ) }; D3D11_BUFFER_DESC vertexDesc; ZeroMemory( &vertexDesc, sizeof( vertexDesc ) ); vertexDesc.Usage = D3D11_USAGE_DEFAULT; vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexDesc.ByteWidth = sizeof( VertexPos ) * 3; D3D11_SUBRESOURCE_DATA resourceData; ZeroMemory( &resourceData, sizeof( resourceData ) ); resourceData.pSysMem = vertices; d3dResult = d3dDevice_->CreateBuffer( &vertexDesc, &resourceData, &vertexBuffer_ ); if( FAILED( d3dResult ) ) { return false; } D3D11_BUFFER_DESC constDesc; ZeroMemory( &constDesc, sizeof( constDesc ) ); constDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; constDesc.ByteWidth = sizeof( XMFLOAT4 ); constDesc.Usage = D3D11_USAGE_DEFAULT; d3dResult = d3dDevice_->CreateBuffer( &constDesc, 0, &colorCB_ ); if( FAILED( d3dResult ) ) { return false; } return true; }
bool CameraDemo::LoadContent() { ID3DBlob * vsBuffer = 0; bool compileResult = CompileD3DShader( "TextureMap.fx" , "VS_Main" , "vs_4_0" , &vsBuffer ); if( compileResult == false ) { DXTRACE_MSG( "¼ÓÔض¥µã×ÅÉ«Æ÷ʧ°Ü£¡" ); return false; } HRESULT d3dResult; d3dResult = d3dDevice_ ->CreateVertexShader( vsBuffer ->GetBufferPointer() , vsBuffer ->GetBufferSize() , 0 , &solidColorVS_ ); if( FAILED( d3dResult )) { if( vsBuffer ) vsBuffer ->Release(); return false ; } D3D11_INPUT_ELEMENT_DESC solidColorLayout[ ] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 } }; unsigned int totalLayoutElements = ARRAYSIZE( solidColorLayout ); d3dResult =d3dDevice_ ->CreateInputLayout( solidColorLayout , totalLayoutElements , vsBuffer ->GetBufferPointer() , vsBuffer ->GetBufferSize() , &inputLayout_ ); vsBuffer ->Release(); if( FAILED( d3dResult )) { return false; } ID3DBlob * psBuffer = 0; compileResult = CompileD3DShader( "TextureMap.fx" , "PS_Main" , "ps_4_0" , &psBuffer ); if( compileResult == false ) { DXTRACE_MSG( "¼ÓÔØÏñËØ×ÅÉ«Æ÷ʧ°Ü£¡" ); return false; } d3dResult = d3dDevice_ ->CreatePixelShader( psBuffer ->GetBufferPointer() , psBuffer ->GetBufferSize() , 0 , &solidColorPS_ ); psBuffer ->Release(); if( FAILED( d3dResult )) { return false; } VertexPos vertices[ ] = { { XMFLOAT3( -1.0f , 1.0f , -1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , 1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , 1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , -1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , 1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( -1.0f , -1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( -1.0f , 1.0f , -1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , 1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( 1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , -1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( 1.0f , 1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , -1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , -1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , -1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , 1.0f , -1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } , { XMFLOAT3( -1.0f , -1.0f , 1.0f ) , XMFLOAT2( 0.0f , 0.0f ) } , { XMFLOAT3( 1.0f , -1.0f , 1.0f ) , XMFLOAT2( 1.0f , 0.0f ) } , { XMFLOAT3( 1.0f , 1.0f , 1.0f ) , XMFLOAT2( 1.0f , 1.0f ) } , { XMFLOAT3( -1.0f , 1.0f , 1.0f ) , XMFLOAT2( 0.0f , 1.0f ) } }; D3D11_BUFFER_DESC vertexDesc; ZeroMemory( &vertexDesc , sizeof( vertexDesc )); vertexDesc.Usage = D3D11_USAGE_DEFAULT; vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexDesc.ByteWidth = sizeof( VertexPos ) * 24; D3D11_SUBRESOURCE_DATA resourceData; ZeroMemory( &resourceData , sizeof( resourceData )); resourceData.pSysMem = vertices; d3dResult = d3dDevice_ ->CreateBuffer( &vertexDesc , &resourceData , &vertexBuffer_ ); if( FAILED( d3dResult )) { DXTRACE_MSG( "´´½¨¶¥µã»º³åÇøʧ°Ü£¡" ); return false; } WORD indices[ ] = { 3 , 1 , 0 , 2 , 1 , 3 , 6 , 4 , 5 , 7 , 4 , 6 , 11 , 9 , 8 , 10 , 9 , 11 , 14 , 12 , 13 , 15 , 12 , 14 , 19 , 17 , 16 , 18 , 17 , 19 , 22 , 20 , 21 ,23 , 20 , 22 }; D3D11_BUFFER_DESC indexDesc; ZeroMemory( &indexDesc , sizeof( indexDesc )); indexDesc.Usage = D3D11_USAGE_DEFAULT ; indexDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; indexDesc.ByteWidth = sizeof( WORD ) * 36 ; indexDesc.CPUAccessFlags = 0; resourceData.pSysMem = indices; d3dResult =d3dDevice_ ->CreateBuffer( &indexDesc , &resourceData , &indexBuffer_ ); if( FAILED( d3dResult )) { DXTRACE_MSG( "´´½¨Ë÷Òý»º³åÇøʧ°Ü£¡" ); return false; } d3dResult = D3DX11CreateShaderResourceViewFromFile( d3dDevice_ , "decal.dds" , 0 , 0 , &colorMap_ , 0 ); if( FAILED( d3dResult )) { DXTRACE_MSG( "¼ÓÔØÎÆÀíͼÏñʧ°Ü£¡" ); return false; } D3D11_SAMPLER_DESC colorMapDesc; ZeroMemory( &colorMapDesc , sizeof( colorMapDesc )); colorMapDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; colorMapDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; colorMapDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; colorMapDesc.MaxLOD = D3D11_FLOAT32_MAX; d3dResult = d3dDevice_ ->CreateSamplerState( &colorMapDesc ,&colorMapSampler_ ); if( FAILED( d3dResult )) { DXTRACE_MSG( "´´½¨²ÉÑùÆ÷ʧ°Ü£¡" ); return false; } D3D11_BUFFER_DESC constDesc; ZeroMemory( &constDesc , sizeof( constDesc )); constDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; constDesc.ByteWidth = sizeof( XMMATRIX ); constDesc.Usage = D3D11_USAGE_DEFAULT; d3dResult = d3dDevice_ ->CreateBuffer( &constDesc , 0 , &viewCB_ ); if( FAILED( d3dResult )) { return false; } d3dResult = d3dDevice_ ->CreateBuffer( &constDesc , 0 , &projCB_ ); if( FAILED( d3dResult )) { return false; } d3dResult = d3dDevice_ ->CreateBuffer( &constDesc , 0 , &worldCB_ ); if( FAILED( d3dResult )) { return false; } XMMATRIX projection_ = XMMatrixPerspectiveLH( XM_PIDIV4 , 800.0f / 600.0f , 0.01f , 100.0f ); projection_ = XMMatrixTranspose( projection_ ); camera_.SetPositions( XMFLOAT3( 3.0f , 3.0f , -12.0f ) , XMFLOAT3( 0.0f , 0.0f , 0.0f )); return true; }