# HG changeset patch # User John Tsiombikas # Date 1345514253 -10800 # Node ID 48cfd351a9be33ef201aa1856ea1b9fd9a76799b # Parent 8a0ae6b4aa9b7663d8846fadf2fce8fb3c9f6545 mrt going on nicely diff -r 8a0ae6b4aa9b -r 48cfd351a9be prototype/sdr/deferred.p.glsl --- a/prototype/sdr/deferred.p.glsl Tue Aug 21 04:29:49 2012 +0300 +++ b/prototype/sdr/deferred.p.glsl Tue Aug 21 04:57:33 2012 +0300 @@ -4,17 +4,16 @@ void main() { vec2 tc = gl_TexCoord[0].st; - //vec4 texel0 = texture2D(mrt0, gl_TexCoord[0].st * s); vec4 texel; if(tc.x < 0.25) { texel = texture2D(mrt0, tc * vec2(4.0, 1.0) * tex_scale); } else if(tc.x < 0.5) { - texel = texture2D(mrt0, (tc - vec2(0.25, 0.0)) * vec2(4.0, 1.0) * tex_scale); + texel = texture2D(mrt1, (tc - vec2(0.25, 0.0)) * vec2(4.0, 1.0) * tex_scale); } else if(tc.x < 0.75) { - texel = texture2D(mrt0, (tc - vec2(0.5, 0.0)) * vec2(4.0, 1.0) * tex_scale); + texel = texture2D(mrt2, (tc - vec2(0.5, 0.0)) * vec2(4.0, 1.0) * tex_scale); } else { - texel = texture2D(mrt0, (tc - vec2(0.75, 0.0)) * vec2(4.0, 1.0) * tex_scale); + texel = texture2D(mrt3, (tc - vec2(0.75, 0.0)) * vec2(4.0, 1.0) * tex_scale); } gl_FragColor = texel; diff -r 8a0ae6b4aa9b -r 48cfd351a9be prototype/sdr/mrt.p.glsl --- a/prototype/sdr/mrt.p.glsl Tue Aug 21 04:29:49 2012 +0300 +++ b/prototype/sdr/mrt.p.glsl Tue Aug 21 04:57:33 2012 +0300 @@ -1,10 +1,25 @@ -uniform sampler2D tex_dif; +/* MRT assignments + * 0 - RGB: position + * 1 - RGB: normal + * 3 - RGB: diffuse color, A: shininess str. + * 4 - unused + */ + +uniform sampler2D tex_dif, tex_norm; + +varying vec3 pos, norm; void main() { + vec3 n = normalize(norm); + vec4 texel = texture2D(tex_dif, gl_TexCoord[0].st); - gl_FragData[0] = texel * vec4(1.0, 0.0, 0.0, 1.0); - gl_FragData[1] = texel * vec4(0.0, 1.0, 0.0, 1.0); - gl_FragData[2] = texel * vec4(0.0, 0.0, 1.0, 1.0); - gl_FragData[3] = texel * vec4(1.0, 0.0, 0.0, 1.0); + vec3 diffuse = (gl_FrontMaterial.diffuse * texel).xyz; + vec3 spec = gl_FrontMaterial.specular.xyz; + float sstr = (spec.x + spec.y + spec.z) / 3.0; + + gl_FragData[0] = vec4(pos, 0.0); + gl_FragData[1] = vec4(norm, 0.0); + gl_FragData[2] = vec4(diffuse, sstr); + gl_FragData[3] = vec4(0.0, 0.0, 0.0, 0.0); } diff -r 8a0ae6b4aa9b -r 48cfd351a9be prototype/sdr/mrt.v.glsl --- a/prototype/sdr/mrt.v.glsl Tue Aug 21 04:29:49 2012 +0300 +++ b/prototype/sdr/mrt.v.glsl Tue Aug 21 04:57:33 2012 +0300 @@ -1,5 +1,11 @@ +varying vec3 pos, norm; + void main() { gl_Position = ftransform(); + + pos = (gl_ModelViewMatrix * gl_Vertex).xyz; + norm = gl_NormalMatrix * gl_Normal; + gl_TexCoord[0] = gl_MultiTexCoord0; } diff -r 8a0ae6b4aa9b -r 48cfd351a9be prototype/src/renderer.cc --- a/prototype/src/renderer.cc Tue Aug 21 04:29:49 2012 +0300 +++ b/prototype/src/renderer.cc Tue Aug 21 04:57:33 2012 +0300 @@ -74,19 +74,18 @@ { int loc; - static GLenum draw_bufs[] = { - GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, - GL_COLOR_ATTACHMENT2_EXT, GL_COLOR_ATTACHMENT3_EXT, - GL_COLOR_ATTACHMENT4_EXT, GL_COLOR_ATTACHMENT5_EXT, - GL_COLOR_ATTACHMENT6_EXT, GL_COLOR_ATTACHMENT7_EXT - }; - // render into the MRT buffers glBindFramebufferEXT(GL_FRAMEBUFFER, fbo); - glDrawBuffersARB(MRT_COUNT, draw_bufs); glUseProgram(mrt_prog); + if((loc = glGetUniformLocation(mrt_prog, "tex_dif")) != -1) { + glUniform1i(loc, 0); + } + if((loc = glGetUniformLocation(mrt_prog, "tex_norm")) != -1) { + glUniform1i(loc, 1); + } draw_func(); + glUseProgram(0); glBindFramebufferEXT(GL_FRAMEBUFFER, 0); @@ -160,11 +159,19 @@ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_xsz, tex_ysz, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); // attach to fbo - glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, - mrt_tex[i], 0); + glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, + GL_TEXTURE_2D, mrt_tex[i], 0); CHECKGLERR; } + static GLenum draw_bufs[] = { + GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, + GL_COLOR_ATTACHMENT2_EXT, GL_COLOR_ATTACHMENT3_EXT, + GL_COLOR_ATTACHMENT4_EXT, GL_COLOR_ATTACHMENT5_EXT, + GL_COLOR_ATTACHMENT6_EXT, GL_COLOR_ATTACHMENT7_EXT + }; + glDrawBuffersARB(MRT_COUNT, draw_bufs); + glGenRenderbuffersEXT(1, &rbuf_depth); glBindRenderbufferEXT(GL_RENDERBUFFER, rbuf_depth); glRenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, tex_xsz, tex_ysz);