static LineStyleModifier *alloc_thickness_modifier(int type) { size_t size; switch (type) { case LS_MODIFIER_ALONG_STROKE: size = sizeof(LineStyleThicknessModifier_AlongStroke); break; case LS_MODIFIER_DISTANCE_FROM_CAMERA: size = sizeof(LineStyleThicknessModifier_DistanceFromCamera); break; case LS_MODIFIER_DISTANCE_FROM_OBJECT: size = sizeof(LineStyleThicknessModifier_DistanceFromObject); break; case LS_MODIFIER_MATERIAL: size = sizeof(LineStyleThicknessModifier_Material); break; case LS_MODIFIER_CALLIGRAPHY: size = sizeof(LineStyleThicknessModifier_Calligraphy); break; default: return NULL; /* unknown modifier type */ } return new_modifier(type, size); }
static LineStyleModifier *alloc_alpha_modifier(const char *name, int type) { size_t size; switch (type) { case LS_MODIFIER_ALONG_STROKE: size = sizeof(LineStyleAlphaModifier_AlongStroke); break; case LS_MODIFIER_DISTANCE_FROM_CAMERA: size = sizeof(LineStyleAlphaModifier_DistanceFromCamera); break; case LS_MODIFIER_DISTANCE_FROM_OBJECT: size = sizeof(LineStyleAlphaModifier_DistanceFromObject); break; case LS_MODIFIER_MATERIAL: size = sizeof(LineStyleAlphaModifier_Material); break; case LS_MODIFIER_TANGENT: size = sizeof(LineStyleAlphaModifier_Tangent); break; case LS_MODIFIER_NOISE: size = sizeof(LineStyleAlphaModifier_Noise); break; case LS_MODIFIER_CREASE_ANGLE: size = sizeof(LineStyleAlphaModifier_CreaseAngle); break; case LS_MODIFIER_CURVATURE_3D: size = sizeof(LineStyleAlphaModifier_Curvature_3D); break; default: return NULL; /* unknown modifier type */ } return new_modifier(name, type, size); }
static LineStyleModifier *alloc_geometry_modifier(const char *name, int type) { size_t size; switch (type) { case LS_MODIFIER_SAMPLING: size = sizeof(LineStyleGeometryModifier_Sampling); break; case LS_MODIFIER_BEZIER_CURVE: size = sizeof(LineStyleGeometryModifier_BezierCurve); break; case LS_MODIFIER_SINUS_DISPLACEMENT: size = sizeof(LineStyleGeometryModifier_SinusDisplacement); break; case LS_MODIFIER_SPATIAL_NOISE: size = sizeof(LineStyleGeometryModifier_SpatialNoise); break; case LS_MODIFIER_PERLIN_NOISE_1D: size = sizeof(LineStyleGeometryModifier_PerlinNoise1D); break; case LS_MODIFIER_PERLIN_NOISE_2D: size = sizeof(LineStyleGeometryModifier_PerlinNoise2D); break; case LS_MODIFIER_BACKBONE_STRETCHER: size = sizeof(LineStyleGeometryModifier_BackboneStretcher); break; case LS_MODIFIER_TIP_REMOVER: size = sizeof(LineStyleGeometryModifier_TipRemover); break; case LS_MODIFIER_POLYGONIZATION: size = sizeof(LineStyleGeometryModifier_Polygonalization); break; case LS_MODIFIER_GUIDING_LINES: size = sizeof(LineStyleGeometryModifier_GuidingLines); break; case LS_MODIFIER_BLUEPRINT: size = sizeof(LineStyleGeometryModifier_Blueprint); break; case LS_MODIFIER_2D_OFFSET: size = sizeof(LineStyleGeometryModifier_2DOffset); break; case LS_MODIFIER_2D_TRANSFORM: size = sizeof(LineStyleGeometryModifier_2DTransform); break; case LS_MODIFIER_SIMPLIFICATION: size = sizeof(LineStyleGeometryModifier_Simplification); break; default: return NULL; /* unknown modifier type */ } return new_modifier(name, type, size); }
void VMEvent::create_event_request(PacketInputStream *in, PacketOutputStream *out, jbyte event_kind) { UsingFastOops fast_oops; VMEvent::Fast ep; int i; bool error = false; VMEventModifier::Fast current_modifier_slot, new_modifier, event_modifier; ep = create_vm_event_request(); ep().set_event_kind(event_kind); ep().set_suspend_policy(in->read_byte()); ep().set_num_modifiers(in->read_int()); Transport *transport = in->transport(); ep().set_transport(transport); #if ENABLE_ISOLATES ep().set_task_id(transport->task_id()); TaskGCContext tmp(transport->task_id()); #endif for (i=0; i < ep().num_modifiers(); i++) { new_modifier = VMEventModifier::new_modifier(in, out, error); if (error) { // some sort of error happened if (out->error() != 0) { out->send_packet(); } return; } if (new_modifier.is_null()) { // Most likely we don't support this modifier continue; } if (event_kind == JDWP_EventKind_BREAKPOINT && new_modifier().mod_kind() == JDWP_EventRequest_Set_Out_modifiers_Modifier_LocationOnly) { UsingFastOops fastoops2; LocationModifier *lmp = (LocationModifier *)&new_modifier; VMEvent::Fast epb = VMEvent::find_breakpoint_event(lmp, transport->task_id()); if (epb.not_null()) { out->write_int(epb().event_id()); out->send_packet(); // out->send_error(JDWP_Error_NOT_IMPLEMENTED); // there's a breakpoint here already, don't bother installing another return; } #if ENABLE_ISOLATES InstanceClass::Raw ic = JavaDebugger::get_object_by_id(new_modifier().clazz_id()); if (ic().class_id() < ROM::number_of_system_classes()) { // breakpoint in system class, allow in any task ep().set_task_id(-1); } // See if any other task already has a breakpoint here. epb = find_breakpoint_event(lmp); if (!epb.is_null()) { // Has to be some other task since we haven't linked in this event GUARANTEE(epb().task_id() != transport->task_id(), "Breakpoint already inserted"); LocationModifier::Raw lmod = get_modifier(&epb, JDWP_EventRequest_Set_Out_modifiers_Modifier_LocationOnly); GUARANTEE(!lmod.is_null(),"Breakpoint event has no location modifier"); lmp->set_save_opcode(lmod().save_opcode()); } else { #endif /* Return an error back to the debugger if * the breakpoint could not be installed. */ lmp->unlink_method(); lmp->save_method_entry(); if (lmp->set_method_opcode(Bytecodes::_breakpoint, true) == false){ out->send_error(JDWP_Error_INVALID_LOCATION); return; } #if ENABLE_ISOLATES } #endif } // insert the mod at the end of the list of modifiers event_modifier = ep().mods(); if (event_modifier.is_null()) { ep().set_mods(&new_modifier); current_modifier_slot = ep().mods(); } else { current_modifier_slot().set_next(&new_modifier); current_modifier_slot = new_modifier; } } #ifdef AZZERT if (TraceDebugger) { tty->print_cr("Create Event: xprt = 0x%x, ep = 0x%lx, id = 0x%x, kind = 0x%lx, suspend = 0x%lx, num mods = 0x%lx", transport->obj(), ep.obj(), ep().event_id(), ep().event_kind(), ep().suspend_policy(), ep().num_modifiers()); } #endif ep().set_next((VMEvent *)Universe::vmevent_request_head()); *Universe::vmevent_request_head() = ep; out->write_int(ep().event_id()); out->send_packet(); VMEvent::add_notification(JDWP_eventkind_to_dbg_eventkind(event_kind)); }