[ SaiCoder @ 21.02.2011. 17:32 ] @
Pozdrav svima,

Trenutno radim jedan program u kome vrsim dosta paralelnih racunanja.
CPU ima dosta losije performanse(u ovom slucaju), pa sam odlucio za GPU.
Razumem se malo u 3D programiranje, ali najveci problem mi pravi pisanje shader-a (pixel shader).

Posto sam potpuni pocetnik sto se tice HLSL-a, imam nekoliko pitanja:

npr: Ako imam najednostavniji pxSh

Code:

sampler Screen;
float4 mainSh(float2 texCoord: TEXCOORD) : COLOR
{
    float4 color = tex2D(Screen, texCoord);    
    return color;
}

technique NekaTeh 

    pass Pass0 
    {         
         PixelShader = compile ps_2_0 mainSh(); 
    } 



1. Kao mogu da ekstraktujem iz 'color' dva kanala npr.
RG u jednu promjenjljivu(tipa double)
BA u drugu promjenjljivu(isto)
i da posle racunanja i cega vec to opet upakujem u float4?

2. Kao da dobijem indekse (x,y) trenutnog piksela koji se obradjuje?


Unapred HVALA
[ glorius @ 27.02.2011. 14:59 ] @
Odgovor na 1. pitanje:

HLSL koristi tzv. swizzle operator. Mozes videti detaljnje na netu.

Code:


float4 color;

float2 firstPart = color.rg;
float2 secondPart = color.ba;

float4 colorAgain = float4(firstPart, secondPart); 



Swizzle je fleksibilan, mozes pisati float4 value = color.rrrr. Za vise detalja pogledaj na google pod swizzle HLSL searchom.

Odgovor na 2. pitanje mozes naci ovde:
http://forums.create.msdn.com/forums/p/29835/168065.aspx