[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55995] trunk/blender/source/blender: Add function to query maximum texture size.

Antony Riakiotakis kalast at gmail.com
Fri Apr 12 19:56:08 CEST 2013


Revision: 55995
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55995
Author:   psy-fi
Date:     2013-04-12 17:56:07 +0000 (Fri, 12 Apr 2013)
Log Message:
-----------
Add function to query maximum texture size. Also, make texture upload
functions aware of this limit.

Modified Paths:
--------------
    trunk/blender/source/blender/blenfont/CMakeLists.txt
    trunk/blender/source/blender/blenfont/intern/blf_glyph.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c
    trunk/blender/source/blender/gpu/GPU_extensions.h
    trunk/blender/source/blender/gpu/intern/gpu_draw.c
    trunk/blender/source/blender/gpu/intern/gpu_extensions.c
    trunk/blender/source/blender/windowmanager/intern/wm_draw.c

Modified: trunk/blender/source/blender/blenfont/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/blenfont/CMakeLists.txt	2013-04-12 17:21:31 UTC (rev 55994)
+++ trunk/blender/source/blender/blenfont/CMakeLists.txt	2013-04-12 17:56:07 UTC (rev 55995)
@@ -31,6 +31,7 @@
 	../makesrna
 	../python
 	../imbuf
+	../gpu
 	../../../intern/guardedalloc
 	../../../intern/locale
 )

Modified: trunk/blender/source/blender/blenfont/intern/blf_glyph.c
===================================================================
--- trunk/blender/source/blender/blenfont/intern/blf_glyph.c	2013-04-12 17:21:31 UTC (rev 55994)
+++ trunk/blender/source/blender/blenfont/intern/blf_glyph.c	2013-04-12 17:56:07 UTC (rev 55995)
@@ -55,6 +55,7 @@
 #include "blf_internal_types.h"
 #include "blf_internal.h"
 
+#include "GPU_extensions.h"
 
 GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi)
 {
@@ -381,7 +382,7 @@
 		GlyphCacheBLF *gc = font->glyph_cache;
 
 		if (font->max_tex_size == -1)
-			glGetIntegerv(GL_MAX_TEXTURE_SIZE, (GLint *)&font->max_tex_size);
+			font->max_tex_size = GPU_max_texture_size();
 
 		if (gc->cur_tex == -1) {
 			blf_glyph_cache_texture(font, gc);

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c	2013-04-12 17:21:31 UTC (rev 55994)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c	2013-04-12 17:56:07 UTC (rev 55995)
@@ -88,6 +88,8 @@
 #include "ED_view3d.h"
 #include "ED_mesh.h"
 
+#include "GPU_extensions.h"
+
 #include "WM_api.h"
 #include "WM_types.h"
 
@@ -4411,7 +4413,7 @@
 
 	RNA_string_get(op->ptr, "filepath", filename);
 
-	glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxsize);
+	maxsize = GPU_max_texture_size();
 
 	if (w > maxsize) w = maxsize;
 	if (h > maxsize) h = maxsize;

Modified: trunk/blender/source/blender/gpu/GPU_extensions.h
===================================================================
--- trunk/blender/source/blender/gpu/GPU_extensions.h	2013-04-12 17:21:31 UTC (rev 55994)
+++ trunk/blender/source/blender/gpu/GPU_extensions.h	2013-04-12 17:56:07 UTC (rev 55995)
@@ -66,7 +66,9 @@
 int GPU_color_depth(void);
 void GPU_code_generate_glsl_lib(void);
 int GPU_bicubic_bump_support(void);
+int GPU_max_texture_size (void);
 
+
 /* GPU Types */
 
 typedef enum GPUDeviceType {

Modified: trunk/blender/source/blender/gpu/intern/gpu_draw.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_draw.c	2013-04-12 17:21:31 UTC (rev 55994)
+++ trunk/blender/source/blender/gpu/intern/gpu_draw.c	2013-04-12 17:56:07 UTC (rev 55995)
@@ -196,17 +196,21 @@
 
 static bool is_over_resolution_limit(int w, int h)
 {
-	if (U.glreslimit != 0)
-		return (w > U.glreslimit || h > U.glreslimit);
+	int reslimit = (U.glreslimit != 0)?
+		min_ii(U.glreslimit, GPU_max_texture_size()) :
+		GPU_max_texture_size();
 
-	return false;
+	return (w > reslimit || h > reslimit);
 }
 
 static int smaller_power_of_2_limit(int num)
 {
+	int reslimit = (U.glreslimit != 0)?
+		min_ii(U.glreslimit, GPU_max_texture_size()) :
+		GPU_max_texture_size();
 	/* take texture clamping into account */
-	if (U.glreslimit != 0 && num > U.glreslimit)
-		return U.glreslimit;
+	if (num > reslimit)
+		return reslimit;
 
 	return power_of_2_min_i(num);
 }

Modified: trunk/blender/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_extensions.c	2013-04-12 17:21:31 UTC (rev 55994)
+++ trunk/blender/source/blender/gpu/intern/gpu_extensions.c	2013-04-12 17:56:07 UTC (rev 55995)
@@ -79,6 +79,7 @@
 } GPUShaders;
 
 static struct GPUGlobal {
+	GLint maxtexsize;
 	GLint maxtextures;
 	GLuint currentfb;
 	int glslsupport;
@@ -107,6 +108,11 @@
 	GG.extdisabled = 1;
 }
 
+int GPU_max_texture_size ()
+{
+	return GG.maxtexsize;
+}
+
 void GPU_extensions_init(void)
 {
 	GLint r, g, b;
@@ -124,6 +130,8 @@
 	if (GLEW_ARB_multitexture)
 		glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &GG.maxtextures);
 
+	glGetIntegerv(GL_MAX_TEXTURE_SIZE, &GG.maxtexsize);
+
 	GG.glslsupport = 1;
 	if (!GLEW_ARB_multitexture) GG.glslsupport = 0;
 	if (!GLEW_ARB_vertex_shader) GG.glslsupport = 0;

Modified: trunk/blender/source/blender/windowmanager/intern/wm_draw.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_draw.c	2013-04-12 17:21:31 UTC (rev 55994)
+++ trunk/blender/source/blender/windowmanager/intern/wm_draw.c	2013-04-12 17:56:07 UTC (rev 55995)
@@ -463,7 +463,7 @@
 		for (x = 0; x < triple->nx; x++) {
 			/* proxy texture is only guaranteed to test for the cases that
 			 * there is only one texture in use, which may not be the case */
-			glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxsize);
+			maxsize = GPU_max_texture_size();
 
 			if (triple->x[x] > maxsize || triple->y[y] > maxsize) {
 				glBindTexture(triple->target, 0);




More information about the Bf-blender-cvs mailing list