bool InitResourceDX10(void) { g_pDevice = GutGetGraphicsDeviceDX10(); ID3D10Blob *pVSCode = NULL; // 載入Vertex Shader g_pVertexShader = GutLoadVertexShaderDX10_HLSL("../../shaders/VertexCompression_dx10.hlsl", "VS", "vs_4_0", &pVSCode); if ( NULL==g_pVertexShader ) return false; // 載入Pixel Shader g_pPixelShader = GutLoadPixelShaderDX10_HLSL("../../shaders/VertexCompression_dx10.hlsl", "PS", "ps_4_0"); if ( NULL==g_pPixelShader ) return false; // 設定Vertex資料格式 D3D10_INPUT_ELEMENT_DESC layout[] = { { "POSITION", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "NORMAL", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 4, D3D10_INPUT_PER_VERTEX_DATA, 0 } }; if ( D3D_OK != g_pDevice->CreateInputLayout( layout, sizeof(layout)/sizeof(D3D10_INPUT_ELEMENT_DESC), pVSCode->GetBufferPointer(), pVSCode->GetBufferSize(), &g_pVertexLayout ) ) return false; SAFE_RELEASE(pVSCode); // 拷備模型資料 g_pVertexBuffer = GutCreateVertexBuffer_DX10(sizeof(CompressedVertex) * g_iNumSphereVertices, g_pCompressedVertices); g_pIndexBuffer = GutCreateIndexBuffer_DX10(sizeof(unsigned short) * g_iNumSphereIndices, g_pSphereIndices); g_pConstantBuffer = GutCreateShaderConstant_DX10(sizeof(Matrix4x4)*2); // 投影矩陣 g_proj_matrix = GutMatrixPerspectiveRH_DirectX(90.0f, 1.0f, 0.1f, 100.0f); return true; }
bool InitResourceDX10(void) { g_pDevice = GutGetGraphicsDeviceDX10(); ID3D10Blob *pVSCode = NULL; for ( int i=0; i<NUM_FRAMEBUFFERS; i++ ) { g_pTextures[i] = NULL; g_pSRView[i] = NULL; g_pRTView[i] = NULL; } // 載入Shader { g_pPostFX = GutLoadFXShaderDX10("../../shaders/Posteffect_dx10.fx"); if ( NULL==g_pPostFX ) return false; g_pExposureFX = GutLoadFXShaderDX10("../../shaders/Exposure_dx10.fx"); if ( NULL==g_pExposureFX ) return false; } // 設定Vertex資料格式 { ID3D10EffectTechnique *pShader = g_pExposureFX->GetTechniqueByName("AutoExposure"); D3D10_INPUT_ELEMENT_DESC layout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 } }; D3D10_PASS_DESC PassDesc; pShader->GetPassByIndex(0)->GetDesc(&PassDesc); if ( D3D_OK != g_pDevice->CreateInputLayout( layout, 2, PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize, &g_pVertexLayout ) ) return false; SAFE_RELEASE(pVSCode); } if ( !ReInitResourceDX10() ) return false; CGutModel_DX10::LoadDefaultShader("../../shaders/gmodel_dx10.hlsl"); g_Model_DX10.ConvertToDX10Model(&g_Model); g_pVertexBuffer = GutCreateVertexBuffer_DX10(sizeof(Vertex_VT)*4, g_FullScreenQuad); return true; }
bool InitResourceDX10(void) { g_pDevice = GutGetGraphicsDeviceDX10(); // 載入Shader { g_pRefractionFX = GutLoadFXShaderDX10("../../shaders/Refraction_dx10.fx"); if ( NULL==g_pRefractionFX ) return false; ID3D10EffectTechnique *pShader = g_pRefractionFX->GetTechniqueByName("Refraction"); const sVertexDecl *pVertexDecl = g_Model.GetVertexFormat(); D3D10_PASS_DESC PassDesc; pShader->GetPassByIndex(0)->GetDesc(&PassDesc); g_pRefractionLayout = GutCreateInputLayoutDX10(pVertexDecl, PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize); } g_pPostFX = GutLoadFXShaderDX10("../../shaders/Posteffect_dx10.fx"); if ( NULL==g_pPostFX ) return false; { g_pVertexBuffer = GutCreateVertexBuffer_DX10(sizeof(Vertex_VT)*4, g_FullScreenQuad); D3D10_INPUT_ELEMENT_DESC layout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 } }; ID3D10EffectTechnique *pShader = g_pPostFX->GetTechniqueByName("DrawIcon"); D3D10_PASS_DESC PassDesc; pShader->GetPassByIndex(0)->GetDesc(&PassDesc); if ( D3D_OK != g_pDevice->CreateInputLayout( layout, 2, PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize, &g_pVertexLayout ) ) return false; } if ( !ReInitResourceDX10() ) return false; CGutModel_DX10::LoadDefaultShader("../../shaders/gmodel_dx10.hlsl"); g_Model_DX10.ConvertToDX10Model(&g_Model); g_pTexture = GutLoadTexture_DX10("../../textures/lena.dds"); return true; }
bool InitResourceDX10(void) { g_pDevice = GutGetGraphicsDeviceDX10(); ID3D10Blob *pVSCode = NULL; g_pTexture = GutLoadTexture_DX10("../../textures/space.tga", &g_ImageInfo); if ( NULL==g_pTexture ) return false; // 載入Vertex Shader { g_pBlurVS = GutLoadVertexShaderDX10_HLSL("../../shaders/Posteffect_blur_dx10.hlsl", "VS", "vs_4_0", &pVSCode); g_pBlurPS = GutLoadPixelShaderDX10_HLSL("../../shaders/Posteffect_blur_dx10.hlsl", "PS", "ps_4_0"); g_pBrightnessPS = GutLoadPixelShaderDX10_HLSL("../../shaders/Posteffect_brightness_dx10.hlsl", "PS", "ps_4_0"); g_pRGBAPixelShader = GutLoadPixelShaderDX10_HLSL("../../shaders/texture_dx10.hlsl", "PS", "ps_4_0"); if ( NULL==g_pBlurVS || NULL==g_pBlurPS || NULL==g_pRGBAPixelShader || NULL==g_pBrightnessPS ) return false; } // 設定Vertex資料格式 { D3D10_INPUT_ELEMENT_DESC layout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 } }; if ( D3D_OK != g_pDevice->CreateInputLayout( layout, 2, pVSCode->GetBufferPointer(), pVSCode->GetBufferSize(), &g_pVertexLayout ) ) return false; SAFE_RELEASE(pVSCode); } g_pVertexBuffer = GutCreateVertexBuffer_DX10(sizeof(Vertex_VT)*4, g_FullScreenQuad); Matrix4x4 ident_mat; ident_mat.Identity(); g_pVSConstantBuffer = GutCreateShaderConstant_DX10(sizeof(Matrix4x4), &ident_mat); g_pBlurConstantBuffer = GutCreateShaderConstant_DX10(sizeof(Vector4)*9); g_pBrightnessConstantBuffer = GutCreateShaderConstant_DX10(sizeof(Vector4)*2); int w = g_ImageInfo.m_iWidth/4; int h = g_ImageInfo.m_iHeight/4; if ( !GutCreateRenderTarget_DX10(w, h, DXGI_FORMAT_R8G8B8A8_UNORM, &g_pFrameTexture[0], &g_pFrameSRView[0], &g_pFrameRTView[0]) ) return false; if ( !GutCreateRenderTarget_DX10(w, h, DXGI_FORMAT_R8G8B8A8_UNORM, &g_pFrameTexture[1], &g_pFrameSRView[1], &g_pFrameRTView[1]) ) return false; { D3D10_RASTERIZER_DESC desc; GutSetDX10DefaultRasterizerDesc(desc); desc.CullMode = D3D10_CULL_NONE; g_pDevice->CreateRasterizerState(&desc, &g_pNoCull); g_pDevice->RSSetState(g_pNoCull); } { D3D10_BLEND_DESC desc; GutSetDX10DefaultBlendDesc(desc); g_pDevice->CreateBlendState(&desc, &g_pNoBlend); desc.BlendEnable[0] = TRUE; desc.SrcBlend = D3D10_BLEND_ONE; desc.DestBlend = D3D10_BLEND_ONE; g_pDevice->CreateBlendState(&desc, &g_pAddBlend); } { D3D10_DEPTH_STENCIL_DESC desc; GutSetDX10DefaultDepthStencilDesc(desc); desc.DepthWriteMask = D3D10_DEPTH_WRITE_MASK_ZERO; desc.DepthEnable = FALSE; g_pDevice->CreateDepthStencilState(&desc, &g_pNoZWrite); g_pDevice->OMSetDepthStencilState(g_pNoZWrite, 0); } return true; }
bool InitResourceDX10(void) { g_pDevice = GutGetGraphicsDeviceDX10(); ID3D10Blob *pVSCode = NULL; // 載入Vertex Shader g_pVertexShader = GutLoadVertexShaderDX10_HLSL("../../shaders/vertex_color_dx10.hlsl", "VS", "vs_4_0", &pVSCode); if ( NULL==g_pVertexShader ) return false; // 載入Pixel Shader g_pPixelShader = GutLoadPixelShaderDX10_HLSL("../../shaders/vertex_color_dx10.hlsl", "PS", "ps_4_0"); if ( NULL==g_pPixelShader ) return false; CGutModel_DX10::LoadDefaultShader("../../shaders/gmodel_dx10.hlsl"); for ( int i=0; i<3; i++ ) { g_Model_DX10[i].ConvertToDX10Model(&g_Models[i]); } // 設定Vertex資料格式 D3D10_INPUT_ELEMENT_DESC layout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 } }; if ( D3D_OK != g_pDevice->CreateInputLayout( layout, sizeof(layout)/sizeof(D3D10_INPUT_ELEMENT_DESC), pVSCode->GetBufferPointer(), pVSCode->GetBufferSize(), &g_pVertexLayout ) ) return false; SAFE_RELEASE(pVSCode); // g_pBorderVertexBuffer = GutCreateVertexBuffer_DX10(sizeof(g_Border), g_Border); // 配置Shader讀取參數的記憶體空間 g_pConstantBuffer = GutCreateShaderConstant_DX10(sizeof(Matrix4x4)); // 計算出一個可以轉換到鏡頭座標系的矩陣 g_proj_matrix = GutMatrixPerspectiveRH_DirectX(70.0f, 1.0f, 0.1f, 100.0f); // 開?rasterizer state物件 D3D10_RASTERIZER_DESC rasterizer_state_desc; rasterizer_state_desc.FillMode = D3D10_FILL_SOLID; rasterizer_state_desc.CullMode = D3D10_CULL_BACK; rasterizer_state_desc.FrontCounterClockwise = true; rasterizer_state_desc.DepthBias = 0; rasterizer_state_desc.DepthBiasClamp = 0.0f; rasterizer_state_desc.SlopeScaledDepthBias = 0.0f; rasterizer_state_desc.DepthClipEnable = false; rasterizer_state_desc.ScissorEnable = false; rasterizer_state_desc.MultisampleEnable = false; rasterizer_state_desc.AntialiasedLineEnable = false; if ( D3D_OK != g_pDevice->CreateRasterizerState(&rasterizer_state_desc, &g_pRasterizerState) ) return false; g_pDevice->RSSetState(g_pRasterizerState); return true; }