[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