[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11213] branches/soc-2007-maike/source/ blender: Material structures creation refactor

Miguel Torres Lima torreslima at gmail.com
Tue Jul 10 20:08:10 CEST 2007


Revision: 11213
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11213
Author:   maike
Date:     2007-07-10 20:08:10 +0200 (Tue, 10 Jul 2007)

Log Message:
-----------
Material structures creation refactor

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/include/BIF_glutil.h
    branches/soc-2007-maike/source/blender/src/drawobject.c
    branches/soc-2007-maike/source/blender/src/editobject.c
    branches/soc-2007-maike/source/blender/src/editscreen.c
    branches/soc-2007-maike/source/blender/src/glutil.c
    branches/soc-2007-maike/source/blender/src/space.c
    branches/soc-2007-maike/source/blender/src/usiblender.c

Modified: branches/soc-2007-maike/source/blender/include/BIF_glutil.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glutil.h	2007-07-10 18:01:53 UTC (rev 11212)
+++ branches/soc-2007-maike/source/blender/include/BIF_glutil.h	2007-07-10 18:08:10 UTC (rev 11213)
@@ -222,12 +222,20 @@
 void bgl_get_mats(bglMats *mats);
 
 /* GLSL Support */
+
+#define GLSL_SUPPORTED  1
+#define GLSL_ACTIVE     2
+#define GLSL_FIRSTDRAW  4
+
 void init_glsl(void);
-int has_glsl_support(void);
+int glsl_supported(void);
 int glsl_active(void);
+int glsl_firstdraw(void);
 void glsl_change_state(void);
 void glsl_free_all(void);
 void glsl_create_all(void);
 
+
+
 #endif /* BIF_GLUTIL_H */
 

