66 for (
unsigned i = 0; i < 2; ++i) {
67 if (es == ES_LEFT && i == 1)
69 if (es == ES_RIGHT && i == 0)
75 if (multi_tex_id[i] != 0) {
76 glDeleteTextures(1, &multi_tex_id[i]);
79 if (multi_fbo_id[i] != 0) {
80 glDeleteFramebuffers(1, &multi_fbo_id[i]);
84 glDeleteTextures(1, &tex_id[i]);
88 glDeleteFramebuffers(1, &fbo_id[i]);
97 for (
unsigned i = 0; i < 2; ++i) {
98 if (es == ES_LEFT && i == 1)
100 if (es == ES_RIGHT && i == 0)
103 glGenFramebuffers(1, &multi_fbo_id[i]);
104 glBindFramebuffer(GL_FRAMEBUFFER, multi_fbo_id[i]);
108 glRenderbufferStorageMultisample(GL_RENDERBUFFER, nr_multi_samples, GL_DEPTH_COMPONENT,
width, height);
109 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
multi_depth_buffer_id[i]);
111 glGenTextures(1, &multi_tex_id[i]);
112 glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, multi_tex_id[i]);
113 glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, nr_multi_samples, GL_RGBA8,
width, height,
true);
114 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, multi_tex_id[i], 0);
116 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
118 glBindFramebuffer(GL_FRAMEBUFFER, 0);
119 last_error =
"check status of multi framebuffer failed";
123 glGenFramebuffers(1, &fbo_id[i]);
124 glBindFramebuffer(GL_FRAMEBUFFER, fbo_id[i]);
126 glGenTextures(1, &tex_id[i]);
127 glBindTexture(GL_TEXTURE_2D, tex_id[i]);
128 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
129 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
130 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,
width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
nullptr);
131 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex_id[i], 0);
133 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
135 glBindFramebuffer(GL_FRAMEBUFFER, 0);
136 last_error =
"check status of framebuffer failed";
140 glBindFramebuffer(GL_FRAMEBUFFER, 0);
164 glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_id[eye]);
165 glBlitFramebuffer(0, 0,
width, height, x, y, x+w, y+h,
166 GL_COLOR_BUFFER_BIT, GL_NEAREST);
167 glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
174 glViewport(vp[0], vp[1], vp[2], vp[3]);
176 glBindFramebuffer(GL_FRAMEBUFFER, 0);
177 glDisable(GL_MULTISAMPLE);
179 glBindFramebuffer(GL_READ_FRAMEBUFFER, multi_fbo_id[eye]);
180 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo_id[eye]);
181 glBlitFramebuffer(0, 0,
width, height, 0, 0,
width, height,
182 GL_COLOR_BUFFER_BIT, GL_LINEAR);
183 glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
184 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
186 if (old_msaa == GL_TRUE)
187 glEnable(GL_MULTISAMPLE);