1 / 24

GraphGame gg00 2 - Effect

GraphGame gg00 2 - Effect. Effect framework, HLSL shader László Szécsi. Effects11. 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

kathie
Download Presentation

GraphGame gg00 2 - Effect

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Effects11 • 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. ID3DX11Effect interface • 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 .fxfileban • HLSL shader kódok

  4. Effectframework beépítése a projektünkbe • 1. lehetőség • forrás lefordítása • <dxsdk dir>/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 GraphGamesolutionhöz

  5. Effect11 project beépítése • copy • c:\Program Files\Microsoft DirectX SDK (June 2010)\Samples\C++\Effects11\ • GraphGame\Projects • solution/add/existing project • GraphGame/Projects/Effects11/Effects11_2010.vcxproj • delete • GraphGame/Projects/Effects11-ben • Debug, Release folder, sdf, slnfileok

  6. Effect11 project beépítése II • project properties • Output directory és intermediatedirectory • másoljuk át a gg001-Triangle propertypageéről • Effects11 jobb klikk • build • az eredmény lib ide kerül • GraphGame/Bin/Debug/Projects/Effects11/

  7. A gg002-Effect project létrehozása • Lehetne ugyanúgy mint ahogy a gg001-Triangle projectet létrehoztuk • de minek melózzunk kétszer • Helyette • GraphGame/Project/gg001-Triangle foldercopy/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. A gg002-Effect project II • 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. A gg002-Effect futtatása • jobb klikk/setasstartup project

  10. Mi a terv? • Most tartunk ott ahol eddig • Ezt a projectet szeretnénk feljavítani • Hogy effectfileban adhassuk meg a shadereket • Ehhez • be kell linkelni az effectframeworkot • azt használni a kézi shaderek helyett

  11. Projectek közötti függőség • gg002-Effect használja az Effect11 által gyártott libet • project properties/commonproperties/frameworks and references • add newreference: Effects11 • figyeljük meg, hogy link libraryreferences: true • ezért nem kell a lib-et külön beállítanunk

  12. Effect11 include könyvtár • gg002-Effect project properties • configurationproperties/c++/additionalincludedirectories • $(SolutionDir)/Projects/Effects11/Inc

  13. Effect fileok • 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 solutionexplorerbe (Add New Filter) • abba egy main.fxfile • add newitem/utility/text file

  14. #3.0 fx/main.fx 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() ) ); } }

  15. #4.2 gg002-Effect.cpp #include "DXUT.h" #include "d3dx11effect.h"

  16. #4.3 gg002-Effect.cpp ID3D11VertexShader* vertexShader; ID3D11PixelShader* pixelShader; ID3DX11Effect* effect;

  17. #4.4 gg002-Effect.cpp 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);

  18. #4.5 gg002-Effect.cpp pd3dDevice->CreateInputLayout(&positionElement, 1, vertexShaderByteCode->GetBufferPointer(), vertexShaderByteCode->GetBufferSize(), &inputLayout);

  19. #4.6 gg002-Effect.cpp 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);

  20. #4.7 gg002-Effect.cpp // 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);

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

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

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

  24. Effectframework háromszög kész

More Related