Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 20 | pmbaty | 1 | #include "render.h" |
| 2 | #include "CORE/MATH/matrix34.h" |
||
| 3 | #include "CORE/MATH/transfrm.h" |
||
| 4 | #include "CORE/V1DB/dbsetup.h" |
||
| 5 | #include "CORE/V1DB/modrend.h" |
||
| 6 | #include "harness/hooks.h" |
||
| 7 | #include "harness/trace.h" |
||
| 8 | #include <string.h> |
||
| 9 | |||
| 10 | #define RendererModelMul(self, a1) self->dispatch->_modelMulF(self, a1); |
||
| 11 | #define RendererStatePush(self, a1) self->dispatch->_statePush(self, a1); |
||
| 12 | #define RendererStatePop(self, a1) self->dispatch->_statePop(self, a1); |
||
| 13 | |||
| 14 | // IDA: void __cdecl BrDbModelRender(br_actor *actor, br_model *model, br_material *material, void *render_data, br_uint_8 style, int on_screen, int use_custom) |
||
| 15 | void BrDbModelRender(br_actor* actor, br_model* model, br_material* material, void* render_data, br_uint_8 style, int on_screen, int use_custom) { |
||
| 16 | //br_int_32 count; // Pierre-Marie Baty -- unused variable |
||
| 17 | //br_token_value tv[5]; // Pierre-Marie Baty -- unused variable |
||
| 18 | LOG_TRACE("(%p, %p, %p, %p, %d, %d, %d)", actor, model, material, render_data, style, on_screen, use_custom); |
||
| 19 | |||
| 20 | v1db.model_to_screen_valid = 0; |
||
| 21 | if (use_custom && (model->flags & BR_MODF_CUSTOM)) { |
||
| 22 | model->custom(actor, model, material, render_data, style, on_screen); |
||
| 23 | return; |
||
| 24 | } |
||
| 25 | |||
| 26 | if (model->prepared == NULL && model->stored == NULL) { |
||
| 27 | // TELL_ME_IF_WE_PASS_THIS_WAY(); |
||
| 28 | // TODO: gShadow_model is not created yet. Will trip into this |
||
| 29 | // LOG_WARN("Tried to render un-prepared model %s", model->identifier ? model->identifier : "<NULL>"); |
||
| 30 | } |
||
| 31 | |||
| 32 | RenderStyleCalls[style](actor, model, material, render_data, style, on_screen); |
||
| 33 | } |
||
| 34 | |||
| 35 | // IDA: br_uint_32 __cdecl BrOnScreenCheck(br_bounds3 *bounds) |
||
| 36 | br_uint_32 BrOnScreenCheck(br_bounds3* bounds) { |
||
| 37 | br_token r; |
||
| 38 | LOG_TRACE("(%p)", bounds); |
||
| 39 | |||
| 40 | STUB_ONCE(); // Add call to STUB_ONCE to mark this function as not implemented. |
||
| 41 | return 1; |
||
| 42 | |||
| 43 | // FIXME: use this once the clouse clear up. |
||
| 44 | v1db.renderer->dispatch->_boundsTestF(v1db.renderer, &r, (br_bounds3_f*)bounds); |
||
| 45 | return r; |
||
| 46 | } |
||
| 47 | |||
| 48 | // IDA: br_uint_16 __usercall prependActorTransform@<AX>(br_actor *ap@<EAX>, br_uint_16 t@<EDX>) |
||
| 49 | br_uint_16 prependActorTransform(br_actor* ap, br_uint_16 t) { |
||
| 50 | br_matrix34 mt; |
||
| 51 | LOG_TRACE("(%p, %d)", ap, t); |
||
| 52 | |||
| 53 | if (BrTransformTypeIsMatrix34(ap->t.type)) { |
||
| 54 | RendererModelMul(v1db.renderer, (void*)&ap->t.t.mat); |
||
| 55 | } else { |
||
| 56 | BrTransformToMatrix34(&mt, &ap->t); |
||
| 57 | RendererModelMul(v1db.renderer, (void*)&mt); |
||
| 58 | } |
||
| 59 | t = BrTransformCombineTypes(t, ap->t.type); |
||
| 60 | |||
| 61 | // RendererPartSet(v1db.renderer, BRT_MATRIX, 0, |
||
| 62 | // BRT_MODEL_TO_VIEW_HINT_T, BrTransformTypeIsLP(t) ? BRT_LENGTH_PRESERVING : BRT_NONE); |
||
| 63 | |||
| 64 | return t; |
||
| 65 | } |
||
| 66 | |||
| 67 | // IDA: br_uint_16 __usercall prependMatrix@<AX>(br_matrix34 *mat@<EAX>, br_uint_16 mat_t@<EDX>, br_uint_16 t@<EBX>) |
||
| 68 | br_uint_16 prependMatrix(br_matrix34* mat, br_uint_16 mat_t, br_uint_16 t) { |
||
| 69 | //br_matrix34 mt; // Pierre-Marie Baty -- unused variable |
||
| 70 | LOG_TRACE("(%p, %d, %d)", mat, mat_t, t); |
||
| 71 | |||
| 72 | RendererModelMul(v1db.renderer, (void*)mat); |
||
| 73 | |||
| 74 | t = BrTransformCombineTypes(t, mat_t); |
||
| 75 | |||
| 76 | return t; |
||
| 77 | } |
||
| 78 | |||
| 79 | // IDA: void __usercall actorRender(br_actor *ap@<EAX>, br_model *model@<EDX>, br_material *material@<EBX>, void *render_data@<ECX>, br_uint_8 style, br_uint_16 t) |
||
| 80 | void actorRender(br_actor* ap, br_model* model, br_material* material, void* render_data, br_uint_8 style, br_uint_16 t) { |
||
| 81 | br_material* this_material; |
||
| 82 | br_model* this_model; |
||
| 83 | void* this_render_data; |
||
| 84 | br_actor* a; |
||
| 85 | br_token s; |
||
| 86 | LOG_TRACE("(%p, %p, %p, %p, %d, %d)", ap, model, material, render_data, style, t); |
||
| 87 | |||
| 88 | if (ap->children == NULL && ap->type != BR_ACTOR_MODEL) |
||
| 89 | return; |
||
| 90 | |||
| 91 | if (ap->render_style != BR_RSTYLE_DEFAULT) |
||
| 92 | style = ap->render_style; |
||
| 93 | |||
| 94 | if (style == BR_RSTYLE_NONE) |
||
| 95 | return; |
||
| 96 | |||
| 97 | this_material = ap->material ? ap->material : material; |
||
| 98 | this_model = ap->model ? ap->model : model; |
||
| 99 | this_render_data = ap->render_data ? ap->render_data : render_data; |
||
| 100 | |||
| 101 | if (ap->t.type == BR_TRANSFORM_IDENTITY) { |
||
| 102 | |||
| 103 | switch (ap->type) { |
||
| 104 | |||
| 105 | case BR_ACTOR_MODEL: |
||
| 106 | |||
| 107 | if ((s = BrOnScreenCheck(&this_model->bounds)) != BRT_REJECT) { |
||
| 108 | BrDbModelRender(ap, this_model, this_material, this_render_data, style, s, 1); |
||
| 109 | } |
||
| 110 | break; |
||
| 111 | |||
| 112 | case BR_ACTOR_BOUNDS: |
||
| 113 | |||
| 114 | if (BrOnScreenCheck(ap->type_data) == BRT_REJECT) |
||
| 115 | return; |
||
| 116 | break; |
||
| 117 | |||
| 118 | case BR_ACTOR_BOUNDS_CORRECT: |
||
| 119 | switch (BrOnScreenCheck(ap->type_data)) { |
||
| 120 | case BRT_ACCEPT: |
||
| 121 | BR_FOR_SIMPLELIST(&ap->children, a) |
||
| 122 | actorRenderOnScreen(a, this_model, this_material, this_render_data, style, t); |
||
| 123 | return; |
||
| 124 | case BRT_REJECT: |
||
| 125 | return; |
||
| 126 | } |
||
| 127 | } |
||
| 128 | |||
| 129 | BR_FOR_SIMPLELIST(&ap->children, a) |
||
| 130 | actorRender(a, this_model, this_material, this_render_data, style, t); |
||
| 131 | return; |
||
| 132 | } |
||
| 133 | |||
| 134 | RendererStatePush(v1db.renderer, BR_STATE_MATRIX); |
||
| 135 | |||
| 136 | t = prependActorTransform(ap, t); |
||
| 137 | |||
| 138 | switch (ap->type) { |
||
| 139 | |||
| 140 | case BR_ACTOR_MODEL: |
||
| 141 | if ((s = BrOnScreenCheck(&this_model->bounds)) != BRT_REJECT) { |
||
| 142 | BrDbModelRender(ap, this_model, this_material, this_render_data, style, s, 1); |
||
| 143 | } |
||
| 144 | break; |
||
| 145 | |||
| 146 | case BR_ACTOR_BOUNDS: |
||
| 147 | if (BrOnScreenCheck(ap->type_data) == BRT_REJECT) { |
||
| 148 | RendererStatePop(v1db.renderer, BR_STATE_MATRIX); |
||
| 149 | return; |
||
| 150 | } |
||
| 151 | break; |
||
| 152 | |||
| 153 | case BR_ACTOR_BOUNDS_CORRECT: |
||
| 154 | switch (BrOnScreenCheck(ap->type_data)) { |
||
| 155 | case BRT_ACCEPT: |
||
| 156 | BR_FOR_SIMPLELIST(&ap->children, a) |
||
| 157 | actorRenderOnScreen(a, this_model, this_material, this_render_data, style, t); |
||
| 158 | return; |
||
| 159 | case BRT_REJECT: |
||
| 160 | RendererStatePop(v1db.renderer, BR_STATE_MATRIX); |
||
| 161 | return; |
||
| 162 | } |
||
| 163 | } |
||
| 164 | |||
| 165 | BR_FOR_SIMPLELIST(&ap->children, a) |
||
| 166 | actorRender(a, this_model, this_material, this_render_data, style, t); |
||
| 167 | RendererStatePop(v1db.renderer, BR_STATE_MATRIX); |
||
| 168 | } |
||
| 169 | |||
| 170 | // IDA: void __usercall actorRenderOnScreen(br_actor *ap@<EAX>, br_model *model@<EDX>, br_material *material@<EBX>, void *render_data@<ECX>, br_uint_8 style, br_uint_16 t) |
||
| 171 | void actorRenderOnScreen(br_actor* ap, br_model* model, br_material* material, void* render_data, br_uint_8 style, br_uint_16 t) { |
||
| 172 | //br_material* this_material; // Pierre-Marie Baty -- unused variable |
||
| 173 | //br_model* this_model; // Pierre-Marie Baty -- unused variable |
||
| 174 | //void* this_render_data; // Pierre-Marie Baty -- unused variable |
||
| 175 | //br_actor* a; // Pierre-Marie Baty -- unused variable |
||
| 176 | LOG_TRACE("(%p, %p, %p, %p, %d, %d)", ap, model, material, render_data, style, t); |
||
| 177 | NOT_IMPLEMENTED(); |
||
| 178 | } |
||
| 179 | |||
| 180 | // IDA: void __usercall sceneRenderWorld(br_actor *world@<EAX>) |
||
| 181 | void sceneRenderWorld(br_actor* world) { |
||
| 182 | //br_model* model; // Pierre-Marie Baty -- unused variable |
||
| 183 | //br_material* material; // Pierre-Marie Baty -- unused variable |
||
| 184 | //void* render_data; // Pierre-Marie Baty -- unused variable |
||
| 185 | //br_uint_8 style; // Pierre-Marie Baty -- unused variable |
||
| 186 | //br_actor* a; // Pierre-Marie Baty -- unused variable |
||
| 187 | LOG_TRACE("(%p)", world); |
||
| 188 | NOT_IMPLEMENTED(); |
||
| 189 | } |
||
| 190 | |||
| 191 | // IDA: void __usercall sceneRenderAdd(br_actor *tree@<EAX>) |
||
| 192 | void sceneRenderAdd(br_actor* tree) { |
||
| 193 | br_material* material; |
||
| 194 | br_model* model; |
||
| 195 | void* render_data; |
||
| 196 | br_uint_8 style; |
||
| 197 | br_actor* a; |
||
| 198 | br_int_32 t; |
||
| 199 | br_matrix34 m; |
||
| 200 | LOG_TRACE("(%p)", tree); |
||
| 201 | |||
| 202 | material = NULL; |
||
| 203 | model = NULL; |
||
| 204 | render_data = NULL; |
||
| 205 | style = BR_RSTYLE_DEFAULT; |
||
| 206 | |||
| 207 | if (tree->parent == NULL) { |
||
| 208 | actorRender(tree, |
||
| 209 | v1db.default_model, |
||
| 210 | v1db.default_material, |
||
| 211 | v1db.default_render_data, BR_RSTYLE_DEFAULT, |
||
| 212 | (br_uint_16)v1db.ttype); |
||
| 213 | return; |
||
| 214 | } |
||
| 215 | |||
| 216 | t = BR_TRANSFORM_IDENTITY; |
||
| 217 | BrMatrix34Identity(&m); |
||
| 218 | |||
| 219 | for (a = tree->parent; a; a = a->parent) { |
||
| 220 | if (material == NULL && a->material) |
||
| 221 | material = a->material; |
||
| 222 | |||
| 223 | if (model == NULL && a->model) |
||
| 224 | model = a->model; |
||
| 225 | |||
| 226 | if (render_data == NULL && a->render_data) |
||
| 227 | render_data = a->render_data; |
||
| 228 | if (a->render_style != BR_RSTYLE_DEFAULT) |
||
| 229 | style = a->render_style; |
||
| 230 | |||
| 231 | if (a == v1db.render_root) |
||
| 232 | break; |
||
| 233 | |||
| 234 | if (a->t.type != BR_TRANSFORM_IDENTITY) { |
||
| 235 | BrMatrix34PostTransform(&m, &a->t); |
||
| 236 | t = BrTransformCombineTypes(t, a->t.type); |
||
| 237 | } |
||
| 238 | } |
||
| 239 | |||
| 240 | if (material == NULL) |
||
| 241 | material = v1db.default_material; |
||
| 242 | |||
| 243 | if (model == NULL) |
||
| 244 | model = v1db.default_model; |
||
| 245 | |||
| 246 | if (render_data == NULL) |
||
| 247 | render_data = v1db.default_render_data; |
||
| 248 | |||
| 249 | if (t == BR_TRANSFORM_IDENTITY) { |
||
| 250 | actorRender(tree, model, material, render_data, style, (br_uint_16)v1db.ttype); |
||
| 251 | } else { |
||
| 252 | RendererStatePush(v1db.renderer, BR_STATE_MATRIX); |
||
| 253 | t = prependMatrix(&m, (unsigned short)t, (unsigned short)v1db.ttype); |
||
| 254 | actorRender(tree, model, material, render_data, style, (br_uint_16)t); |
||
| 255 | RendererStatePop(v1db.renderer, BR_STATE_MATRIX); |
||
| 256 | } |
||
| 257 | } |
||
| 258 | |||
| 259 | // IDA: void __cdecl BrDbSceneRenderBegin(br_actor *world, br_actor *camera) |
||
| 260 | void BrDbSceneRenderBegin(br_actor* world, br_actor* camera) { |
||
| 261 | br_matrix34 tfm; |
||
| 262 | //br_matrix4 vtos; // Pierre-Marie Baty -- unused variable |
||
| 263 | br_actor* a; |
||
| 264 | int i; |
||
| 265 | //br_token vtos_type; // Pierre-Marie Baty -- unused variable |
||
| 266 | //br_uint_32 dummy; // Pierre-Marie Baty -- unused variable |
||
| 267 | LOG_TRACE("(%p, %p)", world, camera); |
||
| 268 | |||
| 269 | // this is not complete |
||
| 270 | STUB_ONCE(); |
||
| 271 | |||
| 272 | /* |
||
| 273 | * Collect transforms from camera to root |
||
| 274 | * |
||
| 275 | * Make a stack of cumulative transforms for each level between |
||
| 276 | * the camera and the root - this is so that model->view |
||
| 277 | * transforms can use the shortest route, rather than via the root |
||
| 278 | */ |
||
| 279 | for (i = 0; i < BR_ASIZE(v1db.camera_path); i++) { |
||
| 280 | v1db.camera_path[i].a = NULL; |
||
| 281 | } |
||
| 282 | |||
| 283 | i = camera->depth; |
||
| 284 | a = camera; |
||
| 285 | BrMatrix34Identity(&v1db.camera_path[i].m); |
||
| 286 | v1db.camera_path[i].transform_type = BR_TRANSFORM_IDENTITY; |
||
| 287 | |||
| 288 | for (; (i > 0) && (a != world); a = a->parent, i--) { |
||
| 289 | BrTransformToMatrix34(&tfm, &a->t); |
||
| 290 | BrMatrix34Mul(&v1db.camera_path[i - 1].m, &v1db.camera_path[i].m, &tfm); |
||
| 291 | |||
| 292 | v1db.camera_path[i - 1].transform_type = BrTransformCombineTypes(v1db.camera_path[i].transform_type, a->t.type); |
||
| 293 | |||
| 294 | v1db.camera_path[i].a = a; |
||
| 295 | } |
||
| 296 | |||
| 297 | if (world != a) { |
||
| 298 | // BrFailure("camera is not in world hierachy"); |
||
| 299 | } |
||
| 300 | } |
||
| 301 | |||
| 302 | // IDA: br_renderbounds_cbfn* __cdecl BrDbSetRenderBoundsCallback(br_renderbounds_cbfn *new_cbfn) |
||
| 303 | br_renderbounds_cbfn* BrDbSetRenderBoundsCallback(br_renderbounds_cbfn* new_cbfn) { |
||
| 304 | //br_renderbounds_cbfn* old_cbfn; // Pierre-Marie Baty -- unused variable |
||
| 305 | LOG_TRACE("(%p)", new_cbfn); |
||
| 306 | NOT_IMPLEMENTED(); |
||
| 307 | } |
||
| 308 | |||
| 309 | // IDA: void __usercall SetOrigin(br_pixelmap *buffer@<EAX>) |
||
| 310 | void SetOrigin(br_pixelmap* buffer) { |
||
| 311 | LOG_TRACE("(%p)", buffer); |
||
| 312 | NOT_IMPLEMENTED(); |
||
| 313 | } |
||
| 314 | |||
| 315 | // IDA: void __usercall SetViewport(br_pixelmap *buffer@<EAX>) |
||
| 316 | void SetViewport(br_pixelmap* buffer) { |
||
| 317 | LOG_TRACE("(%p)", buffer); |
||
| 318 | NOT_IMPLEMENTED(); |
||
| 319 | } |
||
| 320 | |||
| 321 | // IDA: void __cdecl BrZbSceneRenderBegin(br_actor *world, br_actor *camera, br_pixelmap *colour_buffer, br_pixelmap *depth_buffer) |
||
| 322 | void BrZbSceneRenderBegin(br_actor* world, br_actor* camera, br_pixelmap* colour_buffer, br_pixelmap* depth_buffer) { |
||
| 323 | // LOG_TRACE("(%p, %p, %p, %p)", world, camera, colour_buffer, depth_buffer); |
||
| 324 | |||
| 325 | BrDbSceneRenderBegin(world, camera); |
||
| 326 | gHarness_platform.Renderer_BeginScene(camera, colour_buffer, depth_buffer); |
||
| 327 | } |
||
| 328 | |||
| 329 | // IDA: void __cdecl BrZbSceneRenderAdd(br_actor *tree) |
||
| 330 | void BrZbSceneRenderAdd(br_actor* tree) { |
||
| 331 | // LOG_TRACE("(%p)", tree); |
||
| 332 | sceneRenderAdd(tree); |
||
| 333 | } |
||
| 334 | |||
| 335 | // IDA: void __cdecl BrZbSceneRenderEnd() |
||
| 336 | void BrZbSceneRenderEnd(void) { |
||
| 337 | // LOG_TRACE("()"); |
||
| 338 | |||
| 339 | gHarness_platform.Renderer_FlushBuffers(); |
||
| 340 | gHarness_platform.Renderer_EndScene(); |
||
| 341 | } |
||
| 342 | |||
| 343 | // IDA: void __cdecl BrZbSceneRender(br_actor *world, br_actor *camera, br_pixelmap *colour_buffer, br_pixelmap *depth_buffer) |
||
| 344 | void BrZbSceneRender(br_actor* world, br_actor* camera, br_pixelmap* colour_buffer, br_pixelmap* depth_buffer) { |
||
| 345 | //br_actor* a; // Pierre-Marie Baty -- unused variable |
||
| 346 | LOG_TRACE("(%p, %p, %p, %p)", world, camera, colour_buffer, depth_buffer); |
||
| 347 | NOT_IMPLEMENTED(); |
||
| 348 | } |
||
| 349 | |||
| 350 | // IDA: void __cdecl BrZsSceneRenderBegin(br_actor *world, br_actor *camera, br_pixelmap *colour_buffer) |
||
| 351 | void BrZsSceneRenderBegin(br_actor* world, br_actor* camera, br_pixelmap* colour_buffer) { |
||
| 352 | //br_camera* camera_data; // Pierre-Marie Baty -- unused variable |
||
| 353 | LOG_TRACE("(%p, %p, %p)", world, camera, colour_buffer); |
||
| 354 | NOT_IMPLEMENTED(); |
||
| 355 | } |
||
| 356 | |||
| 357 | // IDA: void __cdecl BrZsSceneRenderAdd(br_actor *tree) |
||
| 358 | void BrZsSceneRenderAdd(br_actor* tree) { |
||
| 359 | LOG_TRACE("(%p)", tree); |
||
| 360 | NOT_IMPLEMENTED(); |
||
| 361 | } |
||
| 362 | |||
| 363 | // IDA: void __cdecl BrZsSceneRenderEnd() |
||
| 364 | void BrZsSceneRenderEnd(void) { |
||
| 365 | LOG_TRACE("()"); |
||
| 366 | NOT_IMPLEMENTED(); |
||
| 367 | } |
||
| 368 | |||
| 369 | // IDA: void __cdecl BrZsSceneRender(br_actor *world, br_actor *camera, br_pixelmap *colour_buffer) |
||
| 370 | void BrZsSceneRender(br_actor* world, br_actor* camera, br_pixelmap* colour_buffer) { |
||
| 371 | //br_actor* a; // Pierre-Marie Baty -- unused variable |
||
| 372 | LOG_TRACE("(%p, %p, %p)", world, camera, colour_buffer); |
||
| 373 | NOT_IMPLEMENTED(); |
||
| 374 | } |
||
| 375 | |||
| 376 | // IDA: br_primitive_cbfn* __cdecl BrZsPrimitiveCallbackSet(br_primitive_cbfn *new_cbfn) |
||
| 377 | br_primitive_cbfn* BrZsPrimitiveCallbackSet(br_primitive_cbfn* new_cbfn) { |
||
| 378 | //br_primitive_cbfn* old_cbfn; // Pierre-Marie Baty -- unused variable |
||
| 379 | LOG_TRACE("(%p)", new_cbfn); |
||
| 380 | NOT_IMPLEMENTED(); |
||
| 381 | } |
||
| 382 | |||
| 383 | // IDA: void __cdecl BrZbModelRender(br_actor *actor, br_model *model, br_material *material, br_uint_8 style, int on_screen, int use_custom) |
||
| 384 | void BrZbModelRender(br_actor* actor, br_model* model, br_material* material, br_uint_8 style, int on_screen, int use_custom) { |
||
| 385 | LOG_TRACE("(%p, %p, %p, %d, %d, %d)", actor, model, material, style, on_screen, use_custom); |
||
| 386 | |||
| 387 | BrDbModelRender(actor, model, material, 0, style, on_screen, use_custom); |
||
| 388 | } |
||
| 389 | |||
| 390 | // IDA: void __cdecl BrZsModelRender(br_actor *actor, br_model *model, br_material *material, br_order_table *order_table, br_uint_8 style, int on_screen, int use_custom) |
||
| 391 | void BrZsModelRender(br_actor* actor, br_model* model, br_material* material, br_order_table* order_table, br_uint_8 style, int on_screen, int use_custom) { |
||
| 392 | LOG_TRACE("(%p, %p, %p, %p, %d, %d, %d)", actor, model, material, order_table, style, on_screen, use_custom); |
||
| 393 | NOT_IMPLEMENTED(); |
||
| 394 | } |
||
| 395 | |||
| 396 | // IDA: br_renderbounds_cbfn* __cdecl BrZbRenderBoundsCallbackSet(br_renderbounds_cbfn *new_cbfn) |
||
| 397 | br_renderbounds_cbfn* BrZbRenderBoundsCallbackSet(br_renderbounds_cbfn* new_cbfn) { |
||
| 398 | LOG_TRACE("(%p)", new_cbfn); |
||
| 399 | NOT_IMPLEMENTED(); |
||
| 400 | } |
||
| 401 | |||
| 402 | // IDA: br_renderbounds_cbfn* __cdecl BrZsRenderBoundsCallbackSet(br_renderbounds_cbfn *new_cbfn) |
||
| 403 | br_renderbounds_cbfn* BrZsRenderBoundsCallbackSet(br_renderbounds_cbfn* new_cbfn) { |
||
| 404 | LOG_TRACE("(%p)", new_cbfn); |
||
| 405 | NOT_IMPLEMENTED(); |
||
| 406 | } |