freenode/#shirakumo - IRC Chatlog
Search
9:22:40
gingerale
Hmm.. Well this is a bother. This doesn't seem to work, (defcenum bar ... :bar-count) (defstruct foo (offset :uint16 :count (foreign-enum-value 'bar-format :bar-count)))
9:24:55
Colleen
https://github.com/bkaradzi... Website (HTML), Title: bgfx/bgfx.h at master · bkaradzic/bgfx · GitHub
9:26:25
Shinmera
You can pack the enum definition in an (eval-when (:load-toplevel :compile-toplevel :execute) ..) and then use #.(foreign-enum-value ...)
9:28:01
Shinmera
alternatively, and stylistically nicer, you could just use a defconstant for that count enum thing.
11:21:56
Shinmera
In the flowchart library you have nodes that represent the basic building blocks. Each node can have several ports, over which it can be connected to other nodes.
11:22:34
Shinmera
Now, what ports a node has and what kind of attributes a port has seems to very clearly be part of a definition, meaning the ports would be defined along with the class definition.
11:22:46
Shinmera
However, the port's value (the connections it has) very clearly are an instance thing.
11:23:10
Shinmera
This together lead me to the idea of modelling ports as slots of a particular class.
11:23:48
Shinmera
More concretely put, you'd do something like (defclass condition () ((in :port-type n-port) (true :port-type 1-port) (false :port-type 1-port))
11:24:21
Shinmera
Meaning you define a "condition" node with an "in" port that allows arbitrarily many connections, and "true" and "false" ports which each can have only one.
11:25:10
Shinmera
I'd like to be able to do something like (connect (port node 'foo) (port other-node 'bar)) or pass around nodes and look at them on their own
11:25:27
Shinmera
However, in order to be able to do that, the port would have to have knowledge of the particular instance it's "coming from".
11:25:46
Shinmera
Slots on the other hand are very clearly tied to the class, so I can't use them for that.
11:26:41
Shinmera
1. Require most port access functions to also include the node instance the port is in relation to
11:27:33
Shinmera
2. Materialise the ports as shim instances upon instante initialisation, meaning you have a separate "port" class entirely that gets automatically instantiated when a node class is instantiated.
11:28:20
Shinmera
Now, 1. is not really appealing because it means you need to keep track of two objects a lot of times and need to call with seemingly irrelevant information too
11:29:19
Shinmera
2. is not really appealing either because you either make the "port" a shim and have the actual values still exist as a slot and thus duplicate information, or you make the port instance keep the value as well, getting rid of the slots again, creating an entirely separate, but mostly analogous, slots system entirely
11:47:32
Shinmera
What if I keep the slots, but the slots are populated with the port instances, which then hold the value.
11:52:12
mood_btf
Yup, version 3 seems most sensible. Though I don't really understand what you were thinking with #2, since you'll always need to store the port instances somewhere
11:58:29
Shinmera
Hrm, making this all work with class redefinition and reinitialisation is going to be a bit tricky
11:58:57
Shinmera
since you probably want the ports in the slots retain their identity, but change class in accordance with the slot definition's requirements.
12:05:23
Shinmera
"Any slots indicated by slot-names that are still unbound at this point are initialized according to their :initform forms. For any such slot that has an :initform form, that form is evaluated in the lexical environment of its defining defclass form and the result is stored into the slot."
12:05:39
Shinmera
How in the world are you supposed to be able to do that if you're not the implementation?
12:10:28
Shinmera
I mean, I guess you could capture the environment by wrapping the defclass and then use it, but I don't know if doing that is even allowed
12:23:22
gingerale
Is there a preferred syntax for constants made with defconstant? Like how defvar often has *asterisks*
12:24:30
mood_btf
I use +plus+ for things that should be treated as constant, but I normally use defparameter to actually define them
12:24:35
gingerale
I see no other way for defining a CL side of #define BGFX_PCI_ID_NONE UINT16_C(0x0000) //!< Autoselect adapter.
12:25:27
gingerale
But how would someone using this binding know what variable to pass the bgfx_init?
12:26:34
gingerale
The default value of bgfx_init is BGFX_PCI_ID_NONE on C++ API. And I want to make the lisp side bgfx-init function to reflect this.
12:28:23
mood_btf
Shinmera: As for that "...evaluated in the lexical environment...", I think DEFCLASS could do it without implementation-specifics by just wrapping the form in a lambda. couldn't it? Though I'm not sure what kind of access the MOP offers to the initform
12:30:54
Shinmera
There's also slot-definition-initfunction, but the mop is weird on its definition:
12:31:00
Shinmera
"Returns the initialization function of slot. This value is either a function of no arguments, or nil, indicating that the slot has no initialization function. This is the defaulted value of the :initfunction initialization argument that was associated with the slot definition metaobject during initialization."
12:31:19
Shinmera
"Returns the initialization form of slot. This can be any form. This is the defaulted value of the :initform initialization argument that was associated with the slot definition metaobject during initialization. When slot has no initialization form, the value returned is unspecified (however, slot-definition-initfunction is guaranteed to return nil)."
12:31:37
Shinmera
which seems to imply that slot-definition-initfunction does have something to do with initform, contrary to how I parse the initfunction's own definition
13:05:00
Shinmera
the way this is currently done now with port instances sitting in the class slots, which then have a connections' slot
13:05:24
Shinmera
when you use an accessor or slot-value on the node you get the port back rather than the connections inside the port
13:06:35
Shinmera
But that would have to distinguish whether I want the port or the port's connections.
14:31:25
gingerale
Alright, looks like the issue was with the renderer type. If I switch from opengl to noop it works fine.