慢慢制作中。。。
简化挂件类型带来的问题是没有办法指定默认 Flag。
可能需要包装成 type{_type, flag} 形式。
enum挂件简化好了,接下来是字符串简化以及各个挂件的边框等。
界面脚本看上去不能用lua,但是解析起来必须非常简单:
// 预定义
[c] <c>
[base] <b|e|p|pe|.extra>
//具体写
require <b,e> //创建时要求提供base/uie
- c 0.5 cl cr<(20)>;
i [c] [base|apple<.extra>]>path.what <(text: whatever string; flags: maybe|something; ...)> as [apple];
cond either(eq([stuff]>path.what, 123), not(something));
else;
endcond;
之后的骨骼和什么的动画参考这个↗做。
la_resources.c
为多个文件以方便修改。ui和从数据接口获得基本数值的应总是假定为阵列(对于int/float/bool/enum)。
udf区分了阵列和单值,后面再来改。
考虑了节点细节,暂定这样实现:
主要的指导思想是:界面在使用时不需要将逻辑连接方式完全呈现在界面上,例如仪表台总是在背面接线。
暂定挂件模版的处理方式:
SubProp
,因此模版也可以嵌套小模版。ui->PP
只需一个提供给复合挂件,因为希望复合挂件自包含,若挂件需要其他可变配置则通过 UiE
记录呈现(针对独立界面元素的显示等)。节点和全局时间线可能需要删除,以实现一个统一的驱动系统。节点通过面板选择栏目并以 SubProp
的方式即可显示,连线呈现为 VCV RACK 的类似覆盖样式。被驱动属性的挂件不显示连线,连线的节点是驱动系统节点需要显示的。
这样基本能保证修改最少而且保存了灵活度。
好的新主题系统算是可以了。去掉了驱动和帧显示,这块要在精简挂件类型后重新设计状态。
主题的精简原则上只保留少数几个主要颜色。若需要样式丰富的挂件则面板应有抗锯齿否则几何符号和圆角画起来困难(一些几何符号可以用unicode符号字代替)。应重新考虑主要挂件的样式。
颜色选择框半边要有透明度。
应精简数值挂件类型,去掉单数值挂件,使用长度为一的阵列作为单数值,数据后台是否能做类似修改尚不清楚,因为二者文件写法似乎不一样。原则上可以直接删掉单数值的接口,同时把现有单数值的接口都改了(可能现有的还很多)。
需要的布局和可指定在通用挂件上的特征:
可能可以在面板、列表和挂件上添加一个一般标志量来解决这个问题。
替换为直接使用Unicode符号图标,基本可以正常工作。
原则上还需要再考虑是否要求显示字符直接以宽字符提供,但是目前来看 ExtraInstructions
的解析尚未遇到中断,所以暂时先这样。
图标和emoji基本上能解决了,需要分类生成个字符头文件表才好找,可能不需要子类型,但是至少需要block。
另需要3个noto符号字体才能涵盖所需区域。
还需要:
ExtraInstructions
。之后通过这个来指定挂件外观自定义参数。节点也可以了,虽然暂时不知道有什么用……
鼠标事件和操作等等正常了。
还有些没对的:
总得来说要把整个布局系统精简并且要求有横排和撑尺寸的能力。现在这个太丑了。
之前有个老的截图
又全部改回了多字节字符串,改用自己的unicode/utf8转换。
从属性验证的结果看,要求Hyper2下不能链接Hyper2也不太实际。可能要求存取时仅支持从首级Hyper2实例开始,但这仍然不能解决部分结构改变后重新读取时产生可能冲突的问题。这么来看,Hyper2似乎总是只能是资源并且在任何情况下都不能嵌套。
资源式的UDF索引表基本上可以了,也可以排除重复的。
需要为PropContainer指定删除回调,但是加载时应优先覆盖带有同样id的。非id式的应删掉。
基本上明确了DBInst和撤销的行为:
UDF读写单个实例的功能 指针匹配有问题。 开头的问题是memHead::nuid
的旧写法导致了一些问题,但是还没有完全解决。 还是,已经解决了。
DBInst
的运行方式对于目前计划的方案可能过于复杂且需要修改。UDFNoCreate
对象),需要探讨行为(追加时改名/修改已有/追加已有子集?)。读取主题以及UID型引用、资源型引用匹配正确。
全自动撤销也有些具体的问题:
DataBlockNoLongerExists
以清除引用,此时应手动推进去相关的状态,之后的新加入的状态不存在对这个玩意的引用,因此这个状态删掉的话,也不需要考虑再次清除潜在引用的事情。这些都基于地址而不是uid因为是运行时。udf储存行为?
暂时要求的udf行为:
.manifest.udf
可以了解可访问到的所有资源。manifest selector
挂件以从列表中选择文件来加载并设为激活。这里还有个问题是资源性引用的行为尚不明确。目前的UID方法不能直接适应部分共享块,例如另一个用户创建的飞行器模型引用了双方共有的翼型。
将uid改为可自定的id可能是可行的,即使这样还是需要想好仅读取部分文件时的行为(因为要是全部读取那总是能够匹配的)
想了半天还是去掉数据块作者信息记录,只保留UID和时间。作者可以记录成一个非引用的短字符串,这样就兼容UDF读写的特性。检查了UID列表和数据记录的seek关系似乎没有问题,因此这样一来似乎不需要专门重写一个memfile,在现有的基础上优化即可。
HyperData->Linked
可能应改为指向链接进来的UDF这样理论上可以协同修改和选择性保存。UDF的根实例列表应该可以用来做这个事情。
单列表多类正确了(由于GetPropPath的限制,只允许通过模版访问多类)。
需要:
GetActiveInstanceStrict
的适用性,可能需要用另外的方式指定 sub prop应当将Users放到memhead里面,这样节点本身就不需要那么复杂。
带hyper,不带,和假吧意思的分配要分开。
基本上好了但是类似全局变量这些的用户引用不适用于现在这个方法,这种只有特殊放到container里面去(正常工作了)
接下来需要做单列表多类,然后是新状况下的读写以及指针匹配。
界面现在可以调了,自动适应菜单面板的尺寸。
面板标题长度没刷新
新的精简的贴图系统基本上可以了,偶尔有绑定贴图状态未刷新的情况,需要检查。 是绑定目标不匹配的问题。
需要:
改成3.3以上的。。。好像的确需要一个VAO
更加优化的主题、顶栏、面板分离属性
面板分离属性在改成 UsePropPack
之后好像出问题了……
gamma 好像还是没搞对但是先将就咯
界面功能上主要就还差多行文字和行式布局(用begin/end方式,不嵌套新行)。行做了。
这两个完成后再来做多列以及面板可选实例。
之前看过的一个带有有趣的可旋转控件的那个玩意是 AntTweakBar↗ :D
啊 基本上这个阶段的修改的差不多了。
感觉仅限于单个 layout
的浮动面板没什么用,应当删掉。删了
为保证多类型节点显示简洁可行,需要有gettype
和getui
两种回调共同工作。(这使得文件读写在这块需要进一步修改)
依靠节点实现的各种,属于程序内部自身的行为,就不使用数据接口来完成了。
需要:
laSafeString
做成不限长度动态分配的。memAcquire
做成按尺寸和分配数量自动增加池总数的。getlength
。gettemplate
。还有个多列怎么做的问题,除了行方向排列,还有个问题就是如何方便地上下左右移动。拖动似乎很不好处理。 另外似乎这种分布式列表不是很好布置一个全局的横线分隔。
(至于每列内部可以添加专门的高度分隔挂件,操纵起来稍微麻烦但是写起来简单,视觉上可以理解为填充未使用主板插槽的空白铝片。)
此外,“数据源选择框”可能可以隐藏,即只显示集合实例对象,数据源可能可以通过初始挂件选择,之后通过上下文菜单(和/或一个很小的浮动按钮)可以切换。
这样一来通过属性树的自定义界面基本就可以不通过任何控件编辑器实现了。
目前还有的问题就是多面板实例选择查看。可能到最后仍然需要一个实例选择挂件放在最前面,但似乎没有发现这种设计有明显的用途。若仍然以飞行模拟器仪表的多切换为使用场景(即可以选择查看哪一个数据源),需要在不同面板同时显示同类不同数据源信息的情况仍然很少。
之前的分析认为,控件动态布局似乎应由应用程序实现为rack并以集合的形式显示,但显然目前的集合控件不允许类型混排,这使得节点挂架本身的实现也变得复杂这时此前没有注意到的。提供一个实例类型回调似乎可以简化这种状况(此时列表中不同类型的实例可以调用不同类的模版或者挂件),这时不同面板可以在一开始选择目标实例动态显示控件组。
这个“选择数据源”操作在界面上,但好像也一直需要。目前已有的实现还需要检查集合属性的刷新事件,其在何种情况下标记只重绘或者重计算尚没分清楚。
如果要实现多类型集合属性,则又有如何指定挂件类型的新问题。
理论的最小修改:父挂件提供一个上下文编号,集合属性提供一个获得实例模版的回调,带有上下文编号参数。这样允许在不同地方提供不同的挂件模版。
如果之后要有声音支持则可以考虑rayaudio或者Miniaudio↗。 另参见rfx和sfxr↗的简易音效发生器实现。
问题:
没有想好挂件布局自定义的自由度级别。由于存在条件判断挂件,完全可视化调节就不方便。带有标签页的面板停靠布局用作显示动态切换似乎足够表示相当多的需要换页的情况。
目前初步认为,应不提供直接修改面板和单个挂件的接口,但允许修改面板和属性包的模版,同时在终端应用程序中只允许按照模版添加面板,同时也可以创建新的面板模版并以脚本方式编辑。这种情况下,原始的挂件对象创建接口似乎多余,但可以保留以更直接地制作更简单的应用程序,内部转换为模版不一定可行,最好的方法是从模版开始创建,而启动时的指令用于生成原始布局,之后布局也可以从文件等读取。
直接创建的函数可以用,应该设计为要求运行在直接模式下。若未要求则运行在模版模式,此时直接创建函数将放在面板模版里,初始化时只填充布局。(也可以方便起见在即时生成后自动以面板名字创建为模版以供之后添加)
这种情况下界面储存和再加载是否通过UDF实现还不清楚。
似乎屏幕缓冲区不可以绑定为贴图……
基本上对的,字符编辑,不带选中的,上下左右换行退格都可以了。
需要:
GetStringLength
函数。G/S/R和全局轴限制基本上可以了
框选可以了,稍改进批绘图命令。
需要 LA_UDF_RAW
形式的数据供保存和撤销。
现更有GL选择!
节点支持的一系列基本上可以了,有点小问题慢慢改好
多窗口也正常了。
可以开始写文档了。
改进的文字编辑,悬空提示和详细信息,文件管理,更好的全屏等。
现在会阴影了。
着色器和贴图等等一系列的东西要改的来更好用才行,需要避免几个贴图冲突。
现在单片面的片段XY从视角到视线应该是正确的了。显示的是FOV圈。
应计算为(0,0,-1)的变换,之后在ShaderToy找到个RayMarch的着色器,能够正确显示,经检查,尺寸正确匹配,因此可以继续用这个基础做合成渲染。
现支持折叠标题、扩大单个区域,以及画布控件真全屏。
优化了储存逻辑和显示,重新整理了内部画布的流程等,并新增了个简单的贴图检查工具。
分文件保存的逻辑可以了,自动检测需要保存的文件全部写入。
储存管理的界面以及一个新的控制台,实现了等宽字符,字都改成动态分配的了,同时等宽尺寸按照汉字的一半。
基本上设计好了文件管理方式,另外现在Hyper2可以自动记录修改。需要读写覆盖的数据尽量用Hyper2,部分简单的只供追加而不共享引用的可以不用。
底层基本上能够正确跑了,接下来的功能:
界面的:
好了李论上撤销已经正常工作了,接下来只需要做那个中途开始做的清理即可。
subprop行为:
这样储存时也只需要表或者单一Get一个。自定义的Get表只适用于用户界面。
UseLinkItem
的支持以更好地兼容指针反引用的特点。可以存取用户设置和输入映射了
同时插座现在可以显示标签
可以驱动物体了
DAG 应该也正常了,做了一个映射网。
基本操作都可以了,还差:
但这些都可以后面再慢慢做。
可以选择边了,因此可能可以做那个什么环切了。
目前退出时候的问题应该主要是删除撤销时的状态与目前的状态不符。鉴于内存都使用mem建立,可以不要这一步。
更新了memLeave的行为,现在能在两次撤销之间添加并删除那些将不存在于前一个和后一个状态的内存节点了(只要都使用memLeave),此时可以兼容多步修改、手工和带有/不带撤销的修改。
面板由于自动用户无法干净删除,使其在关闭后可能导致停机。(好了修好了,现在删的特别干净23333 其实还是没有。。。应当用面板保留节点然后最后退出时统一删面板节点不然目前的PropPack更新行为意味着无法删除所有用户(行了就是这么修的就这样吧))
撤销又改改改改改然后最后还是要撤销系统保留所有指针不释放因为半途释放会有重复地址造成的模糊问题(并且此时仅使用指针生命期则无法判别)。
另外支持了RAW撤销和重做。
去掉了Scene,直接用RootObject,基本上又恢复正常工作了。
需要将键位处理成能够ThisCall的。
映射图挂件的撤销有问题
Win 的大多数功能基本上能跑了
Win下的窗口什么的可以了,还有输入设备和文件等等一堆小东西不行。
Win下支持了WinTab
修复了拆面的拓扑错误问题(应该没事了)
修复了合并网格物体的面引用问题。
目前有些问题:
(当然工具都是要有撤销的)
实例器做好了,包括固定分离实例等改变。
做了Holder和 __actions__
列表还有 verify
现在应该可以了
动画数据的储存怎么操作还不清楚。目前的状况似乎要求每个Action挂在某个ID块下面,同时不允许储存别的ID块下面的属性。界面上怎么实现不清楚,因为它应该不能简单地就放在3d物体下。
基本上逻辑是通的了
新!非绝对帧的动画系统有一个基本的UI了。
简易合并也可以了。
透选也可以了
环切和链式/环式选择基本也可以了。
切割工具似乎可以了
优化了主题留白尺寸细节,以及行布局尺寸管理。
合并物体的撤销有问题(修了,用maxf作为参考长度,可能行了)
示波器
把小房子引擎的音频合成移动到了lagui这样可以统一管理
现已在 Linux 和 Windows 上支持wacom笔杆旋转!
Tab 最好要有竖置标签
整理了界面一些问题,修了 GL Context ,然后还要检查面板放置和尺寸确认时是否有重复工作,还有windows下GL调试不遵守过滤的问题。
此外使用 glDebugMessageCallback
即可调试错误和性能信息。
从这里来看VAO和FBO似乎是不共享的,看来需要每个窗口绑定一次。
这可以解释今天在NV卡上的闪烁行为。
https://community.khronos.org/t/sharing-contexts/73563/2↗
音频设备选择
单实例在撤销丢弃时似乎是没有删掉的,好像没有针对这个的机制。需要检查。
大流程 然后完善了一些东西
原来glShaderSource可以指定多个连在一起。。。
程序纹,但是暂时还不能驱动,也没有运行复制。
多个实例应该也正常了,只编译一次脚本
可以通过 ffi.C
调内部函数跑物体了
跑起来了跑起来了
luajit 作为内置控制台可以用了
需要 Word wrap 而不是简单的超界换行
改把改把
DVD!
2022/08/21 11:38:45 - 2023/09/19 16:06:13