Modified: branches/soc-2007-maike/source/blender/src/drawobject.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/drawobject.c	2007-07-10 18:01:53 UTC (rev 11212)
+++ branches/soc-2007-maike/source/blender/src/drawobject.c	2007-07-10 18:08:10 UTC (rev 11213)
@@ -3729,7 +3729,7 @@
 	/* GLSL draw */
 	if(glsl_active()  && (base->lay & G.vd->lay)){
 	  if(G.vd->drawtype == OB_SHADED && G.obedit != ob && (OBACT != ob || !(G.f & (G_FACESELECT|G_WEIGHTPAINT|G_TEXTUREPAINT|G_VERTEXPAINT|G_SCULPTMODE)))){
-	    if(ob->type == OB_MESH){ /* || ob->type == OB_SURF || ob->type == OB_CURVE || ob->type == OB_FONT || ob->type == OB_MBALL){ */
+	    if(ob->type == OB_MESH){  /*|| ob->type == OB_SURF || ob->type == OB_CURVE || ob->type == OB_FONT || ob->type == OB_MBALL){ */
 	      glsl_draw(base);	    
 	      return;
 	    }

Modified: branches/soc-2007-maike/source/blender/src/editobject.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/editobject.c	2007-07-10 18:01:53 UTC (rev 11212)
+++ branches/soc-2007-maike/source/blender/src/editobject.c	2007-07-10 18:08:10 UTC (rev 11213)
@@ -236,7 +236,7 @@
 	la = BASACT->object->data;
 	la->type = type;	
 
-        if(glsl_active() != 0)
+        if(glsl_active())
 	  glsl_create_light(la, BASACT->object);
 
 	allqueue(REDRAWALL, 0);

Modified: branches/soc-2007-maike/source/blender/src/editscreen.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/editscreen.c	2007-07-10 18:01:53 UTC (rev 11212)
+++ branches/soc-2007-maike/source/blender/src/editscreen.c	2007-07-10 18:08:10 UTC (rev 11213)
@@ -3813,7 +3813,7 @@
 void glsl_welcome_msg(void){
   int n;
   
-  if(has_glsl_support())
+  if(glsl_supported())
     n = pupmenu("GLSL Shaders:%t|Supported");
   else
     n = pupmenu("GLSL Shaders:%t|Not supported");

Modified: branches/soc-2007-maike/source/blender/src/glutil.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glutil.c	2007-07-10 18:01:53 UTC (rev 11212)
+++ branches/soc-2007-maike/source/blender/src/glutil.c	2007-07-10 18:08:10 UTC (rev 11213)
@@ -697,11 +697,11 @@
 /* GLSL support */
 /****************/
 
-static int hasGLSL = -1;
-static int activeGLSL = -1;
+static short glsl_state = 0;
 
 extern struct Material defmaterial;
 
+
 static void check_glsl_support(void)
 {
   const unsigned char *gl_extensions;
@@ -711,59 +711,108 @@
   gl_extensions = glGetString(GL_EXTENSIONS);
 
   if(strstr((char *) gl_extensions, v_ext) != NULL && strstr((char *) gl_extensions, f_ext) != NULL){
-    hasGLSL = 1;
-    activeGLSL = -1;
+    int iparams[7]; 
+    int iparams2[7];
+
+    glsl_state = GLSL_SUPPORTED;
+
     printf("\nGLSL Supported\n");
+
+
+    glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB, &iparams[0]);
+    glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, &iparams[1]);
+    glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB, &iparams[2]);
+    glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &iparams[3]);
+    glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &iparams[4]);
+    glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_TEMPORARIES_ARB, &iparams[5]);
+    glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ATTRIBS_ARB, &iparams[6]);
+    
+    printf("ARB_fragment_program is supported.\n"  
+	   "   ALU instructions:    %d\n"
+	   "   texture instructions: %d\n"
+	   "   texture indirections: %d\n"
+	   "   local parameters:      %d\n"
+	   "   env parameters:        %d\n"
+	   "   temp registers:         %d\n"
+	   "   attributes:             %d\n",         
+	   iparams[0], iparams[1], iparams[2], iparams[3], iparams[4], iparams[5], iparams[6]);
+
+    glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB, &iparams2[0]);
+    glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, &iparams2[1]);
+    glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB, &iparams2[2]);
+    glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &iparams2[3]);
+    glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &iparams2[4]);
+    glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_TEMPORARIES_ARB, &iparams2[5]);
+    glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ATTRIBS_ARB, &iparams2[6]);
+    
+    printf("ARB_vertex_program is supported.\n"  
+	   "   ALU instructions:    %d\n"
+	   "   texture instructions: %d\n"
+	   "   texture indirections: %d\n"
+	   "   local parameters:      %d\n"
+	   "   env parameters:        %d\n"
+	   "   temp registers:         %d\n"
+	   "   attributes:             %d\n",         
+	   iparams2[0], iparams2[1], iparams2[2], iparams2[3], iparams2[4], iparams2[5], iparams2[6]);
   }
   else{
     printf("\nGLSL Not Supported\n");
-    hasGLSL = 0;
-    activeGLSL = 0;
   }
 }
 
 
 void init_glsl(void)
 {
-  if(hasGLSL == -1){
+  if(!glsl_state){
     check_glsl_support();
   }
 }
 
 
-int has_glsl_support(void)
+int glsl_supported(void)
 {
-  return hasGLSL;
+  if(glsl_state & GLSL_SUPPORTED)
+    return 1;
+
+  return 0;
 }
 
 
 int glsl_active(void)
 {
-  return activeGLSL;
+  if(glsl_state & GLSL_ACTIVE || !(glsl_state & GLSL_FIRSTDRAW)){
+    return 1;
+  }
+
+  return 0;
 }
 
 
-void glsl_change_state(void)
+int glsl_firstdraw(void)
 {
-  int active;
- 
-  if(has_glsl_support() && (U.flag & USER_GLSL) > 0){
-    active = 1;
+  if(glsl_state & GLSL_FIRSTDRAW)
+    return 1;
 
-    if(G.scene != NULL && active != glsl_active()){
-      activeGLSL = active;
-      glsl_create_all();
-      printf("\nGLSL activated.\n");
-    }
+  return 0;
+}
+
+
+void glsl_change_state(void)
+{ 
+  if(glsl_supported() && (U.flag & USER_GLSL) > 0){
+    glsl_state |= GLSL_ACTIVE;
+
+    if(!(glsl_state & GLSL_FIRSTDRAW))
+      glsl_state |= GLSL_FIRSTDRAW;
+
+    glsl_create_all();
+    printf("\nGLSL activated.\n");
   }
   else{
-    active = 0;
+    glsl_state &= ~GLSL_ACTIVE;
     
-    if(active != activeGLSL){
-      activeGLSL = active;
-      glsl_free_all();
-      printf("\nGLSL deactivated.\n");
-    }
+    glsl_free_all();
+    printf("\nGLSL deactivated.\n");
   }
 }
 
@@ -771,8 +820,6 @@
 void glsl_free_all(void)
 {
   glsl_free_structs();
-  glsl_free_ghash();
-  glsl_delete_defmaterial();
 }
 
 
@@ -782,7 +829,7 @@
   Object *obj;
   
   for(base= G.scene->base.first; base; base= base->next) {
-    if(glsl_active() != 0){
+    if(glsl_active()){
       obj = base->object;
       
       if(obj->type == OB_LAMP){
@@ -795,10 +842,6 @@
     }
   }
  
-  glsl_init_ghash();
-  
-  glsl_init_defmaterial(&defmaterial);
- 
   for(base= G.scene->base.first; base; base= base->next) {
     if(glsl_active()){
       obj = base->object;

Modified: branches/soc-2007-maike/source/blender/src/space.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/space.c	2007-07-10 18:01:53 UTC (rev 11212)
+++ branches/soc-2007-maike/source/blender/src/space.c	2007-07-10 18:08:10 UTC (rev 11213)
@@ -3769,7 +3769,7 @@
 			(xpos+edgsp+(5*mpref)+(5*midsp)), y2, mpref, buth, 
 			&U.texcollectrate, 1.0, 3600.0, 30, 2, "Number of seconds between each run of the GL texture garbage collector.");
 
-		if(has_glsl_support()){
+		if(glsl_supported()){
 		            uiDefButBitI(block, TOG, USER_GLSL, B_GLSLCHANGED, "GLSL Preview",
 			       (xpos+edgsp+(5*mpref)+(5*midsp)),y1, mpref, buth,
 			       &(U.flag), 0, 0, 0, 0, "Toggles between GLSL preview on the Viewport3D on and off");

Modified: branches/soc-2007-maike/source/blender/src/usiblender.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/usiblender.c	2007-07-10 18:01:53 UTC (rev 11212)
+++ branches/soc-2007-maike/source/blender/src/usiblender.c	2007-07-10 18:08:10 UTC (rev 11213)
@@ -1004,9 +1004,9 @@
 	BLI_freelistN(&U.themes);
 	BIF_preview_free_dbase();
 
-	if(glsl_active() != 0)
-	  glsl_exit_free_structs();
 	
+	glsl_exit_free_structs();
+	
 	if(totblock!=0) {
 		printf("Error Totblock: %d\n",totblock);
 		MEM_printmemlist();




More information about the Bf-blender-cvs mailing list