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.

Slides:



Advertisements
Hasonló előadás
2010/2011 ősz Klár Gergely  A DirectX egy alacsonyszintű API gyűjtemény  Multimédiás alkalmazások futtatására, írására szolgál  Részei.
Advertisements

Operációs Rendszerek I.
GraphGame gg001-Triangle
ARM tanfolyam 2. előadás.
Szécsi László. June 2010 DirectX SDK Visual Studio 2010.
Mesh betöltés, kirajzolás Szécsi László. dx11-ben nincs – játékfejlesztők írnak maguknak úgyis DXUT-ban van – CDXUTSDKMesh – csak sdkmesh formátumot tud.
GPGPU labor I. OpenGL, Cg.
A Windows 7 automatizált telepítése Windows AIK használatával
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Kovács Tamás & Mingesz Róbert 3. óra február 20., 23.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Programozás I. Horváth Ernő 1. Elérhetőségek Bauer Péter Horváth Ernő Tanszéki honlap
Első C programunk Visual C Express-ben Horváth Ernő 1.
C# tagfüggvények.
Entity framework Krizsán Zoltán
Számítógépes grafika OpenGL 1. gyakorlat.
Készítette: Keszthelyi Zsolt
DirectX a grafika laboron kívül. Mire lesz szükség Itt vannak a szükséges include és lib: iles/DXMinimalPack.zip.
Egyszerű webes alkalmazás fejlesztése
Mikrovezérlők, perifériák laboratóriumi gyakorlat 3. óra szeptember 18. Mingesz Róbert v
V 1.0 ÓE-NIK, Programozás I. A Microsoft Visual Studio 2010 használata.
2008/2009 tavasz Klár Gergely  A DirectX egy alacsonyszintű API gyűjtemény  Multimédiás alkalmazások futtatására, írására szolgál 
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!
J.Zs.Cs.: Vizuális programozás (c) 2010 Vizuális programozás Fájl- és állományrendszer kezelés Névtér: System.IO.
Segédlet vizuális programozáshoz Kovács László
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Motor II. Env map Spotlight Szécsi László. Letöltés /code/E/code/EggCoreSecondBase.zip Kibontani (vagy előző labor folyt.):
Terep Szécsi László. Mechanizmus NxHeightField-ek definiálása PhysicsModel-be NxHeightFieldShapeDesc-ek betöltése Mesh-ek gyártása az NxHeightField- ekből.
DirectX9 empty project Szécsi László. Visual Studio Első indításkor C++ választása.
Motor I. Scene graph XML Rendering Szécsi László.
Environment mapping Szécsi László. Új osztály: Lab3EnvMap copy&paste: Lab2Trafo.h -> Lab3EnvMap.h copy&paste: Lab2Trafo.cpp -> Lab3EnvMap.cpp copy&paste:
Transzformációk, textúrák, árnyalás Szécsi László.
DirectX9 empty project Szécsi László. Project létrehozása Microsoft DirectX SDK (August 2008) telepítése Start Menu \ Microsoft DirectX SDK (August 2008)\
Kamera, 3D, transzformációk Szécsi László. Math.zip kibontása az Egg projectkönyvtárba – float2, foat3, float4 típusok, HLSL-ben megszokott műveletekkel.
Plakátok, részecskerendszerek Grafikus játékok fejlesztése Szécsi László g09-billboard.
Megjelenítő-motor, színtér- menedzsment Szécsi László.
Többmenetes renderelés Grafikus játékok fejlesztése Szécsi László g11-multipass.
Grafikus játékok fejlesztése Szécsi László t09-texture
OO framework, Egg util library László Szécsi. Projektek nem osztoznak semmilyen kódon – DXUT mindegyikben – effect betöltés, mesh betöltés, GUI mindegyikbe.
Geometry instancing Szécsi László. copy-paste-rename gg009-Gui folder vcxproj, filters átnevezés solution/add existing project rename project working.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
Textúrázás Szécsi László. giraffe.jpg letöltése SolutionDir/Media folderbe.
Pipeline Vertex shader Fragment shader. Transzformációs modul A modellünket a saját koordinátarendszerében adjuk meg Azonban a saját koordinátarendszerükben.
ARM tanfolyam 2. előadás.
1. Feladat Hozzunk létre egy olyan programot amely számokat ír ki és a felhasználónak időre be kell gépelni ezeket.
Objektum orientált programozás
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
2. Gyakorlat Zalatnai Csongor
Apache Ant 2. gyakorlat Alkalmazásfejlesztés /2 Gyakorlat Zalatnai Csongor.
5. gyakorlat Fleiner Rita.
A C++ nyelv.
Számítógépes grafika gyakorlat DirectX segítség A következő dolgokra van szükség: CG Toolkit: 
Vizualizáció és képszintézis Sugárkövetés (Dart + GLSL) Szécsi László.
DLL használata és készítése Feladat
1 Setup Project készítése Szabadi Tamás
Számítógépes grafika DirectX 7. gyakorlat. Emlékeztető Múlt órán mesheket és transzformációkat használtunk Most primitívkirajzoláshoz nézünk meg egy hasznos.
A grafikus hardware programozása
Alkalmazásfejlesztés gyakorlat
Vizualizáció és képszintézis
SAS Base bevezetés Csicsman József
Szécsi László 3D Grafikus Rendszerek 14. előadás
Vizualizáció és képszintézis
gg004-Mesh project copy-paste-rename gg002-App folder
Kamera, 3D, transzformációk Szécsi László
JavaScript a böngészőben
Web programozás és haladó fejlesztési technikák – C#
OO framework, Egg util library László Szécsi
GraphGame gg001-Triangle
Environment mapping Szécsi László
Előadás másolata:

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 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

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

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

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

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/

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

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

jobb klikk/set as startup project

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

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

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

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

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

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

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

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

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

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

// 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

// 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

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

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