﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3A2.5%2FSource%2FArchitecture%2FBadLevelCalls</id>
	<title>Dev:2.5/Source/Architecture/BadLevelCalls - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3A2.5%2FSource%2FArchitecture%2FBadLevelCalls"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:2.5/Source/Architecture/BadLevelCalls&amp;action=history"/>
	<updated>2026-05-11T15:29:10Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:2.5/Source/Architecture/BadLevelCalls&amp;diff=59508&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:2.5/Source/Architecture/BadLevelCalls&amp;diff=59508&amp;oldid=prev"/>
		<updated>2018-06-28T17:54:36Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 17:54時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:2.5/Source/Architecture/BadLevelCalls&amp;diff=59507&amp;oldid=prev</id>
		<title>2011年2月16日 (水) 23:20にwiki&gt;JesterKingによる</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:2.5/Source/Architecture/BadLevelCalls&amp;diff=59507&amp;oldid=prev"/>
		<updated>2011-02-16T23:20:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== Bad Level Calls ===&lt;br /&gt;
&lt;br /&gt;
When a function is used from a module, with that function being defined in another module on which the first module shouldn't depend, that's a bad level call. For example src/ depends on blenkernel/ and not the other way around, but blenkernel/ is still calling some functions in src/, resulting in circular dependencies between modules. Such errors show up especially when compiling the blenderplayer, which includes blenkernel/ but not src/ or render/ for example.&lt;br /&gt;
&lt;br /&gt;
It would be good to get rid of those as much as possible as part of 2.50 development. Here is a list of bad level calls. These are declared and defined in as stubs, i.e. empty functions that do nothing in order to get the blenderplayer to compile:&lt;br /&gt;
* blenkernel/BKE_bad_level_calls.h&lt;br /&gt;
* blenkernel/bad_level_call_stubs/stubs.c&lt;br /&gt;
&lt;br /&gt;
=== How to Fix ===&lt;br /&gt;
&lt;br /&gt;
To be written: how to deal with module owners, review, .. .&lt;br /&gt;
&lt;br /&gt;
=== Uncategorized ===&lt;br /&gt;
&lt;br /&gt;
* int winqueue_break= 0;&lt;br /&gt;
&lt;br /&gt;
* char bprogname[1];&lt;br /&gt;
* char btempdir[1];&lt;br /&gt;
&lt;br /&gt;
* char *getIpoCurveName( struct IpoCurve * icu )&lt;br /&gt;
* void insert_vert_icu(struct IpoCurve *icu, float x, float y, short fast)&lt;br /&gt;
* struct IpoCurve *verify_ipocurve(struct ID *id, short a, char *b, char *d, int e)&lt;br /&gt;
&lt;br /&gt;
* void setscreen(struct bScreen *sc)&lt;br /&gt;
* void force_draw_all(int header)&lt;br /&gt;
&lt;br /&gt;
* void build_seqar(struct ListBase *seqbase, struct Sequence  ***seqar, int *totseq)&lt;br /&gt;
&lt;br /&gt;
* void free_oops(struct Oops *oops){}&lt;br /&gt;
* void exit_posemode(int freedata){}&lt;br /&gt;
&lt;br /&gt;
* ListBase editNurb;&lt;br /&gt;
&lt;br /&gt;
* void error(char *str, ...)&lt;br /&gt;
* int saveover(char *str)&lt;br /&gt;
* short pupmenu(char *instr)&lt;br /&gt;
&lt;br /&gt;
* void waitcursor(int val)&lt;br /&gt;
* float *give_cursor(void)&lt;br /&gt;
&lt;br /&gt;
* void allqueue(unsigned short event, short val)&lt;br /&gt;
* void mainqenter (unsigned short event, short val)&lt;br /&gt;
&lt;br /&gt;
* void load_editMesh(void)&lt;br /&gt;
* void make_editMesh(void)&lt;br /&gt;
* void free_editMesh(struct EditMesh *em)&lt;br /&gt;
* void docenter_new(void)&lt;br /&gt;
&lt;br /&gt;
* void free_realtime_image(Image *ima) // has to become a callback, opengl stuff&lt;br /&gt;
&lt;br /&gt;
* void copy_view3d_lock(short val)&lt;br /&gt;
* void allspace(unsigned short event, short val)&lt;br /&gt;
&lt;br /&gt;
* ListBase editelems;&lt;br /&gt;
&lt;br /&gt;
* define LEFTMOUSE    0x001&lt;br /&gt;
* void free_editing(struct Editing *ed)&lt;br /&gt;
&lt;br /&gt;
* void EM_select_face(struct EditFace *efa, int sel)&lt;br /&gt;
* void EM_select_edge(struct EditEdge *eed, int sel)&lt;br /&gt;
* struct EditVert *addvertlist(float *vec, struct EditVert *example)&lt;br /&gt;
* struct EditEdge *addedgelist(struct EditVert *v1, struct EditVert *v2, struct EditEdge * *example)&lt;br /&gt;
* struct EditFace *addfacelist(struct EditVert *v1, struct EditVert *v2, struct EditVert *v3, struct EditVert *v4, struct EditFace *example, struct EditFace *exampleEdges)&lt;br /&gt;
* struct EditEdge *findedgelist(struct EditVert *v1, struct EditVert *v2)&lt;br /&gt;
&lt;br /&gt;
* void countall(void)&lt;br /&gt;
&lt;br /&gt;
* define FLO 128&lt;br /&gt;
* define INT 96&lt;br /&gt;
&lt;br /&gt;
* char texstr[20][12];    /* buttons.c */&lt;br /&gt;
&lt;br /&gt;
* void make_unique_prop_names(char *str) {}&lt;br /&gt;
&lt;br /&gt;
* void bglBegin(int mode) {}&lt;br /&gt;
* void bglVertex3fv(float *vec) {}&lt;br /&gt;
* void bglVertex3f(float x, float y, float z) {}&lt;br /&gt;
* void bglEnd(void) {}&lt;br /&gt;
&lt;br /&gt;
* struct DerivedMesh *NewBooleanDerivedMesh(struct Object *ob, struct Object *ob_select, int int_op_type) { return 0; }&lt;br /&gt;
&lt;br /&gt;
* void elbeemDebugOut(char *msg) {}&lt;br /&gt;
* void fluidsimSettingsFree(struct FluidsimSettings* sb) {}&lt;br /&gt;
* void fluidsimSettingsCopy(struct FluidsimSettings* sb) {}&lt;br /&gt;
&lt;br /&gt;
* void update_for_newframe() {}&lt;br /&gt;
* void BIF_filelist_freelib(struct FileList* filelist) {};&lt;br /&gt;
&lt;br /&gt;
* TimeMarker *get_frame_marker(int frame){return 0;};&lt;br /&gt;
&lt;br /&gt;
* Sequence *get_forground_frame_seq(int frame){return 0;};&lt;br /&gt;
* void set_last_seq(Sequence *seq){};&lt;br /&gt;
&lt;br /&gt;
* void harmonic_coordinates_bind(struct MeshDeformModifierData *mmd, float (*vertexcos)[3], int totvert, float cagemat[][4]) {}&lt;br /&gt;
&lt;br /&gt;
* void PE_free_particle_edit(struct ParticleSystem *psys) {}&lt;br /&gt;
* void PE_get_colors(char sel[4], char nosel[4]) {}&lt;br /&gt;
* void PE_recalc_world_cos(struct Object *ob, struct ParticleSystem *psys) {}&lt;br /&gt;
&lt;br /&gt;
* void txt_copy_clipboard (struct Text *text){}&lt;br /&gt;
&lt;br /&gt;
* char stipple_quarttone[1];&lt;br /&gt;
&lt;br /&gt;
=== IK Solver ===&lt;br /&gt;
&lt;br /&gt;
The whole IK solver interface is in stubs. Solution: link IK into the blenderplayer, this will also fix issues with the blenderplayer not loading armatures with IK correct in some cases.&lt;br /&gt;
&lt;br /&gt;
* IK_Segment *IK_CreateSegment(int flag)&lt;br /&gt;
* void IK_FreeSegment(IK_Segment *seg)&lt;br /&gt;
&lt;br /&gt;
* void IK_SetParent(IK_Segment *seg, IK_Segment *parent)&lt;br /&gt;
* void IK_SetTransform(IK_Segment *seg, float start[3], float rest_basis[][3], float basis[][3], float length)&lt;br /&gt;
* void IK_GetBasisChange(IK_Segment *seg, float basis_change[][3])&lt;br /&gt;
* void IK_GetTranslationChange(IK_Segment *seg, float *translation_change)&lt;br /&gt;
* void IK_SetLimit(IK_Segment *seg, IK_SegmentAxis axis, float lower, float upper)&lt;br /&gt;
* void IK_SetStiffness(IK_Segment *seg, IK_SegmentAxis axis, float stiffness)&lt;br /&gt;
&lt;br /&gt;
* IK_Solver *IK_CreateSolver(IK_Segment *root)&lt;br /&gt;
* void IK_FreeSolver(IK_Solver *solver)&lt;br /&gt;
&lt;br /&gt;
* void IK_SolverAddGoal(IK_Solver *solver, IK_Segment *tip, float goal[3], float weight)&lt;br /&gt;
* void IK_SolverAddGoalOrientation(IK_Solver *solver, IK_Segment *tip, float goal[][3], float weight)&lt;br /&gt;
* void IK_SolverSetPoleVectorConstraint(IK_Solver *solver, IK_Segment *tip, float * goal[3], float polegoal[3], float poleangle, int getangle)&lt;br /&gt;
* float IK_SolverGetPoleAngle(IK_Solver *solver)&lt;br /&gt;
* int IK_Solve(IK_Solver *solver, float tolerance, int max_iterations)&lt;br /&gt;
&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
It seems much of the python api is in bad level calls. Solving this probably requires more work than this cleanup.&lt;br /&gt;
&lt;br /&gt;
* void BPY_do_pyscript(ID *id, short int event)&lt;br /&gt;
* void BPY_clear_script(Script *script)&lt;br /&gt;
* void BPY_free_compiled_text(struct Text *text)&lt;br /&gt;
* void BPY_pydriver_update(void)&lt;br /&gt;
* float BPY_pydriver_eval(struct IpoDriver *driver)&lt;br /&gt;
* int EXPP_dict_set_item_str(struct PyObject *dict, char *key, struct PyObject *value)&lt;br /&gt;
* void Node_SetStack(struct BPy_Node *self, struct bNodeStack **stack, int type){}&lt;br /&gt;
* void InitNode(struct BPy_Node *self, struct bNode *node){}&lt;br /&gt;
* void Node_SetShi(struct BPy_Node *self, struct ShadeInput *shi){}&lt;br /&gt;
* struct BPy_NodeSockets *Node_CreateSocketLists(struct bNode *node)&lt;br /&gt;
* int pytype_is_pynode(struct PyObject *pyob)&lt;br /&gt;
* struct Object **BPY_pydriver_get_objects(struct IpoDriver *driver)&lt;br /&gt;
* int BPY_button_eval(char *expr, double *value)&lt;br /&gt;
* void BPY_pyconstraint_eval(struct bPythonConstraint *con, struct bConstraintOb *cob, struct ListBase *targets)&lt;br /&gt;
* void BPY_pyconstraint_target(struct bPythonConstraint *con, struct bConstraintTarget *ct)&lt;br /&gt;
* void BPY_free_scriptlink(ScriptLink *slink)&lt;br /&gt;
* void BPY_copy_scriptlink(ScriptLink *scriptlink)&lt;br /&gt;
* void BPY_do_all_scripts (short int event)&lt;br /&gt;
* int BPY_call_importloader(char *name)&lt;br /&gt;
&lt;br /&gt;
=== Render ===&lt;br /&gt;
&lt;br /&gt;
* int     externtex(struct MTex *mtex, float *vec, float *tin, float *tr, float *tg, float *tb, float *ta) { return 0; }&lt;br /&gt;
* void texture_rgb_blend(float *in, float *tex, float *out, float fact, float facg, int blendtype) {}&lt;br /&gt;
* float texture_value_blend(float tex, float out, float fact, float facg, int blendtype, int flip) { return 0; }&lt;br /&gt;
* int multitex_ext(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres)&lt;br /&gt;
* void antialias_tagbuf(int xsize, int ysize, char *rectmove) {}&lt;br /&gt;
* void ibuf_sample(struct ImBuf *ibuf, float fx, float fy, float dx, float dy, float *result) {}&lt;br /&gt;
&lt;br /&gt;
* void RE_FreeRenderResult(struct RenderResult *rr) {}&lt;br /&gt;
* void RE_GetResultImage(struct Render *re, struct RenderResult *rr) {}&lt;br /&gt;
* struct RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty){return NULL;}&lt;br /&gt;
* struct Render *RE_GetRender(const char *name) {return (struct Render *)NULL;}&lt;br /&gt;
* struct RenderResult *RE_GetResult(Render *re) {return (struct RenderResult *)NULL;}&lt;br /&gt;
* float *RE_RenderLayerGetPass(RenderLayer *rl, int passtype) {return NULL;}&lt;br /&gt;
* float RE_filter_value(int type, float x) {return 0.0f;}&lt;br /&gt;
* struct RenderLayer *RE_GetRenderLayer(RenderResult *rr, const char *name) {return (struct RenderLayer *)NULL;}&lt;br /&gt;
* void RE_Database_Free (struct Render *re) {}&lt;br /&gt;
* void RE_FreeRender(Render *re) {}&lt;br /&gt;
* void RE_shade_external(Render *re, ShadeInput *shi, ShadeResult *shr) {}&lt;br /&gt;
* void RE_DataBase_GetView(Render *re, float mat[][4]) {}&lt;br /&gt;
* struct Render *RE_NewRender(const char *name) {return (struct Render *)NULL;}&lt;br /&gt;
* void RE_Database_Baking(struct Render *re, struct Scene *scene, int type, struct Object *actob) {};&lt;br /&gt;
* void RE_zbuf_accumulate_vecblur(struct NodeBlurData *nd, int xsize, int ysize, float *newrect, float *imgrect, float *vecbufrect, float *zbufrect) {}&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;/div&gt;</summary>
		<author><name>wiki&gt;JesterKing</name></author>
		
	</entry>
</feed>