Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s
Prodotto matriciale a blocchi Partiziono le matrici A e B con sottomatrici quadrate di ugual dimensione nello specifico con blocchi di 2x2 elementi Memorizzo sulla memoria video i singoli sottoblocchi di 2x2 elementi in strutture rgbablockAblockB
i,k k,j x = C i,j = blockA.rgba * blockB.rara blockA.grab * blockB.bgbg Prodotto matriciale a blocchi Prodotto matriciale del generico sottoblocco C i,j da 2x2 elementi calcolato con strutture rgba blockA.rgba blockB.rgba i,k k,j blockA.rgba * blockB.rara tex2D (Tex_Ck, gl_FragCoord) + ( blockA.rgba * blockB.rara ) + ( blockA.grab * blockB.bgbg )
Prodotto matriciale a blocchi blockAblockB vec2 texCoordA = vec2( k_parz, gl_FragCoord.y ); vec2 texCoordB = vec2( gl_FragCoord.x, k_parz ); vec4 blockA = vec4( texture2DRect( textureA, texCoordA ) ); vec4 blockB = vec4( texture2DRect( textureB, texCoordB ) ); vec4 blockC = vec4( texture2DRect( Tex_Ck, gl_FragCoord) ); X j X = colonne = j Y i Y = righe = i
Prodotto matriciale a blocchi uniform sampler2DRect Tex_Ck ; uniform sampler2DRect textureA; uniform sampler2DRect textureB; uniform float k_parz; void main(void) { vec2 texCoordA = vec2( k_parz, gl_FragCoord.y ); vec2 texCoordB = vec2( gl_FragCoord.x, k_parz ); vec4 blockA = vec4( texture2DRect( textureA, texCoordA ) ); vec4 blockB = vec4( texture2DRect( textureB, texCoordB ) ); vec4 blockC = vec4( texture2DRect( Tex_Ck, gl_FragCoord) ); blockC += vec4( (blockA.rgba * blockB.rara) + (blockA.grab * blockB.bgbg) ); gl_FragColor = vec4(blockC); }OpenGL Shader Multi-Pass
Prodotto matriciale a blocchi glFramebufferTexture2DEXT glActiveTexture glBindTexture Off-Screen Render to Texture Input:Red Texture Output: Green Texture Input:Green Texture Output: Red Texture Tex_Ck
VersionePre-Wrappata le texture sono memorizzate per righe di pixel e i pixel in successione sono memorizzati i canali di colore rgba. A = Prodotto matriciale a blocchi
uniform sampler2DRect mat; void main(void){ vec4 block; int mod_x = int(mod(gl_FragCoord.x, 2)); int div_x = int(gl_FragCoord.x / 2); int mult_y = int(gl_FragCoord.y)* 2; float x = div_x; float y = mult_y; vec4 rg_block = texture2DRect( mat, vec2( x, y ) ); vec4 ba_block = texture2DRect( mat, vec2( x, y ) ); if (mod_x == 0) { block.rg = rg_block.rg; block.ba = ba_block.rg; } if (mod_x == 1) { block.rg = rg_block.ba; block.ba = ba_block.ba; } gl_FragColor = vec4( block ); }OpenGLPre-Wrapped Shader Single-Pass
Geforce GO 7300