bool Scene::Init(HWND _hWnd) { hWnd = _hWnd; d3d9 = Direct3DCreate9( D3D_SDK_VERSION ); if (!d3d9) { return false; } D3DPRESENT_PARAMETERS presentParams; ZeroMemory( &presentParams, sizeof( presentParams ) ); presentParams.Windowed = TRUE; presentParams.SwapEffect = D3DSWAPEFFECT_DISCARD; presentParams.BackBufferFormat = D3DFMT_UNKNOWN; //D3DFMT_X8R8G8B8; presentParams.EnableAutoDepthStencil = TRUE; presentParams.AutoDepthStencilFormat = D3DFMT_D24S8; presentParams.PresentationInterval = D3DPRESENT_INTERVAL_ONE; presentParams.BackBufferCount = 1; presentParams.MultiSampleType = D3DMULTISAMPLE_8_SAMPLES; presentParams.MultiSampleQuality = 1; d3d9->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &presentParams, &device ); if (!device) { presentParams.MultiSampleType = D3DMULTISAMPLE_NONE; presentParams.MultiSampleQuality = 0; d3d9->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &presentParams, &device ); } if (!device) { Cleanup(); return false; } const D3DVERTEXELEMENT9 decl[] = { { 0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, D3DDECL_END() }; device->CreateVertexDeclaration( decl, &vertexDecl ); if (!vertexDecl) { Cleanup(); return false; } if (!CreateQuad()) { Cleanup(); return false; } D3DXCreateTextureFromFileEx(device, L"InitialState.dds", D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_FROM_FILE, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, &initialState); if (!initialState) { Cleanup(); return false; } D3DSURFACE_DESC textureDesc; initialState->GetLevelDesc(0, &textureDesc); device->CreateTexture(textureDesc.Width, textureDesc.Height, 1, D3DUSAGE_RENDERTARGET, textureDesc.Format, D3DPOOL_DEFAULT, &state0, NULL); if (!state0) { Cleanup(); return false; } device->CreateTexture(textureDesc.Width, textureDesc.Height, 1, D3DUSAGE_RENDERTARGET, textureDesc.Format, D3DPOOL_DEFAULT, &state1, NULL); if (!state1) { Cleanup(); return false; } device->GetRenderTarget(0, &rtMain); if (!rtMain) { Cleanup(); return false; } state0->GetSurfaceLevel(0, &rtState0); if (!rtState0) { Cleanup(); return false; } state1->GetSurfaceLevel(0, &rtState1); if (!rtState1) { Cleanup(); return false; } LoadShaders(); Reset(); return true; }
static Polygon CreateQuad (Vertex v[4]) { return CreateQuad(v[0], v[1], v[2], v[3]); }
UE_uint CreateQuad(const maths::vec2& position, const maths::vec2& size) { return CreateQuad(position.x, position.y, size.x, size.y); }
Primitive::Ptr Renderer::CreatePane( const sf::Vector2f& position, const sf::Vector2f& size, float border_width, const sf::Color& color, const sf::Color& border_color, int border_color_shift ) { if( border_width <= 0.f ) { return CreateRect( position, position + size, color ); } Primitive::Ptr primitive( new Primitive ); sf::Color dark_border( border_color ); sf::Color light_border( border_color ); Context::Get().GetEngine().ShiftBorderColors( light_border, dark_border, border_color_shift ); float left = position.x; float top = position.y; float right = left + size.x; float bottom = top + size.y; Primitive::Ptr rect( CreateQuad( sf::Vector2f( left + border_width, top + border_width ), sf::Vector2f( left + border_width, bottom - border_width ), sf::Vector2f( right - border_width, bottom - border_width ), sf::Vector2f( right - border_width, top + border_width ), color ) ); Primitive::Ptr line_top( CreateLine( sf::Vector2f( left, top + border_width / 2.f ), sf::Vector2f( right - border_width, top + border_width / 2.f ), light_border, border_width ) ); Primitive::Ptr line_right( CreateLine( sf::Vector2f( right - border_width / 2.f, top ), sf::Vector2f( right - border_width / 2.f, bottom - border_width ), dark_border, border_width ) ); Primitive::Ptr line_bottom( CreateLine( sf::Vector2f( right, bottom - border_width / 2.f ), sf::Vector2f( left + border_width, bottom - border_width / 2.f ), dark_border, border_width ) ); Primitive::Ptr line_left( CreateLine( sf::Vector2f( left + border_width / 2.f, bottom ), sf::Vector2f( left + border_width / 2.f, top + border_width ), light_border, border_width ) ); primitive->Add( *rect.get() ); primitive->Add( *line_top.get() ); primitive->Add( *line_right.get() ); primitive->Add( *line_bottom.get() ); primitive->Add( *line_left.get() ); std::vector<Primitive::Ptr>::iterator iter( std::find( m_primitives.begin(), m_primitives.end(), rect ) ); assert( iter != m_primitives.end() ); iter = m_primitives.erase( iter ); // rect iter = m_primitives.erase( iter ); // line_top iter = m_primitives.erase( iter ); // line_right iter = m_primitives.erase( iter ); // line_bottom m_primitives.erase( iter ); // line_left AddPrimitive( primitive ); return primitive; }
//-------------------------------------------------------------------------------------- HRESULT InitResources( ID3D10Device* pd3dDevice ) { HRESULT hr = S_OK; DWORD dwShaderFlags = D3D10_SHADER_ENABLE_STRICTNESS; #if defined( DEBUG ) || defined( _DEBUG ) // Set the D3D10_SHADER_DEBUG flag to embed debug information in the shaders. // Setting this flag improves the shader debugging experience, but still allows // the shaders to be optimized and to run exactly the way they will run in // the release configuration of this program. dwShaderFlags |= D3D10_SHADER_DEBUG; #endif // Read the D3DX effect file WCHAR str[MAX_PATH]; hr = FindMediaFileCch( str, MAX_PATH, L"GPUSpectrogram.fx" ); if( FAILED( hr ) ) return hr; hr = D3DX10CreateEffectFromFile( str, NULL, NULL, "fx_4_0", dwShaderFlags, 0, pd3dDevice, NULL, NULL, &g_pEffect10, NULL, NULL ); if( FAILED( hr ) ) return hr; // Obtain the technique handles g_pReverse = g_pEffect10->GetTechniqueByName( "Reverse" ); g_pFFTInner = g_pEffect10->GetTechniqueByName( "FFTInner" ); g_pRenderQuad = g_pEffect10->GetTechniqueByName( "RenderQuad" ); g_ptxSource = g_pEffect10->GetVariableByName( "g_txSource" )->AsShaderResource(); g_pTextureSize = g_pEffect10->GetVariableByName( "g_TextureSize" )->AsVector(); g_pWR = g_pEffect10->GetVariableByName( "g_WR" )->AsScalar(); g_pWI = g_pEffect10->GetVariableByName( "g_WI" )->AsScalar(); g_pMMAX = g_pEffect10->GetVariableByName( "g_MMAX" )->AsScalar(); g_pM = g_pEffect10->GetVariableByName( "g_M" )->AsScalar(); g_pISTEP = g_pEffect10->GetVariableByName( "g_ISTEP" )->AsScalar(); hr = LoadAudioIntoBuffer( pd3dDevice, g_uiTexX, g_strWaveName ); if( FAILED( hr ) ) return hr; D3DXVECTOR4 vTextureSize( ( float )g_uiTexX, ( float )g_uiTexY, 0.0f, 0.0f ); g_pTextureSize->SetFloatVector( ( float* )vTextureSize ); // Create our quad vertex input layout const D3D10_INPUT_ELEMENT_DESC quadlayout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "TEXTURE", 0, DXGI_FORMAT_R32G32_UINT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 }, }; D3D10_PASS_DESC PassDesc; g_pReverse->GetPassByIndex( 0 )->GetDesc( &PassDesc ); hr = pd3dDevice->CreateInputLayout( quadlayout, sizeof( quadlayout ) / sizeof( quadlayout[0] ), PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize, &g_pQuadVertexLayout ); if( FAILED( hr ) ) return hr; hr = CreateQuad( pd3dDevice, g_uiTexX, g_uiTexY ); if( FAILED( hr ) ) return hr; return hr; }