日誌2016-09-08 03:23
【程式】Direct3D11小試(2)作者:Shark
D3D11_BLEND_DESC blendDesc; D3D11_RENDER_TARGET_BLEND_DESC* blendDesc2=blendDesc.RenderTarget; ………… blendDesc2->SrcBlend=D3D11_BLEND_ONE; blendDesc2->SrcBlendAlpha=D3D11_BLEND_ONE; blendDesc2->DestBlend=D3D11_BLEND_ZERO; blendDesc2->DestBlendAlpha=D3D11_BLEND_ZERO; device->CreateBlendState(&blendDesc, & copyBlendState); |
D3D11_RASTERIZER_DESC rsState; ZeroMemory(&rsState, sizeof(D3D11_RASTERIZER_DESC)); rsState.FillMode=D3D11_FILL_SOLID; rsState.CullMode=D3D11_CULL_NONE; device->CreateRasterizerState(&rsState, &_2dState); |
const float rectVertex[]={0,-0.2, -0.4,-0.2, -0.4,0.4, 0,0.4}; const int16_t rectTexCoord[]={0,0,1,0,1,1,0,1}; |
for(int i=0;i<TEX_H;i++){ int gValue=i*255/TEX_H; for(int j=0;j<TEX_W;j++){ int bValue=j*255/TEX_W; *pixel=0xff000000|bValue|(gValue<<8); pixel++; } } |
sampler defaultSampler{ Filter=MIN_MAG_MIP_LINEAR; AddressU=Wrap; AddressV=Wrap; }; |
D3DXMatrixOrthoOffCenterLH((D3DXMATRIX*)mat, 0,screenW,screenH,0,0,1); matrixStack->LoadMatrix((D3DXMATRIX*)mat); |
uniform float4x4 modelViewMatrix :register(b1); cbuffer shaderState:register(b0){ uniform float4 globalColor; uniform float2 texSizeRcp; } Texture2D <float4> texture1:register(t0); |
struct ShaderConstants{ float color[4]; float texSizeRcp[2]; }; D3D11_MAPPED_SUBRESOURCE ms; context->Map(buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &ms); memcpy(ms.pData, data, byteNum); context->Unmap(buffer, 0); |
const ParticleVertex Vertices[]={ {{0,30},{0,0},0xffffffff}, {{30,0},{0,TEX_H},0xffffffff}, {{0,-30},{TEX_W,TEX_H},0xffffffff}, {{-30,0},{TEX_W,0},0xffffffff}, }; const float rectVertex[]={0,0, 50,0, 50,50, 0,50}; const int16_t rectTexCoord[]={0,0,TEX_W,0,TEX_W,TEX_H,0,TEX_H}; |
cbuffer register1:register(b1){ uniform float4x4 modelViewMatrix; } cbuffer shaderState:register(b0){ uniform float4 globalColor; uniform float2 texSizeRcp; } Texture2D <float4> texture1:register(t0); |
ID3D11Device IDXGISwapChain ID3D11DeviceContext ID3D11RenderTargetView ID3D11Buffer* shaderStateUniform; shader裡的constant buffer ID3D11Buffer* modelViewMatrixUniform; ID3D11Buffer* commonVertexBuffer; ID3D11Buffer* commonTexCoordBuffer; ID3D11Buffer* fanIndex; 模擬fan和quad的index array ID3D11Buffer* quadIndex; ID3D11VertexShader* particleVS; ID3D11InputLayout* particleLayout; ID3D11VertexShader* normalVS; ID3D11InputLayout* normalLayout; 基本上一個vertex shader固定配一個layout ID3D11PixelShader* flatPS; 純色 ID3D11PixelShader* multiplyPS; 套用貼圖 ID3D11RasterizerState 2個,2D和3D ID3D11BlendState 5個,上面說的5種blend mode ID3DXMatri xStack |