Skip to content

Commit ce76ca8

Browse files
authored
Merge pull request firemodels#2281 from gforney/issue2272
fixes to 3D smoke/fire display when using the GPU
2 parents eeadeaf + 6db523d commit ce76ca8

File tree

8 files changed

+46
-43
lines changed

8 files changed

+46
-43
lines changed

Source/smokeview/IOsmoke.c

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -376,29 +376,23 @@ void DrawSmoke3DGPU(smoke3ddata *smoke3di){
376376
meshi = global_scase.meshescoll.meshinfo+smoke3di->blocknumber;
377377
if(meshvisptr[meshi-global_scase.meshescoll.meshinfo]==0)return;
378378

379-
if(HRRPUV_index>=0){
379+
if(HRRPUV_index >= 0 && smoke3di->smokestate[HRRPUV_index].index >= 0){
380380
firecolor = smoke3di->smokestate[HRRPUV_index].color;
381381
}
382+
else if(TEMP_index >= 0 && smoke3di->smokestate[TEMP_index].index >= 0){
383+
firecolor = smoke3di->smokestate[TEMP_index].color;
384+
}
382385
else{
383386
firecolor = NULL;
384387
}
385388

386-
{
387-
smoke3ddata *sooti = NULL;
388-
389-
if(SOOT_index>=0&&smoke3di->smokestate[SOOT_index].index>=0){
390-
sooti = global_scase.smoke3dcoll.smoke3dinfo+smoke3di->smokestate[SOOT_index].index;
391-
}
392-
else{
393-
sooti = NULL;
394-
}
395-
if(sooti!=NULL&&sooti->display==1){
396-
have_smoke_local = 1;
397-
}
398-
else{
399-
have_smoke_local = 0;
400-
}
389+
smoke3ddata *sooti = NULL;
390+
have_smoke_local = 0;
391+
if(SOOT_index >= 0 && smoke3di->smokestate[SOOT_index].index>=0) {
392+
sooti = global_scase.smoke3dcoll.smoke3dinfo+smoke3di->smokestate[SOOT_index].index;
393+
if(sooti != NULL && sooti->display == 1)have_smoke_local = 1;
401394
}
395+
402396
iblank_smoke3d = meshi->iblank_smoke3d;
403397

404398
// meshi->global_hrrpuv_cb_min
@@ -461,9 +455,15 @@ void DrawSmoke3DGPU(smoke3ddata *smoke3di){
461455
glUniform1f(GPU_emission_factor, emission_factor);
462456
glUniform1i(GPU_use_fire_alpha, use_fire_alpha);
463457
glUniform1i(GPU_have_smoke, have_smoke_local);
464-
glUniform1i(GPU_smokecolormap, 0);
465-
glUniform1f(GPU_global_hrrpuv_max, global_scase.hrrpuv_max);
466-
glUniform1f(GPU_global_hrrpuv_cb_min, global_hrrpuv_cb_min);
458+
glUniform1i(GPU_smokecolormap, 2);
459+
if(smoke3di->type == TEMP_index && TEMP_index >= 0) {
460+
glUniform1f(GPU_global_hrrpuv_max, global_scase.temp_max);
461+
glUniform1f(GPU_global_hrrpuv_cb_min, global_temp_cb_min);
462+
}
463+
else{
464+
glUniform1f(GPU_global_hrrpuv_max, global_scase.hrrpuv_max);
465+
glUniform1f(GPU_global_hrrpuv_cb_min, global_hrrpuv_cb_min);
466+
}
467467
glUniform1f(GPU_fire_alpha, smoke3di->fire_alpha);
468468

469469
TransparentOn();
@@ -3460,11 +3460,13 @@ void DrawSmoke3DColorMap(void){
34603460

34613461
glBegin(GL_QUADS);
34623462
for(i = 0; i < 255; i++){
3463+
float *rgb;
34633464

34643465
ybot = (float)i/255.0;
34653466
ytop = (float)(i+1)/255.0;
34663467

3467-
glColor4fv(rgb_slicesmokecolormap_01+4*i);
3468+
rgb = rgb_slicesmokecolormap_01 + 4 * i;
3469+
glColor4fv(rgb);
34683470
glVertex3f(yleft, 0.0, ybot);
34693471
glVertex3f(yright, 0.0, ybot);
34703472
glVertex3f(yright, 0.0, ytop);

Source/smokeview/getdatacolors.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -969,9 +969,11 @@ void UpdateTexturebar(void){
969969
glTexImage1D(GL_TEXTURE_1D,0,GL_RGBA,256,0,GL_RGBA,GL_FLOAT,rgb_iso);
970970
SNIFF_ERRORS("UpdateTexturebar - glTexImage1D (rgb_iso) ");
971971

972-
glBindTexture(GL_TEXTURE_1D,slicesmoke_colormap_id);
973-
glTexImage1D(GL_TEXTURE_1D,0,GL_RGBA,MAXSMOKERGB,0,GL_RGBA,GL_FLOAT,rgb_slicesmokecolormap_01);
974-
SNIFF_ERRORS("UpdateTexturebar - glTexImage1D (rgb_slicesmokecolormap_01) ");
972+
glActiveTexture(GL_TEXTURE2);
973+
glBindTexture(GL_TEXTURE_1D, slicesmoke_colormap_id);
974+
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, MAXSMOKERGB, 0, GL_RGBA, GL_FLOAT, rgb_slicesmokecolormap_01);
975+
SNIFF_ERRORS("UpdateTexturebar - glTexImage1D (rgb_slicesmokecolormap_01)");
976+
glActiveTexture(GL_TEXTURE0);
975977

976978
glBindTexture(GL_TEXTURE_1D,volsmoke_colormap_id);
977979
glTexImage1D(GL_TEXTURE_1D,0,GL_RGBA,MAXSMOKERGB,0,GL_RGBA,GL_FLOAT,rgb_volsmokecolormap);
@@ -1071,7 +1073,7 @@ void UpdateCO2Colormap(void){
10711073

10721074
/* ------------------ UpdateSmokeColormap ------------------------ */
10731075

1074-
void UpdateSmokeColormap(int option){
1076+
void UpdateSmokeColormap(void){
10751077
int n;
10761078
float transparent_level_local=1.0;
10771079
unsigned char *alpha_rgb;
@@ -1111,7 +1113,7 @@ void UpdateSmokeColormap(int option){
11111113
float val;
11121114

11131115
val = valmin + (float)n*(valmax-valmin)/(float)(MAXSMOKERGB-1);
1114-
if(val>valmin_cb){
1116+
if(val>=valmin_cb){
11151117
use_smoke = 0;
11161118
}
11171119
}
@@ -1219,8 +1221,7 @@ void UpdateRGBColors(int colorbar_index){
12191221
rgb_full[n][3]=transparent_level_local;
12201222
}
12211223
}
1222-
UpdateSmokeColormap(RENDER_SLICE);
1223-
UpdateSmokeColormap(RENDER_VOLUME);
1224+
UpdateSmokeColormap();
12241225
}
12251226
else{
12261227
for(n=0;n<nrgb_full;n++){

Source/smokeview/glui_smoke.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ extern "C" void GLUISmoke3dColorbarCB(int var){
444444
break;
445445
}
446446
ForceIdle();
447-
UpdateSmokeColormap(smoke_render_option);
447+
UpdateSmokeColormap();
448448
glutPostRedisplay();
449449
}
450450

@@ -809,7 +809,7 @@ extern "C" void GLUI3dSmokeSetup(int main_window){
809809
BUTTON_startrender = glui_3dsmoke->add_button_to_panel(ROLLOUT_generate_images, _("Generate images"), GENERATE_IMAGES, GLUISmoke3dCB);
810810
BUTTON_cancelrender = glui_3dsmoke->add_button_to_panel(ROLLOUT_generate_images, _("Cancel"), CANCEL_GENERATE_IMAGES, GLUISmoke3dCB);
811811
BUTTON_volunload = glui_3dsmoke->add_button_to_panel(ROLLOUT_generate_images, _("Unload"), VOL_UNLOAD_ALL, GLUISmoke3dCB);
812-
UpdateSmokeColormap(RENDER_VOLUME);
812+
UpdateSmokeColormap();
813813
GLUISmoke3dCB(SMOKE_OPTIONS);
814814

815815
ROLLOUT_loadframe = glui_3dsmoke->add_rollout_to_panel(ROLLOUT_volume, _("Load frame"), false, VOLSMOKE_LOADFRAME_ROLLOUT, VolSmokeRolloutCB);
@@ -1056,7 +1056,7 @@ extern "C" void GLUISmoke3dCB(int var){
10561056
DefineVolsmokeTextures();
10571057
break;
10581058
case SHOW_FIRECOLORMAP:
1059-
UpdateSmokeColormap(smoke_render_option);
1059+
UpdateSmokeColormap();
10601060
if(show_firecolormap!=0){
10611061
GLUIShowColorbar();
10621062
}
@@ -1073,7 +1073,7 @@ extern "C" void GLUISmoke3dCB(int var){
10731073
global_temp_cb_max = global_scase.temp_min+1.0;
10741074
SPINNER_temperature_max->set_float_val(global_temp_cb_max);
10751075
}
1076-
UpdateSmokeColormap(smoke_render_option);
1076+
UpdateSmokeColormap();
10771077
break;
10781078
case EXTINCTION_RESET_FDS:
10791079
if(SOOT_index>=0){
@@ -1249,7 +1249,7 @@ extern "C" void GLUISmoke3dCB(int var){
12491249
case FIRECOLOR_RGB:
12501250
fire_colorbar_index_save = colorbars.fire_colorbar_index;
12511251
UpdateRGBColors(colorbar_select_index);
1252-
UpdateSmokeColormap(smoke_render_option);
1252+
UpdateSmokeColormap();
12531253
break;
12541254
default:
12551255
#ifdef _DEBUG
@@ -1260,11 +1260,11 @@ extern "C" void GLUISmoke3dCB(int var){
12601260
if(LISTBOX_smoke_colorbar->get_int_val()!=colorbars.fire_colorbar_index){
12611261
LISTBOX_smoke_colorbar->set_int_val(colorbars.fire_colorbar_index);
12621262
}
1263-
UpdateSmokeColormap(smoke_render_option);
1263+
UpdateSmokeColormap();
12641264
break;
12651265
case SMOKE_COLORBAR_LIST:
12661266
SmokeColorbarMenu(colorbars.fire_colorbar_index);
1267-
UpdateSmokeColormap(smoke_render_option);
1267+
UpdateSmokeColormap();
12681268
updatemenu=1;
12691269
break;
12701270
case CO2_COLORBAR_LIST:
@@ -1322,7 +1322,7 @@ extern "C" void GLUISmoke3dCB(int var){
13221322
glutPostRedisplay();
13231323
force_redisplay = 1;
13241324
UpdateRGBColors(colorbar_select_index);
1325-
UpdateSmokeColormap(smoke_render_option);
1325+
UpdateSmokeColormap();
13261326
GLUISmoke3dCB(UPDATE_SMOKECOLORS);
13271327
IdleCB();
13281328
break;
@@ -1335,8 +1335,7 @@ extern "C" void GLUISmoke3dCB(int var){
13351335
}
13361336
glutPostRedisplay();
13371337
force_redisplay=1;
1338-
UpdateSmokeColormap(RENDER_SLICE);
1339-
UpdateSmokeColormap(smoke_render_option);
1338+
UpdateSmokeColormap();
13401339
IdleCB();
13411340
break;
13421341
case SMOKE_FRAME_INC:

Source/smokeview/options.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#define pp_THREAD // turn on multi-threading
1010
//#define pp_FIRE_HIST // option to output histogram of 3d fire data
1111
#define pp_SMOKE3D // tentative correction to 3D smoke using temperature
12-
//#define pp_SMOKE3D_GPU // enable GPU option for 3D smoke
12+
#define pp_SMOKE3D_GPU // enable GPU option for 3D smoke
1313

1414
#ifdef pp_FRAME // turn on each frame type if pp_FRAME is set
1515
#define pp_BOUNDFRAME // turn on frame code for boundary files

Source/smokeview/readsmv.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,8 @@ void InitTextures0(void){
362362
#endif
363363
glTexImage1D(GL_TEXTURE_1D,0,GL_RGBA,MAXSMOKERGB,0,GL_RGBA,GL_FLOAT,rgb_volsmokecolormap);
364364

365-
glGenTextures(1,&slicesmoke_colormap_id);
365+
glActiveTexture(GL_TEXTURE2);
366+
glGenTextures(1, &slicesmoke_colormap_id);
366367
glBindTexture(GL_TEXTURE_1D,slicesmoke_colormap_id);
367368
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
368369
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
@@ -372,6 +373,7 @@ void InitTextures0(void){
372373
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP);
373374
#endif
374375
glTexImage1D(GL_TEXTURE_1D,0,GL_RGBA,MAXSMOKERGB,0,GL_RGBA,GL_FLOAT,rgb_slicesmokecolormap_01);
376+
glActiveTexture(GL_TEXTURE0);
375377

376378
PRINT_TIMER(texture_timer, "texture setup");
377379
CheckMemory;

Source/smokeview/shaders.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,8 @@ int SetSmokeShaders(){
507507
" }"
508508
" hrrlocal=(hrr/254.0)*global_hrrpuv_max;"
509509
" if(hrrlocal>global_hrrpuv_cb_min){"
510-
" colorindex=0.51+((hrrlocal-global_hrrpuv_cb_min)/(global_hrrpuv_max-global_hrrpuv_cb_min))/2.0;"
511-
" colorindex=clamp(colorindex,0.5,1.0);"
510+
" colorindex=(hrrlocal-global_hrrpuv_cb_min)/(global_hrrpuv_max-global_hrrpuv_cb_min);"
511+
" colorindex=clamp(colorindex,0.0,1.0);"
512512
" if(use_fire_alpha==0&&have_smoke==1){"
513513
" fcolor=hrrlocal/global_hrrpuv_max;"
514514
" opacity_multiplier=1.0+(emission_factor-1.0)*fcolor;"

Source/smokeview/smokeheaders.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ EXTERNCPP void UpdateAllBoundaryColors(int flag);
344344
EXTERNCPP void UpdateChopColors(void);
345345
EXTERNCPP void UpdateAllPlot3DColors(int flag);
346346
EXTERNCPP void UpdateCO2Colormap(void);
347-
EXTERNCPP void UpdateSmokeColormap(int option);
347+
EXTERNCPP void UpdateSmokeColormap(void);
348348
EXTERNCPP void UpdatePart5Extremes(void);
349349
EXTERNCPP void UpdateRGBColors(int colorindex);
350350
EXTERNCPP void UpdateSliceBounds2(void);

Source/smokeview/smokeviewvars.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2009,7 +2009,6 @@ SVEXTERN GLuint texture_colorbar_id, texture_slice_colorbar_id, texture_patch_co
20092009
SVEXTERN GLuint volsmoke_colormap_id,slice3d_colormap_id,slicesmoke_colormap_id;
20102010
SVEXTERN int SVDECL(volsmoke_colormap_id_defined,-1);
20112011
SVEXTERN int SVDECL(slice3d_colormap_id_defined,-1);
2012-
SVEXTERN int SVDECL(slicesmoke_colormap_id_defined, -1);
20132012
#ifdef INMAIN
20142013
SVEXTERN float mscale[3]={1.0,1.0,1.0};
20152014
#else

0 commit comments

Comments
 (0)