39 GLuint rout = out, fbo;
40 GLint vp[4], w, h, cfbo, ctex, cpId;
41 GLboolean dt = glIsEnabled(GL_DEPTH_TEST), bl = glIsEnabled(GL_BLEND);
44 glGetIntegerv(GL_POLYGON_MODE, polygonMode);
46 glGetIntegerv(GL_VIEWPORT, vp);
47 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &cfbo);
48 glGetIntegerv(GL_TEXTURE_BINDING_2D, &ctex);
49 glGetIntegerv(GL_CURRENT_PROGRAM, &cpId);
53 }
else if(
in == out) {
62 glBindTexture(GL_TEXTURE_2D, out);
63 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
64 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
69 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
71 if(dt) glDisable(GL_DEPTH_TEST);
72 if(bl) glDisable(GL_BLEND);
73 glViewport(0, 0, w, h);
74 glGenFramebuffers(1, &fbo);
75 glBindFramebuffer(GL_FRAMEBUFFER, fbo); {
76 GLfloat d[] = {radius / (GLfloat)
_width, radius / (GLfloat)
_height};
77 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rout, 0);
80 glUniform1i(glGetUniformLocation(
_scatteringPId,
"noiseTexture"), 1);
83 glUniform1i(glGetUniformLocation(
_scatteringPId,
"useWM"), weightmap);
84 glUniform1i(glGetUniformLocation(
_scatteringPId,
"useDM"), displacementmap);
90 glActiveTexture(GL_TEXTURE0);
91 glBindTexture(GL_TEXTURE_2D,
in);
92 glActiveTexture(GL_TEXTURE1);
94 glActiveTexture(GL_TEXTURE2);
95 glBindTexture(GL_TEXTURE_2D, weightmap);
96 glActiveTexture(GL_TEXTURE3);
97 glBindTexture(GL_TEXTURE_2D, displacementmap);
99 glActiveTexture(GL_TEXTURE3);
100 glBindTexture(GL_TEXTURE_2D, 0);
101 glActiveTexture(GL_TEXTURE2);
102 glBindTexture(GL_TEXTURE_2D, 0);
103 glActiveTexture(GL_TEXTURE1);
104 glBindTexture(GL_TEXTURE_2D, 0);
105 glActiveTexture(GL_TEXTURE0);
106 glBindTexture(GL_TEXTURE_2D, 0);
110 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
111 glBlitFramebuffer(0, 0,
_width,
_height, vp[0], vp[1], vp[0] + vp[2], vp[1] + vp[3], GL_COLOR_BUFFER_BIT, GL_LINEAR);
113 glViewport(vp[0], vp[1], vp[2], vp[3]);
114 glBindFramebuffer(GL_FRAMEBUFFER, (GLuint)cfbo);
117 glPolygonMode(GL_FRONT_AND_BACK, polygonMode[0]);
119 if(bl) glEnable(GL_BLEND);
120 if(dt) glEnable(GL_DEPTH_TEST);
121 glDeleteFramebuffers(1, &fbo);