[Bf-blender-cvs] [4571fdd] blender2.8: OpenGL: transition to ARB FBOs, remove runtime checks

Mike Erwin noreply at git.blender.org
Fri Aug 5 03:12:09 CEST 2016


Commit: 4571fdde0ecfdebac6a9374364b05be74233aca5
Author: Mike Erwin
Date:   Thu Aug 4 21:11:45 2016 -0400
Branches: blender2.8
https://developer.blender.org/rB4571fdde0ecfdebac6a9374364b05be74233aca5

OpenGL: transition to ARB FBOs, remove runtime checks

ARB_framebuffer_object replaces several related EXT extensions. The ARB
version pulls GL 3 FBO features into GL 2.1, useful for Mac platform.
Its functions and enums have no ARB suffix so transition to modern GL
will be seamless!

Extension is checked at startup, so is guaranteed to be true at runtime.

Part of T49012

===================================================================

M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/gpu/intern/gpu_compositing.c
M	source/blender/gpu/intern/gpu_draw.c
M	source/blender/gpu/intern/gpu_extensions.c
M	source/blender/gpu/intern/gpu_framebuffer.c

===================================================================

diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 3fa9531..02e6009 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -1434,7 +1434,7 @@ void view3d_opengl_read_pixels(ARegion *ar, int x, int y, int w, int h, int form
 
 	if (rv3d->gpuoffscreen) {
 		GPU_offscreen_bind(rv3d->gpuoffscreen, true);
-		glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
+		glReadBuffer(GL_COLOR_ATTACHMENT0);
 		glReadPixels(x, y, w, h, format, type, data);
 		GPU_offscreen_unbind(rv3d->gpuoffscreen, true);
 	}
diff --git a/source/blender/gpu/intern/gpu_compositing.c b/source/blender/gpu/intern/gpu_compositing.c
index 964c2b5..aabe96d 100644
--- a/source/blender/gpu/intern/gpu_compositing.c
+++ b/source/blender/gpu/intern/gpu_compositing.c
@@ -382,9 +382,6 @@ bool GPU_fx_compositor_initialize_passes(
 
 	fx->effects = 0;
 
-	if (!GLEW_EXT_framebuffer_object)
-		return false;
-
 	if (!fx_settings) {
 		cleanup_fx_gl_data(fx, true);
 		return false;
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index 1c2dbfb..25b28b1 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -277,7 +277,7 @@ void GPU_set_gpu_mipmapping(int gpu_mipmap)
 	int old_value = GTS.gpu_mipmap;
 
 	/* only actually enable if it's supported */
-	GTS.gpu_mipmap = gpu_mipmap && GLEW_EXT_framebuffer_object;
+	GTS.gpu_mipmap = gpu_mipmap;
 
 	if (old_value != GTS.gpu_mipmap) {
 		GPU_free_images();
@@ -297,11 +297,7 @@ static void gpu_generate_mipmap(GLenum target)
 			glEnable(target);
 	}
 
-	/* TODO: simplify when we transition to GL >= 3 */
-	if (GLEW_VERSION_3_0 || GLEW_ARB_framebuffer_object)
-		glGenerateMipmap(target);
-	else if (GLEW_EXT_framebuffer_object)
-		glGenerateMipmapEXT(target);
+	glGenerateMipmap(target);
 
 	if (is_ati && !target_enabled)
 		glDisable(target);
diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c
index ff0fd42..c2190bc 100644
--- a/source/blender/gpu/intern/gpu_extensions.c
+++ b/source/blender/gpu/intern/gpu_extensions.c
@@ -56,10 +56,8 @@
 /* Extensions support */
 
 /* -- extension: version of GL that absorbs it
+ * EXT_gpu_shader4: 3.0
  * ARB_framebuffer object: 3.0
- * EXT_framebuffer_object: 3.0
- * EXT_framebuffer_blit: 3.0
- * EXT_framebuffer_multisample: 3.0
  * EXT_framebuffer_multisample_blit_scaled: ???
  * ARB_draw_instanced: 3.1
  * ARB_texture_multisample: 3.2
diff --git a/source/blender/gpu/intern/gpu_framebuffer.c b/source/blender/gpu/intern/gpu_framebuffer.c
index c0400cd..b34b940 100644
--- a/source/blender/gpu/intern/gpu_framebuffer.c
+++ b/source/blender/gpu/intern/gpu_framebuffer.c
@@ -57,30 +57,30 @@ static void GPU_print_framebuffer_error(GLenum status, char err_out[256])
 	const char *err = "unknown";
 
 	switch (status) {
-		case GL_FRAMEBUFFER_COMPLETE_EXT:
+		case GL_FRAMEBUFFER_COMPLETE:
 			break;
 		case GL_INVALID_OPERATION:
 			err = "Invalid operation";
 			break;
-		case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
+		case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
 			err = "Incomplete attachment";
 			break;
-		case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
+		case GL_FRAMEBUFFER_UNSUPPORTED:
 			err = "Unsupported framebuffer format";
 			break;
-		case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
+		case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
 			err = "Missing attachment";
 			break;
-		case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
+		case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
 			err = "Attached images must have same dimensions";
 			break;
-		case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
+		case GL_FRAMEBUFFER_INCOMPLETE_FORMATS:
 			err = "Attached images must have same format";
 			break;
-		case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
+		case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER:
 			err = "Missing draw buffer";
 			break;
-		case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
+		case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER:
 			err = "Missing read buffer";
 			break;
 	}
@@ -101,14 +101,8 @@ GPUFrameBuffer *GPU_framebuffer_create(void)
 {
 	GPUFrameBuffer *fb;
 
-	if (!(GLEW_VERSION_3_0 || GLEW_ARB_framebuffer_object ||
-	      (GLEW_EXT_framebuffer_object && GLEW_EXT_framebuffer_blit)))
-	{
-		return NULL;
-	}
-	
 	fb = MEM_callocN(sizeof(GPUFrameBuffer), "GPUFrameBuffer");
-	glGenFramebuffersEXT(1, &fb->object);
+	glGenFramebuffers(1, &fb->object);
 
 	if (!fb->object) {
 		fprintf(stderr, "GPUFFrameBuffer: framebuffer gen failed. %d\n",
@@ -118,10 +112,10 @@ GPUFrameBuffer *GPU_framebuffer_create(void)
 	}
 
 	/* make sure no read buffer is enabled, so completeness check will not fail. We set those at binding time */
-	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+	glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
 	glReadBuffer(GL_NONE);
 	glDrawBuffer(GL_NONE);
-	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+	glBindFramebuffer(GL_FRAMEBUFFER, 0);
 	
 	return fb;
 }
@@ -147,17 +141,17 @@ int GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot
 	}
 
 	if (GPU_texture_depth(tex))
-		attachment = GL_DEPTH_ATTACHMENT_EXT;
+		attachment = GL_DEPTH_ATTACHMENT;
 	else
-		attachment = GL_COLOR_ATTACHMENT0_EXT + slot;
+		attachment = GL_COLOR_ATTACHMENT0 + slot;
 
-	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+	glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
 	GG.currentfb = fb->object;
 
 	/* Clean glError buffer. */
 	while (glGetError() != GL_NO_ERROR) {}
 
-	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment, 
+	glFramebufferTexture2D(GL_FRAMEBUFFER, attachment,
 		GPU_texture_target(tex), GPU_texture_opengl_bindcode(tex), 0);
 
 	error = glGetError();
@@ -188,21 +182,21 @@ void GPU_framebuffer_texture_detach(GPUTexture *tex)
 		return;
 
 	if (GG.currentfb != fb->object) {
-		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+		glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
 		GG.currentfb = fb->object;
 	}
 
 	if (GPU_texture_depth(tex)) {
 		fb->depthtex = NULL;
-		attachment = GL_DEPTH_ATTACHMENT_EXT;
+		attachment = GL_DEPTH_ATTACHMENT;
 	}
 	else {
 		BLI_assert(fb->colortex[fb_attachment] == tex);
 		fb->colortex[fb_attachment] = NULL;
-		attachment = GL_COLOR_ATTACHMENT0_EXT + fb_attachment;
+		attachment = GL_COLOR_ATTACHMENT0 + fb_attachment;
 	}
 
-	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment, GPU_texture_target(tex), 0, 0);
+	glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, GPU_texture_target(tex), 0, 0);
 
 	GPU_texture_framebuffer_set(tex, NULL, -1);
 }
