(stuff that will eventually go into a To Do list or elsewhere)
Because of certain considerations, Vision does not follow the Cocoa convention of reference counting in most situations and thus you should expect that most of the objects that you deal with will always have a reference count of 1. When releasing Construct objects, almost all other objects having anything to do with it as well as all of it's child Constructs will also be released.
Because Vision's input abstraction model is very flexible and is made to be able to interface with multiple input devices (like multiple mice for instance) and multiple input abstractions (multiple cursors for example) it gets its input events directly from the devices and for the most part is operating system event agnostic. Thus mouse clicks and movements will still be delivered to the Vision server even if its window is not behind other windows or is not even visible at all. There are future plans to make it so that when Vision is running alongside another operating system window server as it is currently implemented, it will do better at behaving nice event-wise.
The template projects
and targets that Vision supplies for XCode have
settings that suppress errors for undefined symbols. This is
because dynamic libraries of type "bundle" cannot dynamically
link currently and thus their undefined symbol resolution can not be
fulfilled. Code dependencies are taken care of by LoadObject()
and UnLoadObject() calls in constructor/destructor functions of server
modules. Thus you will need to make sure that
of the symbols that you need to link to will be resolvable at runtime
through those mechanisms because the linker will no longer do it for
you (until a solution is
There is currently a
bug in the Objective-C runtime used in Darwin/OS X (objc4-267) which
cause a crash in certain situations of module re-loading. Apple
of the problem but as of 10.4.5 it has not yet been addressed.
For those who wish (do so at your own risk) you can compile your own
version of the Objective-C
runtime with one line changed which will fix
For objc4-267 Change line 1984 in the file objc-runtime.m from:
cls_refs_end = (struct objc_class **)(size + (uintptr_t)cls_refs); to:
cls_refs_end = (struct objc_class **)(size * sizeof(Class) + (uintptr_t)cls_refs);
DRAWREAL and DRAWVIRTUAL enums tell the Construct object what mode to draw in. DRAWREAL means that we are actually need to draw the full quality version of the object for purposes of displaying on the screen. DRAWVIRTUAL tells the object that it only needs to draw a reduced quality version for purposes of creating similar OpenGL fragments for things like picking which are crucial to Abstraction interaction.
Every once in a while
you might see compiler defines that are meant to
filter out scope from certain kinds of targets. For the most part
will not have to worry about them except for server module authors who
should filter out certain parts of their interfaces in the header files
for projects built with the window
Some of these you will probably never see in use, but are included here
VISIONMODULE - Anything that should have access to modules. Pretty much everything except for client apps built under the window server paradigm.
VISIONAPP - To be used only for compiled Vision applications.
VISIONSERVER - To be used only by the Vision server regardless of how it is packaged (application library or window server).
VISIONDAEMON - To be used only by the Vision window server.
VISIONLIBRARY - To be used only by Vision when packaged as a library.