void ResizeWindowDX9(int width, int height) { GutResetGraphicsDeviceDX9(); // 取得Direct3D 9裝置 LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9(); // 投影矩陣, 重設水平跟垂直方向的視角. float aspect = (float) height / (float) width; g_fOrthoWidth = g_fOrthoSize; g_fOrthoHeight = g_fOrthoSize; if ( aspect > 1.0f ) g_fOrthoHeight *= aspect; else g_fOrthoWidth /= aspect; g_projection_matrix = GutMatrixOrthoRH_DirectX(g_fOrthoWidth, g_fOrthoHeight, 0.1f, 100.0f); device->SetTransform(D3DTS_PROJECTION, (D3DMATRIX *) &g_projection_matrix); // 計算出一個可以轉換到鏡頭座標系的矩陣 //device->SetTransform(D3DTS_VIEW, (D3DMATRIX *) &view_matrix); // 關閉打光 device->SetRenderState(D3DRS_LIGHTING, FALSE); // 畫出正向跟反向的三角形 device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); // trilinear device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); // trilinear device->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); device->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(1, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); }
void CGutFontDX10::Render(void) { UINT stride = sizeof(_FontVertex); UINT offset = 0; // ID3D10Device *pDevice = GutGetGraphicsDeviceDX10(); // 使用平行視角 Matrix4x4 proj_matrix = GutMatrixOrthoRH_DirectX(m_fWidth, m_fHeight, 0.0f, 1.0f); Matrix4x4 view_matrix; view_matrix.Identity(); view_matrix[3].Set(-m_fWidth/2.0f, -m_fHeight/2.0f, 0.0f, 1.0f); Matrix4x4 vp_matrix = view_matrix * proj_matrix; // 更新shader參數 Matrix4x4 *pConstData; m_pShaderConstant->Map( D3D10_MAP_WRITE_DISCARD, NULL, (void **) &pConstData ); *pConstData = vp_matrix; m_pShaderConstant->Unmap(); // pDevice->RSSetState(m_pRasterizerState); // 設定Shader pDevice->VSSetShader(m_pVertexShader); pDevice->PSSetShader(m_pPixelShader); // 設定vertex shader讀取參數的記憶體位罝 pDevice->VSSetConstantBuffers(0, 1, &m_pShaderConstant); // 套用字型貼圖 pDevice->PSSetShaderResources(0, 1, &m_pFontTexture); // 設定vertex資料格式 pDevice->IASetInputLayout(m_pVertexLayout); // 設定vertex buffer pDevice->IASetVertexBuffers(0, 1, &m_pVertexBuffer, &stride, &offset); pDevice->IASetIndexBuffer(m_pIndexBuffer, DXGI_FORMAT_R16_UINT, 0); // 設定三角形頂點索引值資料排列是triangle list pDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST); // 畫出文字 pDevice->DrawIndexed(m_iNumCharacters*6, 0, 0); }
bool InitResourceDX9(void) { // 取得Direct3D 9裝置 LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9(); // 設定視角轉換矩陣 g_projection_matrix = GutMatrixOrthoRH_DirectX(g_fOrthoWidth, g_fOrthoHeight, 0.1f, 100.0f); device->SetTransform(D3DTS_PROJECTION, (D3DMATRIX *) &g_projection_matrix); // 關閉打光 device->SetRenderState(D3DRS_LIGHTING, FALSE); // 畫出正向跟反向的三角形 device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); // 載入貼圖 g_pTexture0 = GutLoadTexture_DX9("../../textures/brickwall.tga"); g_pTexture1 = GutLoadTexture_DX9("../../textures/spotlight_effect.tga"); // trilinear device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); // trilinear device->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); device->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(1, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); return true; }
void CGutFontDX9::Render(void) { if ( m_iNumCharacters==0 ) return; LPDIRECT3DDEVICE9 pDevice = GutGetGraphicsDeviceDX9(); // 套用字型貼圖 sModelMaterial_DX9 mtl; mtl.m_bCullFace = false; mtl.m_pTextures[0] = m_pFontTexture; mtl.Submit(); // 開啟Alpha Test pDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); pDevice->SetRenderState(D3DRS_ALPHAREF, 128); pDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER); // 使用平行視角鏡頭 Matrix4x4 proj_matrix = GutMatrixOrthoRH_DirectX(m_fWidth, m_fHeight, 0.0f, 1.0f); Matrix4x4 view_matrix; view_matrix.Identity(); Matrix4x4 ident_matrix; ident_matrix.Identity(); view_matrix[3].Set(-m_fWidth/2.0f, -m_fHeight/2.0f, 0.0f, 1.0f); // 設定轉換矩陣 pDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)&proj_matrix); pDevice->SetTransform(D3DTS_VIEW, (D3DMATRIX*)&view_matrix); pDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)&ident_matrix); // 設定頂點資料格式 pDevice->SetFVF(D3DFVF_XYZ|D3DFVF_TEX1); // 畫出所有的文字 pDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, m_iNumCharacters*4, m_iNumCharacters*2, m_pIndexArray, D3DFMT_INDEX16, m_pVertexArray, sizeof(_FontVertex)); }
void ResizeWindowDX10(int width, int height) { GutResetGraphicsDeviceDX10(); // 投影矩陣, 重設水平跟垂直方向的視角. float aspect = (float) height / (float) width; g_fOrthoWidth = g_fOrthoSize; g_fOrthoHeight = g_fOrthoSize; if ( aspect > 1.0f ) g_fOrthoHeight *= aspect; else g_fOrthoWidth /= aspect; g_proj_matrix = GutMatrixOrthoRH_DirectX(g_fOrthoWidth, g_fOrthoHeight, 0.1f, 100.0f); }
bool InitResourceDX10(void) { g_pDevice = GutGetGraphicsDeviceDX10(); ID3D10Blob *pVSCode = NULL; // 載入Vertex Shader g_pVertexShader = GutLoadVertexShaderDX10_HLSL("../../shaders/texture_alphatest_dx10.hlsl", "VS", "vs_4_0", &pVSCode); if ( NULL==g_pVertexShader ) return false; // 載入Pixel Shader g_pPixelShader = GutLoadPixelShaderDX10_HLSL("../../shaders/texture_alphatest_dx10.hlsl", "PS", "ps_4_0"); if ( NULL==g_pPixelShader ) return false; g_pTexture0 = GutLoadTexture_DX10("../../textures/brickwall_broken.tga"); g_pTexture1 = GutLoadTexture_DX10("../../textures/spotlight_effect.tga"); if ( g_pTexture0==NULL || g_pTexture1==NULL ) 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, sizeof(layout)/sizeof(D3D10_INPUT_ELEMENT_DESC), pVSCode->GetBufferPointer(), pVSCode->GetBufferSize(), &g_pVertexLayout ) ) return false; SAFE_RELEASE(pVSCode); D3D10_BUFFER_DESC cbDesc; // vertex buffer { cbDesc.ByteWidth = sizeof(Vertex_VT) * 4; cbDesc.Usage = D3D10_USAGE_DYNAMIC ; cbDesc.BindFlags = D3D10_BIND_VERTEX_BUFFER; cbDesc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE; cbDesc.MiscFlags = 0; D3D10_SUBRESOURCE_DATA subDesc; ZeroMemory(&subDesc, sizeof(subDesc)); subDesc.pSysMem = g_Quad; // 配置一塊可以存放Vertex的記憶體, 也就是Vertex Buffer. if ( D3D_OK != g_pDevice->CreateBuffer( &cbDesc, &subDesc, &g_pVertexBuffer ) ) return false; } // 配置Shader參數的記憶體空間 { cbDesc.ByteWidth = sizeof(Matrix4x4); cbDesc.Usage = D3D10_USAGE_DYNAMIC; cbDesc.BindFlags = D3D10_BIND_CONSTANT_BUFFER; cbDesc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE; cbDesc.MiscFlags = 0; if ( D3D_OK != g_pDevice->CreateBuffer( &cbDesc, NULL, &g_pConstantBuffer ) ) return false; } // rasterizer state物件 { D3D10_RASTERIZER_DESC desc; GutSetDX10DefaultRasterizerDesc(desc); desc.CullMode = D3D10_CULL_NONE; desc.FrontCounterClockwise = true; if ( D3D_OK != g_pDevice->CreateRasterizerState(&desc, &g_pRasterizerState) ) return false; g_pDevice->RSSetState(g_pRasterizerState); } // depth stencil state { D3D10_DEPTH_STENCIL_DESC desc; GutSetDX10DefaultDepthStencilDesc(desc); desc.DepthEnable = FALSE; desc.DepthWriteMask = D3D10_DEPTH_WRITE_MASK_ZERO; desc.DepthFunc = D3D10_COMPARISON_ALWAYS; desc.StencilEnable = TRUE; desc.StencilReadMask = 0xff; desc.StencilWriteMask = 0xff; desc.FrontFace.StencilFailOp = D3D10_STENCIL_OP_KEEP; desc.FrontFace.StencilDepthFailOp = D3D10_STENCIL_OP_KEEP; desc.FrontFace.StencilPassOp = D3D10_STENCIL_OP_REPLACE; desc.FrontFace.StencilFunc = D3D10_COMPARISON_ALWAYS; desc.BackFace = desc.FrontFace; // 這個設定用來設定像素的stencil值 g_pDevice->CreateDepthStencilState(&desc, &g_pStencilState_Replace); desc.FrontFace.StencilFunc = D3D10_COMPARISON_EQUAL; desc.BackFace = desc.FrontFace; // 這個設定用來做stencil test測試 g_pDevice->CreateDepthStencilState(&desc, &g_pStencilState_Test); } // blend state { D3D10_BLEND_DESC desc; GutSetDX10DefaultBlendDesc(desc); desc.BlendEnable[0] = TRUE; desc.SrcBlend = D3D10_BLEND_ONE; desc.DestBlend = D3D10_BLEND_ONE; desc.BlendOp = D3D10_BLEND_OP_ADD; desc.SrcBlendAlpha = D3D10_BLEND_ONE; desc.DestBlendAlpha = D3D10_BLEND_ONE; desc.BlendOpAlpha = D3D10_BLEND_OP_ADD; g_pDevice->CreateBlendState(&desc, &g_pBlendState); } // sampler state / texture filter { D3D10_SAMPLER_DESC desc; GutSetDX10DefaultSamplerDesc(desc); desc.Filter = D3D10_FILTER_MIN_MAG_MIP_LINEAR; desc.AddressU = D3D10_TEXTURE_ADDRESS_WRAP; desc.AddressV = D3D10_TEXTURE_ADDRESS_WRAP; desc.AddressW = D3D10_TEXTURE_ADDRESS_WRAP; g_pDevice->CreateSamplerState(&desc, &g_pSamplerState); for ( int i=0; i<4; i++ ) { g_pDevice->PSSetSamplers(i, 1, &g_pSamplerState); } } // 計算投影矩陣 g_view_matrix = GutMatrixLookAtRH(g_eye, g_lookat, g_up); g_proj_matrix = GutMatrixOrthoRH_DirectX(g_fOrthoWidth, g_fOrthoHeight, 0.1f, 100.0f); return true; }
bool ReInitResourceDX9(void) { LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9(); GutGetWindowSize(g_iWidth, g_iHeight); g_proj_matrix = GutMatrixOrthoRH_DirectX(g_iWidth, g_iHeight, 0.0f, 100.0f); int w = g_iWidth; int h = g_iHeight; g_ImageInfo.m_iWidth = g_iWidth; g_ImageInfo.m_iHeight = g_iHeight; g_ImageInfo.m_bProcedure = true; //D3DFORMAT fmt = D3DFMT_G16R16; D3DFORMAT fmt = D3DFMT_A8R8G8B8; device->SetRenderState(D3DRS_LIGHTING, FALSE); device->CreateTexture( w, h, 1, D3DUSAGE_RENDERTARGET, fmt, D3DPOOL_DEFAULT, &g_pTextures[TEX_HEIGHT0], NULL); if ( NULL==g_pTextures[TEX_HEIGHT0] ) return false; g_pTextures[TEX_HEIGHT0]->GetSurfaceLevel(0, &g_pSurfaces[TEX_HEIGHT0]); if ( NULL==g_pSurfaces[TEX_HEIGHT0] ) return false; device->CreateTexture( w, h, 1, D3DUSAGE_RENDERTARGET, fmt, D3DPOOL_DEFAULT, &g_pTextures[TEX_HEIGHT1], NULL); if ( NULL==g_pTextures[TEX_HEIGHT1] ) return false; if ( NULL==g_pTextures[TEX_HEIGHT1] ) return false; g_pTextures[TEX_HEIGHT1]->GetSurfaceLevel(0, &g_pSurfaces[TEX_HEIGHT1]); device->CreateTexture( w, h, 1, D3DUSAGE_RENDERTARGET, fmt, D3DPOOL_DEFAULT, &g_pTextures[TEX_HEIGHT2], NULL); if ( NULL==g_pTextures[TEX_HEIGHT2] ) return false; g_pTextures[TEX_HEIGHT2]->GetSurfaceLevel(0, &g_pSurfaces[TEX_HEIGHT2]); if ( NULL==g_pSurfaces[TEX_HEIGHT2] ) return false; device->CreateTexture( w, h, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &g_pTextures[TEX_NORMAL], NULL); if ( NULL==g_pTextures[TEX_NORMAL] ) return false; g_pTextures[TEX_NORMAL]->GetSurfaceLevel(0, &g_pSurfaces[TEX_NORMAL]); if ( NULL==g_pSurfaces[TEX_NORMAL] ) return false; device->GetRenderTarget(0, &g_pMainFramebuffer); device->GetDepthStencilSurface(&g_pMainDepthbuffer); device->SetRenderTarget(0, g_pSurfaces[0]); device->SetRenderTarget(1, g_pSurfaces[1]); device->SetRenderTarget(2, g_pSurfaces[2]); device->Clear(0, NULL, D3DCLEAR_TARGET, 0x0, 1.0f, 0); device->SetRenderTarget(0, g_pMainFramebuffer); device->SetRenderTarget(1, NULL); device->SetRenderTarget(2, NULL); device->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE); device->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL); device->SetRenderState(D3DRS_SPECULARMATERIALSOURCE, D3DMCS_MATERIAL); return true; }
void RenderFrameDX10(void) { Vector4 vClearColor(0.4f, 0.4f, 0.4f, 1.0f); // frame buffer ID3D10RenderTargetView *pRenderTargetView = GutGetDX10RenderTargetView(); // depth/stencil buffer ID3D10DepthStencilView *pDepthStencilView = GutGetDX10DepthStencilView(); // front/back buffer IDXGISwapChain *pSwapChain = GutGetDX10SwapChain(); // `清除顏色` g_pDevice->ClearRenderTargetView(pRenderTargetView, (float *)&vClearColor); // `清除`Depth/Stencil buffer g_pDevice->ClearDepthStencilView(pDepthStencilView, D3D10_CLEAR_DEPTH | D3D10_CLEAR_STENCIL, 1.0f, 0); Vector4 camera_lookat(0.0f, 0.0f, 0.0f); int w, h; GutGetWindowSize(w, h); Matrix4x4 view_matrix; Matrix4x4 ortho_proj = GutMatrixOrthoRH_DirectX(20.0f, 20.0f, 0.1f, 100.0f); // `前視圖` { D3D10_VIEWPORT vp = {0, 0, w/2, h/2, 0.0f, 1.0f}; g_pDevice->RSSetViewports(1, &vp); // view matrix Vector4 camera_pos(0.0f, -20.0f, 0.0f); Vector4 camera_up(0.0f, 0.0f, 1.0f); view_matrix = GutMatrixLookAtRH(camera_pos, camera_lookat, camera_up); // render objects RenderSolarSystemDX10(view_matrix, ortho_proj); } // `上視圖` { D3D10_VIEWPORT vp = {w/2, 0, w/2, h/2, 0.0f, 1.0f}; g_pDevice->RSSetViewports(1, &vp); // view matrix Vector4 camera_pos(0.0f, 0.0f, 20.0f); Vector4 camera_up(0.0f, 1.0f, 0.0f); view_matrix = GutMatrixLookAtRH(camera_pos, camera_lookat, camera_up); // render objects RenderSolarSystemDX10(view_matrix, ortho_proj); } // `右視圖` { D3D10_VIEWPORT vp = {0, h/2, w/2, h/2, 0.0f, 1.0f}; g_pDevice->RSSetViewports(1, &vp); // view matrix Vector4 camera_pos(20.0f, 0.0f, 0.0f); Vector4 camera_up(0.0f, 0.0f, 1.0f); view_matrix = GutMatrixLookAtRH(camera_pos, camera_lookat, camera_up); // render objects RenderSolarSystemDX10(view_matrix, ortho_proj); } // `使用者視角` { D3D10_VIEWPORT vp = {w/2, h/2, w/2, h/2, 0.0f, 1.0f}; g_pDevice->RSSetViewports(1, &vp); // view matrix Matrix4x4 view_matrix = g_Control.GetViewMatrix(); Matrix4x4 object_matrix = g_Control.GetObjectMatrix(); view_matrix = object_matrix * view_matrix; // render objects RenderSolarSystemDX10(view_matrix, g_proj_matrix); } // `畫邊線` { UINT stride = sizeof(Vertex_VC); UINT offset = 0; D3D10_VIEWPORT vp = {0, 0, w, h, 0.0f, 1.0f}; g_pDevice->RSSetViewports(1, &vp); // `設定`vertex shader g_pDevice->VSSetShader(g_pVertexShader); // `設定`pixel shader g_pDevice->PSSetShader(g_pPixelShader); // `設定vertex shader讀取參數的記憶體位置` g_pDevice->VSSetConstantBuffers(0, 1, &g_pConstantBuffer); Matrix4x4 *pConstData; g_pConstantBuffer->Map( D3D10_MAP_WRITE_DISCARD, NULL, (void **) &pConstData ); pConstData->Identity(); g_pConstantBuffer->Unmap(); g_pDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_LINELIST); g_pDevice->IASetVertexBuffers(0, 1, &g_pBorderVertexBuffer, &stride, &offset); g_pDevice->Draw(4, 0); } // `等待硬體掃結束, 然後才更新畫面.` pSwapChain->Present(1, 0); }
bool InitResourceDX10(void) { g_pDevice = GutGetGraphicsDeviceDX10(); ID3D10Blob *pVSCode = NULL; const char *shader = "../../shaders/texture_dx10.hlsl"; // 載入Vertex Shader g_pVertexShader = GutLoadVertexShaderDX10_HLSL(shader, "VS", "vs_4_0", &pVSCode); if ( NULL==g_pVertexShader ) return false; // 載入Pixel Shader g_pPixelShader = GutLoadPixelShaderDX10_HLSL(shader, "PS", "ps_4_0"); if ( NULL==g_pPixelShader ) return false; g_pTexture0 = GutLoadTexture_DX10("../../textures/brickwall.tga"); g_pTexture1 = GutLoadTexture_DX10("../../textures/spotlight_effect.tga"); if ( g_pTexture0==NULL || g_pTexture1==NULL ) 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, sizeof(layout)/sizeof(D3D10_INPUT_ELEMENT_DESC), pVSCode->GetBufferPointer(), pVSCode->GetBufferSize(), &g_pVertexLayout ) ) return false; SAFE_RELEASE(pVSCode); D3D10_BUFFER_DESC cbDesc; // vertex buffer cbDesc.ByteWidth = sizeof(Vertex_VT) * 4; cbDesc.Usage = D3D10_USAGE_DYNAMIC ; cbDesc.BindFlags = D3D10_BIND_VERTEX_BUFFER; cbDesc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE; cbDesc.MiscFlags = 0; D3D10_SUBRESOURCE_DATA subDesc; ZeroMemory(&subDesc, sizeof(subDesc)); subDesc.pSysMem = g_Quad; // 配置一塊可以存放Vertex的記憶體, 也就是Vertex Buffer. if ( D3D_OK != g_pDevice->CreateBuffer( &cbDesc, &subDesc, &g_pVertexBuffer ) ) return false; subDesc.pSysMem = g_FullScreenQuad; // 配置一塊可以存放Vertex的記憶體, 也就是Vertex Buffer. if ( D3D_OK != g_pDevice->CreateBuffer( &cbDesc, &subDesc, &g_pVertexBufferFullScreen ) ) return false; // 配置Shader參數的記憶體空間 cbDesc.ByteWidth = sizeof(Matrix4x4); cbDesc.Usage = D3D10_USAGE_DYNAMIC; cbDesc.BindFlags = D3D10_BIND_CONSTANT_BUFFER; cbDesc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE; cbDesc.MiscFlags = 0; if ( D3D_OK != g_pDevice->CreateBuffer( &cbDesc, NULL, &g_pConstantBuffer ) ) return false; { // rasterizer state物件 D3D10_RASTERIZER_DESC rasterizer_state_desc; rasterizer_state_desc.FillMode = D3D10_FILL_SOLID; rasterizer_state_desc.CullMode = D3D10_CULL_NONE; 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); } { D3D10_BLEND_DESC blend_desc; ZeroMemory(&blend_desc, sizeof(blend_desc)); blend_desc.BlendEnable[0] = TRUE; blend_desc.SrcBlend = D3D10_BLEND_ONE; blend_desc.DestBlend = D3D10_BLEND_ONE; blend_desc.BlendOp = D3D10_BLEND_OP_ADD; blend_desc.SrcBlendAlpha = D3D10_BLEND_ONE; blend_desc.DestBlendAlpha = D3D10_BLEND_ONE; blend_desc.BlendOpAlpha = D3D10_BLEND_OP_ADD; blend_desc.RenderTargetWriteMask[0] = D3D10_COLOR_WRITE_ENABLE_ALL; if ( D3D_OK != g_pDevice->CreateBlendState(&blend_desc, &g_pBlendState) ) return false; float dummy[4]; g_pDevice->OMSetBlendState(g_pBlendState, dummy, 0xffffffff); } { D3D10_DEPTH_STENCIL_DESC depthstencil_desc; ZeroMemory(&depthstencil_desc, sizeof(depthstencil_desc)); depthstencil_desc.DepthEnable = TRUE; depthstencil_desc.DepthWriteMask = D3D10_DEPTH_WRITE_MASK_ALL; depthstencil_desc.DepthFunc = D3D10_COMPARISON_ALWAYS; depthstencil_desc.StencilEnable = FALSE; g_pDevice->CreateDepthStencilState(&depthstencil_desc, &g_pDepthStencilState_ZDisable); } g_view_matrix = GutMatrixLookAtRH(g_eye, g_lookat, g_up); g_proj_matrix = GutMatrixOrthoRH_DirectX(g_fOrthoWidth, g_fOrthoHeight, 0.1f, 100.0f); return true; }