forked from blender/blender
WIP: uv-simple-select #1
@ -899,8 +899,8 @@ int RenderScheduler::get_num_samples_during_navigation(int resolution_divider) c
|
||||
/* Schedule samples equal to the resolution divider up to a maximum of 4.
|
||||
* The idea is to have enough information on the screen by increasing the sample count as the
|
||||
* resolution is decreased. */
|
||||
/* NOTE: Changeing this formula will change the formula in
|
||||
* "RenderScheduler::calculate_resolution_divider_for_time()"*/
|
||||
/* NOTE: Changing this formula will change the formula in
|
||||
* `RenderScheduler::calculate_resolution_divider_for_time()`. */
|
||||
return min(max(1, resolution_divider / pixel_size_), 4);
|
||||
}
|
||||
|
||||
@ -1177,18 +1177,18 @@ int RenderScheduler::calculate_resolution_divider_for_time(double desired_time,
|
||||
{
|
||||
const double ratio_between_times = actual_time / desired_time;
|
||||
|
||||
/* We can pass "ratio_between_times" to "get_num_samples_during_navigation()" to get our
|
||||
/* We can pass `ratio_between_times` to `get_num_samples_during_navigation()` to get our
|
||||
* navigation samples because the equation for calculating the resolution divider is as follows:
|
||||
* "actual_time / desired_time = sqr(resolution_divider) / sample_count".
|
||||
* While "resolution_divider" is less than or equal to 4, "resolution_divider = sample_count"
|
||||
* (This relationship is determined in "get_num_samples_during_navigation()"). With some
|
||||
* substitution we end up with "actual_time / desired_time = resolution_divider" while the
|
||||
* `actual_time / desired_time = sqr(resolution_divider) / sample_count`.
|
||||
* While `resolution_divider` is less than or equal to 4, `resolution_divider = sample_count`
|
||||
* (This relationship is determined in `get_num_samples_during_navigation()`). With some
|
||||
* substitution we end up with `actual_time / desired_time = resolution_divider` while the
|
||||
* resolution divider is less than or equal to 4. Once the resolution divider increases above 4,
|
||||
* the relationsip of "actual_time / desired_time = resolution_divider" is no longer true,
|
||||
* however the sample count retrieved from "get_num_samples_during_navigation()" is still
|
||||
* the relationship of `actual_time / desired_time = resolution_divider` is no longer true,
|
||||
* however the sample count retrieved from `get_num_samples_during_navigation()` is still
|
||||
* accurate if we continue using this assumption. It should be noted that the interaction between
|
||||
* pixel_size, sample count, and resolution divider are automatically accounted for and that's
|
||||
* why pixel_size isn't included in any of the equations. */
|
||||
* `pixel_size`, sample count, and resolution divider are automatically accounted for and that's
|
||||
* why `pixel_size` isn't included in any of the equations. */
|
||||
const int navigation_samples = get_num_samples_during_navigation(
|
||||
ceil_to_int(ratio_between_times));
|
||||
|
||||
|
@ -1704,7 +1704,7 @@ static void rigidbody_update_sim_ob(Depsgraph *depsgraph, Object *ob, RigidBodyO
|
||||
}
|
||||
}
|
||||
|
||||
/* Make transformed objects temporarily kinmatic
|
||||
/* Make transformed objects temporarily kinematic
|
||||
* so that they can be moved by the user during simulation. */
|
||||
if (is_selected && (G.moving & G_TRANSFORM_OBJ)) {
|
||||
RB_body_set_kinematic_state(rbo->shared->physics_object, true);
|
||||
|
@ -1166,7 +1166,7 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh
|
||||
&bm->ldata, CD_PROP_BOOL, BKE_uv_map_pin_name_get(layer_name, sub_layer_name));
|
||||
|
||||
/* If ever the uv map associated bool layers become optional in BMesh as well (like in Mesh)
|
||||
* this assert needs to be removed. For now it is a bug if they doin't exist. */
|
||||
* this assert needs to be removed. For now it is a bug if they don't exist. */
|
||||
BLI_assert(vertsel_layer_index >= 0 && edgesel_layer_index >= 0 && pin_layer_index >= 0);
|
||||
|
||||
int vertsel_offset = vertsel_layer_index >= 0 ? bm->ldata.layers[vertsel_layer_index].offset :
|
||||
|
@ -1197,8 +1197,8 @@ static void bmw_FaceLoopWalker_begin(BMWalker *walker, void *data)
|
||||
{
|
||||
BMwFaceLoopWalker *lwalk, owalk, *owalk_pt;
|
||||
BMEdge *e = data;
|
||||
/* BMesh *bm = walker->bm; */ /* UNUSED */
|
||||
/* int fcount = BM_edge_face_count(e); */ /* UNUSED */
|
||||
// BMesh *bm = walker->bm; /* UNUSED */
|
||||
// int fcount = BM_edge_face_count(e); /* UNUSED */
|
||||
|
||||
if (!bmw_FaceLoopWalker_edge_begins_loop(walker, e)) {
|
||||
return;
|
||||
|
@ -1183,7 +1183,7 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op)
|
||||
f = BM_face_create_verts(bm, varr, j, es->l->f, BM_CREATE_NOP, true);
|
||||
BMO_face_flag_enable(bm, f, ELE_NEW);
|
||||
|
||||
/* Copy for loop data, otherwise UVs and vcols are no good.
|
||||
/* Copy for loop data, otherwise UVs and vertex-colors are no good.
|
||||
* tiny speedup here we could be more clever and copy from known adjacent data
|
||||
* also - we could attempt to interpolate the loop data,
|
||||
* this would be much slower but more useful too. */
|
||||
|
@ -401,9 +401,9 @@ static void add_verts_to_dgroups(ReportList *reports,
|
||||
vertsfilled = 1;
|
||||
}
|
||||
else if (BKE_modifiers_findby_type(ob, eModifierType_Subsurf)) {
|
||||
/* is subsurf on? Lets use the verts on the limit surface then.
|
||||
/* Is subdivision-surface on? Lets use the verts on the limit surface then.
|
||||
* = same amount of vertices as mesh, but vertices moved to the
|
||||
* subsurfed position, like for 'optimal'. */
|
||||
* subdivision-surfaced position, like for 'optimal'. */
|
||||
subsurf_calculate_limit_positions(mesh, verts);
|
||||
vertsfilled = 1;
|
||||
}
|
||||
|
@ -528,7 +528,7 @@ static short annotation_stroke_addpoint(tGPsdata *p,
|
||||
|
||||
/* store settings */
|
||||
copy_v2_v2(pt->m_xy, mval);
|
||||
/* #44932 - Pressure vals are unreliable, so ignore for now */
|
||||
/* Pressure values are unreliable, so ignore for now, see #44932. */
|
||||
pt->pressure = 1.0f;
|
||||
pt->strength = 1.0f;
|
||||
pt->time = (float)(curtime - p->inittime);
|
||||
@ -544,7 +544,7 @@ static short annotation_stroke_addpoint(tGPsdata *p,
|
||||
|
||||
/* store settings */
|
||||
copy_v2_v2(pt->m_xy, mval);
|
||||
/* #44932 - Pressure vals are unreliable, so ignore for now */
|
||||
/* Pressure values are unreliable, so ignore for now, see #44932. */
|
||||
pt->pressure = 1.0f;
|
||||
pt->strength = 1.0f;
|
||||
pt->time = (float)(curtime - p->inittime);
|
||||
@ -620,7 +620,7 @@ static short annotation_stroke_addpoint(tGPsdata *p,
|
||||
|
||||
/* store settings */
|
||||
copy_v2_v2(pt->m_xy, mval);
|
||||
/* #44932 - Pressure vals are unreliable, so ignore for now */
|
||||
/* Pressure values are unreliable, so ignore for now, see #44932. */
|
||||
pt->pressure = 1.0f;
|
||||
pt->strength = 1.0f;
|
||||
pt->time = (float)(curtime - p->inittime);
|
||||
|
@ -764,7 +764,7 @@ static short gpencil_stroke_addpoint(tGPsdata *p,
|
||||
|
||||
/* store settings */
|
||||
copy_v2_v2(pt->m_xy, mval);
|
||||
/* #44932 - Pressure vals are unreliable, so ignore for now */
|
||||
/* Pressure values are unreliable, so ignore for now, see #44932. */
|
||||
pt->pressure = 1.0f;
|
||||
pt->strength = 1.0f;
|
||||
pt->time = (float)(curtime - p->inittime);
|
||||
@ -780,7 +780,7 @@ static short gpencil_stroke_addpoint(tGPsdata *p,
|
||||
|
||||
/* store settings */
|
||||
copy_v2_v2(pt->m_xy, mval);
|
||||
/* #44932 - Pressure vals are unreliable, so ignore for now */
|
||||
/* Pressure values are unreliable, so ignore for now, see #44932. */
|
||||
pt->pressure = 1.0f;
|
||||
pt->strength = 1.0f;
|
||||
pt->time = (float)(curtime - p->inittime);
|
||||
@ -3685,7 +3685,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
}
|
||||
|
||||
/* We don't pass on key events, GP is used with key-modifiers -
|
||||
* prevents Dkey to insert drivers. */
|
||||
* prevents D-key to insert drivers. */
|
||||
if (ISKEYBOARD(event->type)) {
|
||||
if (ELEM(event->type, EVT_LEFTARROWKEY, EVT_DOWNARROWKEY, EVT_RIGHTARROWKEY, EVT_UPARROWKEY)) {
|
||||
/* allow some keys:
|
||||
|
@ -50,83 +50,84 @@
|
||||
#define MARK_BOUNDARY 1
|
||||
|
||||
typedef struct UvAdjacencyElement {
|
||||
/* pointer to original uvelement */
|
||||
/** pointer to original UV-element. */
|
||||
UvElement *element;
|
||||
/* uv pointer for convenience. Caution, this points to the original UVs! */
|
||||
/** UV pointer for convenience. Caution, this points to the original UVs! */
|
||||
float *uv;
|
||||
/* Are we on locked in place? */
|
||||
/** Are we on locked in place? */
|
||||
bool is_locked;
|
||||
/* Are we on the boundary? */
|
||||
/** Are we on the boundary? */
|
||||
bool is_boundary;
|
||||
} UvAdjacencyElement;
|
||||
|
||||
typedef struct UvEdge {
|
||||
uint uv1;
|
||||
uint uv2;
|
||||
/* Are we in the interior? */
|
||||
/** Are we in the interior? */
|
||||
bool is_interior;
|
||||
} UvEdge;
|
||||
|
||||
typedef struct UVInitialStrokeElement {
|
||||
/* index to unique uv */
|
||||
/** index to unique UV. */
|
||||
int uv;
|
||||
|
||||
/* strength of brush on initial position */
|
||||
/** Strength of brush on initial position. */
|
||||
float strength;
|
||||
|
||||
/* initial uv position */
|
||||
/** initial UV position. */
|
||||
float initial_uv[2];
|
||||
} UVInitialStrokeElement;
|
||||
|
||||
typedef struct UVInitialStroke {
|
||||
/* Initial Selection,for grab brushes for instance */
|
||||
/** Initial Selection,for grab brushes for instance. */
|
||||
UVInitialStrokeElement *initialSelection;
|
||||
|
||||
/* Total initially selected UVs. */
|
||||
/** Total initially selected UVs. */
|
||||
int totalInitialSelected;
|
||||
|
||||
/* initial mouse coordinates */
|
||||
/** Initial mouse coordinates. */
|
||||
float init_coord[2];
|
||||
} UVInitialStroke;
|
||||
|
||||
/* custom data for uv smoothing brush */
|
||||
/** Custom data for UV smoothing brush. */
|
||||
typedef struct UvSculptData {
|
||||
/* Contains the first of each set of coincident UVs.
|
||||
* These will be used to perform smoothing on and propagate the changes
|
||||
* to their coincident UVs */
|
||||
/**
|
||||
* Contains the first of each set of coincident UVs.
|
||||
* These will be used to perform smoothing on and propagate the changes to their coincident UVs.
|
||||
*/
|
||||
UvAdjacencyElement *uv;
|
||||
|
||||
/* Total number of unique UVs. */
|
||||
/** Total number of unique UVs. */
|
||||
int totalUniqueUvs;
|
||||
|
||||
/* Edges used for adjacency info, used with laplacian smoothing */
|
||||
/** Edges used for adjacency info, used with laplacian smoothing */
|
||||
UvEdge *uvedges;
|
||||
|
||||
/* Total number of #UvEdge. */
|
||||
/** Total number of #UvEdge. */
|
||||
int totalUvEdges;
|
||||
|
||||
/* data for initial stroke, used by tools like grab */
|
||||
/** data for initial stroke, used by tools like grab */
|
||||
UVInitialStroke *initial_stroke;
|
||||
|
||||
/* timer to be used for airbrush-type brush */
|
||||
/** Timer to be used for airbrush-type brush. */
|
||||
wmTimer *timer;
|
||||
|
||||
/* to determine quickly adjacent UVs */
|
||||
/** To determine quickly adjacent UVs. */
|
||||
UvElementMap *elementMap;
|
||||
|
||||
/* uvsmooth Paint for fast reference */
|
||||
/** UV-smooth Paint for fast reference. */
|
||||
Paint *uvsculpt;
|
||||
|
||||
/* tool to use. duplicating here to change if modifier keys are pressed */
|
||||
/** Tool to use. duplicating here to change if modifier keys are pressed. */
|
||||
char tool;
|
||||
|
||||
/* store invert flag here */
|
||||
/** Store invert flag here. */
|
||||
char invert;
|
||||
|
||||
/* Is constrain to image bounds active? */
|
||||
/** Is constrain to image bounds active? */
|
||||
bool constrain_to_bounds;
|
||||
|
||||
/* Base for constrain_to_bounds. */
|
||||
/** Base for constrain_to_bounds. */
|
||||
float uv_base_offset[2];
|
||||
} UvSculptData;
|
||||
|
||||
|
@ -249,8 +249,10 @@ typedef enum {
|
||||
} GPUUniformBuiltin;
|
||||
#define GPU_NUM_UNIFORMS (GPU_UNIFORM_SRGB_TRANSFORM + 1)
|
||||
|
||||
/** TODO: To be moved as private API. Not really used outside of gpu_matrix.cc and doesn't really
|
||||
* offer a noticeable perf boost. */
|
||||
/**
|
||||
* TODO: To be moved as private API. Not really used outside of gpu_matrix.cc and doesn't really
|
||||
* offer a noticeable performance boost.
|
||||
*/
|
||||
int GPU_shader_get_builtin_uniform(GPUShader *shader, int builtin);
|
||||
|
||||
/** DEPRECATED: Use hardcoded buffer location instead. */
|
||||
|
@ -18,17 +18,17 @@ namespace blender::gpu {
|
||||
/**
|
||||
* `VK_ALLOCATION_CALLBACKS` initializes allocation callbacks for host allocations.
|
||||
* The macro creates a local static variable with the name `vk_allocation_callbacks`
|
||||
* that can be passed to vulkan API functions that expect
|
||||
* that can be passed to VULKAN API functions that expect
|
||||
* `const VkAllocationCallbacks *pAllocator`.
|
||||
*
|
||||
* When Blender is compiled with `WITH_VULKAN_GUARDEDALLOC` this will use
|
||||
* `MEM_guardedalloc` for host allocations that the driver does on behalf
|
||||
* of blender. More internal allocations are still being allocated via the
|
||||
* implemention inside the vulkan device driver.
|
||||
* implementation inside the VULKAN device driver.
|
||||
*
|
||||
* When `WITH_VULKAN_GUARDEDALLOC=Off` the memory allocation implemented
|
||||
* in the vulkan device driver is used for both internal and application
|
||||
* focussed memory operations.
|
||||
* focused memory operations.
|
||||
*/
|
||||
|
||||
#ifdef WITH_VULKAN_GUARDEDALLOC
|
||||
|
@ -95,7 +95,8 @@ enum {
|
||||
/**
|
||||
* The space is not a regular one opened through the editor menu (for example) but spawned by an
|
||||
* operator to fulfill some task and then disappear again.
|
||||
* Can typically be cancelled using Escape, but that is handled on the editor level. */
|
||||
* Can typically be canceled using Escape, but that is handled on the editor level.
|
||||
*/
|
||||
SPACE_FLAG_TYPE_TEMPORARY = (1 << 0),
|
||||
/**
|
||||
* Used to mark a space as active but "overlapped" by temporary full-screen spaces. Without this
|
||||
@ -605,10 +606,13 @@ typedef struct SequencerTimelineOverlay {
|
||||
typedef enum eSpaceSeq_SequencerTimelineOverlay_Flag {
|
||||
SEQ_TIMELINE_SHOW_STRIP_OFFSETS = (1 << 1),
|
||||
SEQ_TIMELINE_SHOW_THUMBNAILS = (1 << 2),
|
||||
SEQ_TIMELINE_SHOW_STRIP_COLOR_TAG = (1 << 3), /* use Sequence->color_tag */
|
||||
/** Use #Sequence::color_tag */
|
||||
SEQ_TIMELINE_SHOW_STRIP_COLOR_TAG = (1 << 3),
|
||||
SEQ_TIMELINE_SHOW_FCURVES = (1 << 5),
|
||||
SEQ_TIMELINE_ALL_WAVEFORMS = (1 << 7), /* draw all waveforms */
|
||||
SEQ_TIMELINE_NO_WAVEFORMS = (1 << 8), /* draw no waveforms */
|
||||
/** Draw all wave-forms. */
|
||||
SEQ_TIMELINE_ALL_WAVEFORMS = (1 << 7),
|
||||
/** Draw no wave-forms. */
|
||||
SEQ_TIMELINE_NO_WAVEFORMS = (1 << 8),
|
||||
SEQ_TIMELINE_SHOW_STRIP_NAME = (1 << 14),
|
||||
SEQ_TIMELINE_SHOW_STRIP_SOURCE = (1 << 15),
|
||||
SEQ_TIMELINE_SHOW_STRIP_DURATION = (1 << 16),
|
||||
@ -978,7 +982,7 @@ enum eFileDetails {
|
||||
FILE_DETAILS_DATETIME = (1 << 1),
|
||||
};
|
||||
|
||||
/* these values need to be hardcoded in structs, dna does not recognize defines */
|
||||
/* These values need to be hard-coded in structs, DNA does not recognize defines. */
|
||||
/* also defined in BKE */
|
||||
#define FILE_MAXDIR 768
|
||||
#define FILE_MAXFILE 256
|
||||
@ -1210,7 +1214,7 @@ typedef struct SpaceImage {
|
||||
struct Image *image;
|
||||
struct ImageUser iuser;
|
||||
|
||||
/** Histogram waveform and vectorscope. */
|
||||
/** Histogram waveform and vector-scope. */
|
||||
struct Scopes scopes;
|
||||
/** Sample line histogram. */
|
||||
struct Histogram sample_line_hist;
|
||||
@ -1589,12 +1593,12 @@ typedef struct SpaceNode {
|
||||
|
||||
/* tree type for the current node tree */
|
||||
char tree_idname[64];
|
||||
/** Treetype: as same nodetree->type. */
|
||||
/** Same as #bNodeTree::type (deprecated). */
|
||||
int treetype DNA_DEPRECATED;
|
||||
|
||||
/** Texfrom object, world or brush. */
|
||||
/** Texture-from object, world or brush (#eSpaceNode_TexFrom). */
|
||||
short texfrom;
|
||||
/** Shader from object or world. */
|
||||
/** Shader from object or world (#eSpaceNode_ShaderFrom). */
|
||||
short shaderfrom;
|
||||
|
||||
/** Grease-pencil data. */
|
||||
@ -1658,7 +1662,7 @@ typedef struct ConsoleLine {
|
||||
/* Keep these 3 vars so as to share free, realloc functions. */
|
||||
/** Allocated length. */
|
||||
int len_alloc;
|
||||
/** Real len - strlen(). */
|
||||
/** Real length: `strlen()`. */
|
||||
int len;
|
||||
char *line;
|
||||
|
||||
@ -1671,7 +1675,8 @@ typedef struct ConsoleLine {
|
||||
typedef enum eConsoleLine_Type {
|
||||
CONSOLE_LINE_OUTPUT = 0,
|
||||
CONSOLE_LINE_INPUT = 1,
|
||||
CONSOLE_LINE_INFO = 2, /* autocomp feedback */
|
||||
/** Auto-completion feedback. */
|
||||
CONSOLE_LINE_INFO = 2,
|
||||
CONSOLE_LINE_ERROR = 3,
|
||||
} eConsoleLine_Type;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user