@@ -222,7 +216,7 @@ void GPU_texture_bind_as_framebuffer(GPUTexture *tex)
 	glDisable(GL_SCISSOR_TEST);
 
 	/* bind framebuffer */
-	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+	glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
 
 	if (GPU_texture_depth(tex)) {
 		glDrawBuffer(GL_NONE);
@@ -230,8 +224,8 @@ void GPU_texture_bind_as_framebuffer(GPUTexture *tex)
 	}
 	else {
 		/* last bound prevails here, better allow explicit control here too */
-		glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT + fb_attachment);
-		glReadBuffer(GL_COLOR_ATTACHMENT0_EXT + fb_attachment);
+		glDrawBuffer(GL_COLOR_ATTACHMENT0 + fb_attachment);
+		glReadBuffer(GL_COLOR_ATTACHMENT0 + fb_attachment);
 	}
 	
 	if (GPU_texture_target(tex) == GL_TEXTURE_2D_MULTISAMPLE) {
@@ -260,7 +254,7 @@ void GPU_framebuffer_slots_bind(GPUFrameBuffer *fb, int slot)
 	
 	for (i = 0; i < 4; i++) {
 		if (fb->colortex[i]) {
-			attachments[numslots] = GL_COLOR_ATTACHMENT0_EXT + i;
+			attachments[numslots] = GL_COLOR_ATTACHMENT0 + i;
 			numslots++;
 		}
 	}
@@ -270,11 +264,11 @@ void GPU_framebuffer_slots_bind(GPUFrameBuffer *fb, int slot)
 	glDisable(GL_SCISSOR_TEST);
 
 	/* bind framebuffer */
-	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+	glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
 
 	/* last bound prevails here, better allow explicit control here too */
 	glDrawBuffers(numslots, attachments);
-	glReadBuffer(GL_COLOR_ATTACHMENT0_EXT + slot);
+	glReadBuffer(GL_COLOR_ATTACHMENT0 + slot);
 
 	/* push matrices and set default viewport and matrix */
 	glViewport(0, 0, GPU_texture_width(fb->colortex[slot]), GPU_texture_height(fb->colortex[slot]));
@@ -301,10 +295,10 @@ void GPU_framebuffer_texture_unbind(GPUFrameBuffer *UNUSED(fb), GPUTexture *UNUS
 
 void GPU_framebuffer_bind_no_save(GPUFrameBuffer *fb, int slot)
 {
-	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+	glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
 	/* last bound prevails here, better allow explicit control here too */
-	glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT + slot);
-	glReadBuffer(GL_COLOR_ATTACHMENT0_EXT + slot);
+	glDrawBuffer(GL_COLOR_ATTACHMENT0 + slot);
+	glReadBuffer(GL_COLOR_ATTACHMENT0 + slot);
 
 	/* push matrices and set default viewport and matrix */
 	glViewport(0, 0, GPU_texture_width(fb->colortex[slot]), GPU_texture_height(fb->colortex[slot]));
@@ -321,15 +315,15 @@ bool GPU_framebuffer_check_valid(GPUFrameBuffer *fb, char err_out[256])
 {
 	GLenum status;
 	
-	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+	glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
 	GG.currentfb = fb->object;
 	
 	/* Clean glError buffer. */
 	while (glGetError() != GL_NO_ERROR) {}
 	
-	status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
+	status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
 	
-	if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+	if (status != GL_FRAMEBUFFER_COMPLETE) {
 		GPU_framebuffer_restore();
 		GPU_print_framebuffer_error(status, err_out);
 		return false;
@@ -351,10 +345,10 @@ void GPU_framebuffer_free(GPUFrameBuffer *fb)
 	}
 
 	if (fb->object) {
-		glDeleteFramebuffersEXT(1, &fb->object);
+		glDeleteFramebuffers(1, &fb->object);
 
 		if (GG.currentfb == fb->object) {
-			glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+			glBindFramebuffer(GL_FRAMEBUFFER, 0);
 			GG.currentfb = 0;
 		}
 	}
@@ -365,7 +359,7 @@ void GPU_framebuffer_free(GPUFrameBuffer *fb)
 void GPU_framebuffer_restore(void)
 {
 	if (GG.currentfb != 0) {
-		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+		glBindFramebuffer(GL_FRAMEBUFFER, 0);
 		GG.currentfb = 0;
 	}
 }
@@ -390,8 +384,8 @@ void GPU_framebuffer_blur(
 
 	/

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list