Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Effect framework, HLSL shader László Szécsi. forráskódban elérhető egyszerűsíti a shaderek fordítását, rajzolási állapot beállítását – pass: egy ilyen.

Hasonló előadás


Az előadások a következő témára: "Effect framework, HLSL shader László Szécsi. forráskódban elérhető egyszerűsíti a shaderek fordítását, rajzolási állapot beállítását – pass: egy ilyen."— Előadás másolata:

1 Effect framework, HLSL shader László Szécsi

2 forráskódban elérhető egyszerűsíti a shaderek fordítását, rajzolási állapot beállítását – pass: egy ilyen beállítóscript – technique: pass gyűjtemény – group: technique gyűjtemény erőforrások, uniform paraméterek átadása – globális változók

3 ID3DXEffectVariable gyűjtemény – scalar, vector, matrix – shaderResourceView (pl. textúra) ID3DXEffectGroup – ID3DXEffectTechnique ID3DXEffectPass – shader programok beállítása – rasterizer, blend, depthstencil állapot beállítása mindezek egy.fx fileban – HLSL shader kódok

4 1. lehetőség – forrás lefordítása – /Samples/C++/Effects11 – kapott lib file belinkelése 2. lehetőség (bele akarunk hekkelni esetleg) – forrás bemásolása a GraphGame könyvtárba – project hozzáadása a GraphGame solutionhöz

5 copy – c:\Program Files\Microsoft DirectX SDK (June 2010)\Samples\C++\Effects11\ – GraphGame\Projects solution/add/existing project – GraphGame/Projects/Effects11/Effects11_2010.vc xproj delete – GraphGame/Projects/Effects11-ben – Debug, Release folder, sdf, sln fileok

6 project properties – Output directory és intermediate directory – másoljuk át a gg001-Triangle property pageéről Effects11 jobb klikk – build – az eredmény lib ide kerül GraphGame/Bin/Debug/Projects/Effects11/

7 Lehetne ugyanúgy mint ahogy a gg001- Triangle projectet létrehoztuk – de minek melózzunk kétszer Helyette – GraphGame/Project/gg001-Triangle folder copy/paste – gg001-Triangle – Copy átnevezése gg002-Effect-re – gg001-Triangle_2010.vcxproj átnevezése gg002- Effect_2010.vcxproj –ra – ugyanígy a.filters is

8 solution/add exisiting project – GraphGame\Projects\gg002-Effect\gg002- Effect_2010.vcxproj most van két gg001-Triangle :( jobb klikk az alsón, ami nem bold rename: gg002-Effect utána még a cpp-t is átnevezhetjük ugyanígy

9 jobb klikk/set as startup project

10 Most tartunk ott ahol eddig Ezt a projectet szeretnénk feljavítani Hogy effect fileban adhassuk meg a shadereket Ehhez – be kell linkelni az effect frameworkot – azt használni a kézi shaderek helyett

11 gg002-Effect használja az Effect11 által gyártott libet project properties/common properties/frameworks and references – add new reference: Effects11 – figyeljük meg, hogy link library references: true – ezért nem kell a lib-et külön beállítanunk

12 gg002-Effect project properties – configuration properties/c++/additional include directories $(SolutionDir)/Projects/Effects11/Inc

13 hozzunk létre egy ‘fx’ alkönyvtárat a gg002- Effect-en belül (ha még nincs meg) – új folder a projectkönyvtárba – új filter a solution explorerbe (Add New Filter) abba egy main.fx file – add new item/utility/text file

14 float4 vsIdle(float4 pos : POSITION) : SV_Position { return pos; } float4 psIdle() : SV_Target { return float4(0, 1, 0, 1); } technique11 idle { pass idle { SetVertexShader ( CompileShader( vs_5_0, vsIdle() ) ); SetPixelShader( CompileShader( ps_5_0, psIdle() ) ); } #3.0

15 #include "DXUT.h" #include "d3dx11effect.h" #4.2

16 ID3D11VertexShader* vertexShader; ID3D11PixelShader* pixelShader; ID3DX11Effect* effect; #4.3

17 const char* vertexShaderCode = "float4 vsIdle(float4 pos : POSITION) : SV_Position {return pos;}"; ID3DBlob* vertexShaderByteCode; D3DX11CompileFromMemory(vertexShaderCode, strlen(vertexShaderCode), NULL, NULL, NULL, "vsIdle", "vs_5_0", 0, 0, NULL, &vertexShaderByteCode, NULL, NULL); pd3dDevice- >CreateVertexShader(vertexShaderByteCode ->GetBufferPointer(), vertexShaderByteCode->GetBufferSize(), NULL, &vertexShader); #4.4

18 pd3dDevice- >CreateInputLayout(&positionElemen t, 1, vertexShaderByteCode- >GetBufferPointer(), vertexShaderByteCode- >GetBufferSize(), &inputLayout); #4.5

19 const char* pixelShaderCode = "float4 psIdle() : SV_Target {return float4(1, 0, 0, 1);}"; ID3DBlob* pixelShaderByteCode; D3DX11CompileFromMemory(pixelShaderCode, strlen(pixelShaderCode), NULL, NULL, NULL, "psIdle", "ps_5_0", 0, 0, NULL, &pixelShaderByteCode, NULL, NULL); pd3dDevice- >CreatePixelShader(pixelShaderByteCode- >GetBufferPointer(), pixelShaderByteCode->GetBufferSize(), NULL, &pixelShader); #4.6

20 // append to createDevice ID3DBlob* compiledEffect = NULL; D3DX11CompileFromFileW( L"fx/main.fx", NULL, NULL, NULL, "fx_5_0", 0, 0, NULL, &compiledEffect, NULL, NULL); D3DX11CreateEffectFromMemory( compiledEffect- >GetBufferPointer(), compiledEffect->GetBufferSize(), 0, pd3dDevice, &effect); #4.7

21 // append to createDevice D3DX11_PASS_DESC idlePassDesc; effect->GetTechniqueByName("idle") ->GetPassByName("idle") ->GetDesc(&idlePassDesc); pd3dDevice->CreateInputLayout( &positionElement, 1, idlePassDesc.pIAInputSignature, idlePassDesc.IAInputSignatureSize, &inputLayout); #4.8

22 ...destroyDevice... { effect->Release(); vertexBuffer->Release(); inputLayout->Release(); vertexShader->Release(); pixelShader->Release(); #4.9

23 context->VSSetShader(vertexShader, NULL, 0); context->PSSetShader(pixelShader, NULL, 0); effect->GetTechniqueByName("idle") ->GetPassByName("idle") ->Apply(0, context); context->Draw(3, 0); #4.10

24


Letölteni ppt "Effect framework, HLSL shader László Szécsi. forráskódban elérhető egyszerűsíti a shaderek fordítását, rajzolási állapot beállítását – pass: egy ilyen."

Hasonló előadás


Google Hirdetések