void icetStateSetDefaults(void) { GLint *int_array; int i; icetDiagnostics(ICET_DIAG_ALL_NODES | ICET_DIAG_WARNINGS); icetStateSetInteger(ICET_RANK, ICET_COMM_RANK()); icetStateSetInteger(ICET_NUM_PROCESSES, ICET_COMM_SIZE()); icetStateSetInteger(ICET_ABSOLUTE_FAR_DEPTH, 1); /*icetStateSetInteger(ICET_ABSOLUTE_FAR_DEPTH, 0xFFFFFFFF);*/ icetStateSetFloatv(ICET_BACKGROUND_COLOR, 4, black); icetStateSetInteger(ICET_BACKGROUND_COLOR_WORD, 0); icetResetTiles(); icetStateSetIntegerv(ICET_DISPLAY_NODES, 0, NULL); icetStateSetDoublev(ICET_GEOMETRY_BOUNDS, 0, NULL); icetStateSetInteger(ICET_NUM_BOUNDING_VERTS, 0); icetStateSetPointer(ICET_STRATEGY_COMPOSE, NULL); icetInputOutputBuffers(ICET_COLOR_BUFFER_BIT | ICET_DEPTH_BUFFER_BIT, ICET_COLOR_BUFFER_BIT); int_array = malloc(ICET_COMM_SIZE() * sizeof(GLint)); for (i = 0; i < ICET_COMM_SIZE(); i++) { int_array[i] = i; } icetStateSetIntegerv(ICET_COMPOSITE_ORDER, ICET_COMM_SIZE(), int_array); icetStateSetIntegerv(ICET_PROCESS_ORDERS, ICET_COMM_SIZE(), int_array); free(int_array); icetStateSetInteger(ICET_DATA_REPLICATION_GROUP, ICET_COMM_RANK()); icetStateSetInteger(ICET_DATA_REPLICATION_GROUP_SIZE, 1); icetStateSetPointer(ICET_DRAW_FUNCTION, NULL); icetStateSetInteger(ICET_READ_BUFFER, GL_BACK); #ifdef _WIN32 icetStateSetInteger(ICET_COLOR_FORMAT, GL_BGRA_EXT); #else icetStateSetInteger(ICET_COLOR_FORMAT, GL_RGBA); #endif icetStateSetInteger(ICET_FRAME_COUNT, 0); icetEnable(ICET_FLOATING_VIEWPORT); icetDisable(ICET_ORDERED_COMPOSITE); icetDisable(ICET_CORRECT_COLORED_BACKGROUND); icetEnable(ICET_DISPLAY); icetDisable(ICET_DISPLAY_COLORED_BACKGROUND); icetDisable(ICET_DISPLAY_INFLATE); icetEnable(ICET_DISPLAY_INFLATE_WITH_HARDWARE); icetStateSetBoolean(ICET_IS_DRAWING_FRAME, 0); icetStateSetPointer(ICET_COLOR_BUFFER, NULL); icetStateSetPointer(ICET_DEPTH_BUFFER, NULL); icetStateSetBoolean(ICET_COLOR_BUFFER_VALID, 0); icetStateSetBoolean(ICET_DEPTH_BUFFER_VALID, 0); icetStateResetTiming(); }
void icetGLInitialize(void) { if (icetGLIsInitialized()) { icetRaiseWarning("icetGLInitialize called multiple times.", ICET_INVALID_OPERATION); } icetStateSetBoolean(ICET_GL_INITIALIZED, ICET_TRUE); icetGLSetReadBuffer(GL_BACK); icetStateSetPointer(ICET_GL_DRAW_FUNCTION, NULL); icetStateSetInteger(ICET_GL_INFLATE_TEXTURE, 0); icetEnable(ICET_GL_DISPLAY); icetDisable(ICET_GL_DISPLAY_COLORED_BACKGROUND); icetDisable(ICET_GL_DISPLAY_INFLATE); icetEnable(ICET_GL_DISPLAY_INFLATE_WITH_HARDWARE); icetStateSetPointer(ICET_RENDER_LAYER_DESTRUCTOR, gl_destroy); }
static void BackgroundCorrectSetupRender() { IceTInt num_proc; icetGetIntegerv(ICET_NUM_PROCESSES, &num_proc); icetCompositeMode(ICET_COMPOSITE_MODE_BLEND); icetSetColorFormat(ICET_IMAGE_COLOR_RGBA_FLOAT); icetSetDepthFormat(ICET_IMAGE_DEPTH_NONE); icetDisable(ICET_ORDERED_COMPOSITE); icetEnable(ICET_CORRECT_COLORED_BACKGROUND); icetDrawCallback(BackgroundCorrectDraw); icetResetTiles(); icetAddTile(0, 0, PROC_REGION_WIDTH, PROC_REGION_HEIGHT*(num_proc+1), 0); }
// **************************************************************************** // Method: IceTNetworkManager default constructor // // Programmer: Tom Fogal // Creation: June 17, 2008 // // Modifications: // // Tom Fogal, Wed May 18 11:57:34 MDT 2011 // Initialize 'renderings'. // // **************************************************************************** IceTNetworkManager::IceTNetworkManager(void): NetworkManager(), renderings(0) { this->comm = icetCreateMPICommunicator(VISIT_MPI_COMM); DEBUG_ONLY(ICET_CHECK_ERROR); this->context = icetCreateContext(comm); DEBUG_ONLY(ICET_CHECK_ERROR); ICET(icetSetContext(this->context)); DEBUG_ONLY(ICET(icetDiagnostics(ICET_DIAG_FULL))); ICET(icetStrategy(ICET_STRATEGY_REDUCE)); ICET(icetDrawFunc(render)); ICET(icetDisable(ICET_DISPLAY)); ICET(icetInputOutputBuffers( ICET_COLOR_BUFFER_BIT | ICET_DEPTH_BUFFER_BIT, /* inputs */ ICET_COLOR_BUFFER_BIT | ICET_DEPTH_BUFFER_BIT /* outputs */ )); DEBUG_ONLY(PR_ICET_MPI); }
avtDataObject_p IceTNetworkManager::Render( bool checkThreshold, intVector networkIds, bool getZBuffer, int annotMode, int windowID, bool leftEye) { int t0 = visitTimer->StartTimer(); DataNetwork *origWorkingNet = workingNet; avtDataObject_p retval; EngineVisWinInfo &viswinInfo = viswinMap[windowID]; viswinInfo.markedForDeletion = false; VisWindow *viswin = viswinInfo.viswin; std::vector<avtPlot_p>& imageBasedPlots = viswinInfo.imageBasedPlots; renderings = 0; TRY { this->StartTimer(); RenderSetup(windowID, networkIds, getZBuffer, annotMode, leftEye, checkThreshold); bool plotDoingTransparencyOutsideTransparencyActor = false; for(size_t i = 0 ; i < networkIds.size() ; i++) { workingNet = NULL; UseNetwork(networkIds[i]); if(this->workingNet->GetPlot()->ManagesOwnTransparency()) { plotDoingTransparencyOutsideTransparencyActor = true; } } workingNet = NULL; // We can't easily figure out a compositing order, which IceT requires // in order to properly composite transparent geometry. Thus if there // is some transparency, fallback to our parent implementation. avtTransparencyActor* trans = viswin->GetTransparencyActor(); bool transparenciesExist = trans->TransparenciesExist() || plotDoingTransparencyOutsideTransparencyActor; if (transparenciesExist) { debug2 << "Encountered transparency: falling back to old " "SR / compositing routines." << std::endl; retval = NetworkManager::RenderInternal(); } else { bool needZB = !imageBasedPlots.empty() || renderState.shadowMap || renderState.depthCues; // Confusingly, we need to set the input to be *opposite* of what VisIt // wants. This is due to (IMHO) poor naming in the IceT case; on the // input side: // ICET_DEPTH_BUFFER_BIT set: do Z-testing // ICET_DEPTH_BUFFER_BIT not set: do Z-based compositing. // On the output side: // ICET_DEPTH_BUFFER_BIT set: readback of Z buffer is allowed // ICET_DEPTH_BUFFER_BIT not set: readback of Z does not work. // In VisIt's case, we calculated a `need Z buffer' predicate based // around the idea that we need the Z buffer to do Z-compositing. // However, IceT \emph{always} needs the Z buffer internally -- the // flag only differentiates between `compositing' methodologies // (painter-style or `over' operator) on input. GLenum inputs = ICET_COLOR_BUFFER_BIT; GLenum outputs = ICET_COLOR_BUFFER_BIT; // Scratch all that, I guess. That might be the correct way to go // about things in the long run, but IceT only gives us back half an // image if we don't set the depth buffer bit. The compositing is a // bit wrong, but there's not much else we can do.. // Consider removing the `hack' if a workaround is found. if (/*hack*/true/*hack*/) // || !this->MemoMultipass(viswin)) { inputs |= ICET_DEPTH_BUFFER_BIT; } if(needZB) { outputs |= ICET_DEPTH_BUFFER_BIT; } ICET(icetInputOutputBuffers(inputs, outputs)); // If there is a backdrop image, we need to tell IceT so that it can // composite correctly. if(viswin->GetBackgroundMode() != AnnotationAttributes::Solid) { ICET(icetEnable(ICET_CORRECT_COLORED_BACKGROUND)); } else { ICET(icetDisable(ICET_CORRECT_COLORED_BACKGROUND)); } if (renderState.renderOnViewer) { RenderCleanup(); avtDataObject_p dobj = NULL; CATCH_RETURN2(1, dobj); } debug5 << "Rendering " << viswin->GetNumPrimitives() << " primitives." << endl; int width, height, width_start, height_start; // This basically gets the width and the height. // The distinction is for 2D rendering, where we only want the // width and the height of the viewport. viswin->GetCaptureRegion(width_start, height_start, width, height, renderState.viewportedMode); this->TileLayout(width, height); CallInitializeProgressCallback(this->RenderingStages()); // IceT mode is different from the standard network manager; we don't // need to create any compositor or anything: it's all done under the // hood. // Whether or not to do multipass rendering (opaque first, translucent // second) is all handled in the callback; from our perspective, we // just say draw, read back the image, and post-process it. // IceT sometimes omits large parts of Curve plots when using the // REDUCE strategy. Use a different compositing strategy for Curve // plots to avoid the problem. if(viswin->GetWindowMode() == WINMODE_CURVE) ICET(icetStrategy(ICET_STRATEGY_VTREE)); else ICET(icetStrategy(ICET_STRATEGY_REDUCE)); ICET(icetDrawFunc(render)); ICET(icetDrawFrame()); // Now that we're done rendering, we need to post process the image. debug3 << "IceTNM: Starting readback." << std::endl; avtImage_p img = this->Readback(viswin, needZB); // Now its essentially back to the same behavior as our parent: // shadows // depth cueing // post processing if (renderState.shadowMap) this->RenderShadows(img); if (renderState.depthCues) this->RenderDepthCues(img); // If the engine is doing more than just 3D annotations, // post-process the composited image. RenderPostProcess(img); CopyTo(retval, img); } RenderCleanup(); } CATCHALL { RenderCleanup(); RETHROW; } ENDTRY workingNet = origWorkingNet; visitTimer->StopTimer(t0, "Ice-T Render"); return retval; }
void icetStateSetDefaults(void) { IceTInt *int_array; int i; int comm_size, comm_rank; icetDiagnostics(ICET_DIAG_ALL_NODES | ICET_DIAG_WARNINGS); comm_size = icetCommSize(); comm_rank = icetCommRank(); icetStateSetInteger(ICET_RANK, comm_rank); icetStateSetInteger(ICET_NUM_PROCESSES, comm_size); /* icetStateSetInteger(ICET_ABSOLUTE_FAR_DEPTH, 1); */ /*icetStateSetInteger(ICET_ABSOLUTE_FAR_DEPTH, 0xFFFFFFFF);*/ icetStateSetFloatv(ICET_BACKGROUND_COLOR, 4, black); icetStateSetInteger(ICET_BACKGROUND_COLOR_WORD, 0); icetStateSetInteger(ICET_COLOR_FORMAT, ICET_IMAGE_COLOR_RGBA_UBYTE); icetStateSetInteger(ICET_DEPTH_FORMAT, ICET_IMAGE_DEPTH_FLOAT); icetResetTiles(); icetStateSetIntegerv(ICET_DISPLAY_NODES, 0, NULL); icetStateSetDoublev(ICET_GEOMETRY_BOUNDS, 0, NULL); icetStateSetInteger(ICET_NUM_BOUNDING_VERTS, 0); icetStateSetInteger(ICET_STRATEGY, ICET_STRATEGY_UNDEFINED); icetSingleImageStrategy(ICET_SINGLE_IMAGE_STRATEGY_AUTOMATIC); icetCompositeMode(ICET_COMPOSITE_MODE_Z_BUFFER); int_array = icetStateAllocateInteger(ICET_COMPOSITE_ORDER, comm_size); for (i = 0; i < comm_size; i++) { int_array[i] = i; } int_array = icetStateAllocateInteger(ICET_PROCESS_ORDERS, comm_size); for (i = 0; i < comm_size; i++) { int_array[i] = i; } icetStateSetInteger(ICET_DATA_REPLICATION_GROUP, comm_rank); icetStateSetInteger(ICET_DATA_REPLICATION_GROUP_SIZE, 1); icetStateSetInteger(ICET_FRAME_COUNT, 0); if (getenv("ICET_MAGIC_K") != NULL) { IceTInt magic_k = atoi(getenv("ICET_MAGIC_K")); if (magic_k > 1) { icetStateSetInteger(ICET_MAGIC_K, magic_k); } else { icetRaiseError("Environment varible ICET_MAGIC_K must be set" " to an integer greater than 1.", ICET_INVALID_VALUE); icetStateSetInteger(ICET_MAGIC_K, ICET_MAGIC_K_DEFAULT); } } else { icetStateSetInteger(ICET_MAGIC_K, ICET_MAGIC_K_DEFAULT); } if (getenv("ICET_MAX_IMAGE_SPLIT") != NULL) { IceTInt max_image_split = atoi(getenv("ICET_MAX_IMAGE_SPLIT")); if (max_image_split > 0) { icetStateSetInteger(ICET_MAX_IMAGE_SPLIT, max_image_split); } else { icetRaiseError("Environment variable ICET_MAX_IMAGE_SPLIT must be" " set to an integer greater than 0.", ICET_INVALID_VALUE); icetStateSetInteger(ICET_MAX_IMAGE_SPLIT, ICET_MAX_IMAGE_SPLIT_DEFAULT); } } else { icetStateSetInteger(ICET_MAX_IMAGE_SPLIT, ICET_MAX_IMAGE_SPLIT_DEFAULT); } icetStateSetPointer(ICET_DRAW_FUNCTION, NULL); icetStateSetPointer(ICET_RENDER_LAYER_DESTRUCTOR, NULL); icetEnable(ICET_FLOATING_VIEWPORT); icetDisable(ICET_ORDERED_COMPOSITE); icetDisable(ICET_CORRECT_COLORED_BACKGROUND); icetEnable(ICET_COMPOSITE_ONE_BUFFER); icetEnable(ICET_INTERLACE_IMAGES); icetEnable(ICET_COLLECT_IMAGES); icetDisable(ICET_RENDER_EMPTY_IMAGES); icetStateSetBoolean(ICET_IS_DRAWING_FRAME, 0); icetStateSetBoolean(ICET_RENDER_BUFFER_SIZE, 0); icetStateSetInteger(ICET_VALID_PIXELS_TILE, -1); icetStateSetInteger(ICET_VALID_PIXELS_OFFSET, 0); icetStateSetInteger(ICET_VALID_PIXELS_NUM, 0); icetStateResetTiming(); }