1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
<title>Chrisoft::Blog(r#"Some rants on SMELT, QMidiPlayer and Virtools")</title>
<meta name="description" content="«Some rants on SMELT, QMidiPlayer and Virtools» de spelunca ursae">
<meta name="author" content="Chris Xiong">
<script type="text/javascript" src="/panel.js"></script>
<script type="text/javascript" src="/themer.js"></script>
<script type="text/javascript" src="/blog/footnoter.js"></script>
<script type="text/javascript" src="/blog/aes-js.js"></script>
<script type="text/javascript" src="/blog/scrypt.js"></script>
<script type="text/javascript" src="/blog/sha256.js"></script>
<script type="text/javascript" src="/blog/decryptor.js"></script>
<link rel="stylesheet" type="text/css" href="/common.css">
<link rel="stylesheet" type="text/css" href="/panel.css">
<link rel="stylesheet" type="text/css" href="/theme0a.css" id="theme0a">
<link rel="stylesheet" type="text/css" href="/theme0b.css" id="theme0b">
<link rel="stylesheet" type="text/css" href="/theme1a.css" id="theme1a">
<link rel="stylesheet" type="text/css" href="/theme1b.css" id="theme1b">
<link rel="stylesheet" type="text/css" href="/theme2a.css" id="theme2a">
<link rel="stylesheet" type="text/css" href="/theme2b.css" id="theme2b">
<link rel="stylesheet" type="text/css" href="/theme3a.css" id="theme3a">
<link rel="stylesheet" type="text/css" href="/theme3b.css" id="theme3b">
<link rel="stylesheet" type="text/css" href="/blog/blogext.css">
<script>
function ol()
{
window.onresize=function()
{
if(window.innerWidth<768)
setupevents();
else unsetevents();
}
window.onresize();
loadTheme();
_decryptonload();
}
</script>
</head>
<body onload="ol()" style="overflow-x:hidden;">
<div id="panel" class="TText">
<ul id="panellist">
<li><a href="/"><h1>Chrisoft</h1></a></li>
<li><a href="/blog"><h2>Blog</h2></a></li>
<li><a href="#"><h3 id="title">Some rants on SMELT, QMidiPlayer and Virtools</h3></a></li>
<li><span>Tags</span>
<ul id="tagslist">
<li><a href="/blog/list/devel/">devel</a></li><li><a href="/blog/list/qmidiplayer/">qmidiplayer</a></li><li><a href="/blog/list/opengl/">opengl</a></li></ul>
</li>
<li id="tocouter" style="display: none;">
<span>Table of Contents</span>
<ul id="tocroot">
</ul>
</li>
<li style="margin-left:-0.5em"><a id="prevp" href="2018-02-05.html">Prev post</a></li>
<li style="margin-left:-0.5em"><a id="nextp" href="2018-04-17.html">Next post</a></li>
</ul>
</div>
<div id="content">
<h2 id="titleh" class="TText" style="font-wight:normal;">Some rants on SMELT, QMidiPlayer and Virtools</h2>
<div id="datetags" class="TText" style="margin-bottom:1em;">2018-03-17<br>#devel #qmidiplayer #opengl</div>
<hr><div id="article" class="TText">
<article>
<p>
Well, I have to admit that creating a new blog post but not writing the
actual content until more than a month later is <b>bullshit</b>. I've
almost forgotten what I was thinking about when I created the post...
</p>
<p>
But as you can tell from my recent activity, development of QMidiPlayer
seemed to be stalled. No new features has been added since the rewrite
of the MIDI mapper. However the rewrite is actually for the next planned
major feature: an OPL3 emulator plugin and probably a VST host plugin.
I spent one third of my winter break on reading the specs of the YMF262
chip but made no real progress, which is a real shame.
</p>
<p>
As for SMELT, I ported it to OpenGL 3.3+ but this is definitely not in
my original schedule. The initial port has a whole bunch of bugs and
quirks, also its performance was poor. Most of these were fixed later on
with the help of <a href="https://github.com/apitrace/apitrace">apitrace</a>.
However currently the new port still makes way more OpenGL calls than
expected.
</p>
<p>
Planned features for SMELT include vertex array switching, material,
lighting and custom shaders. Adding these features will likely make the
older version deprecated though. Plus there's no strong demand for these
features. Therefore they may not be added any time soon.
</p>
<p>
The Virtools part is an entirely accident. 2jjy and I suddenly got excited
with the Virtools SDK and decided to find out what can it achieve. Before
long 2jjy managed to analyze the internal structure of a Virtools
<i>behavior</i>. These data determines how the behavior graph is presented
in the schemetic interface. Checking 'hide script representation in
schemetic' while saving simply discards these data, effectively obfuscating
the script. The final tool we made public reconstructs the base of this
structure using the logic of the script and tries to arrange behavior
building blocks in a more human-readable way. It definitely helps future
analysis of our old pal (Ballance), but not so much in my opinion. Porting
the custom DLLs used by Ballance to a "newer" Virtools verion might be way
more important.
</p>
<p>
The tool has been
<a href="https://github.com/BearKidsTeam/VirtoolsScriptDeobfuscation">made public</a>.
As the job it does falls into a "grey zone", we don't know whether it is
legally acceptable to use it. Use at your own risk!
</p>
</article>
<!--
vim:syntax=html
-->
</div><br><hr>
<div class="TText" id="notediv" style="font-size:80%;"></div>
<div id="insanch" style="height:3em;"></div>
<div id="footer" style="">
<div id="pagesw" class="TText" style="width:100%;height:0.5em;"></div>
<div style="text-align:center;" class="TText">
Proudly powered by SSBS <reduced style="font-size:70%;">(the static stupid blogging system)</reduced> 2.5
<br>
Content licensed under CC BY-SA 4.0. <span id="purgep" style="display:none;font-size:70%;">This page has passphrase(s) stored. Click <a href="javascript:_purgep()">here</a> to purge.</span>
</div>
</div>
<div id="cmdbuf" class="TText" style="transition:500ms;padding:1em;font-size:2em;color:white;position:absolute;background-color:rgba(0,0,0,0.6);left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none;opacity:0;">
</div>
</div>
<div id="decryptui" style="display:none;opacity:0;color:white;z-index:1000;position:fixed;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4);transition:opacity 0.5s;">
<div id="decryptdlg" class="TText" style="padding:10px 20px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background-color:rgba(0,0,0,0.6);">
<div id="keyhint" style="margin-bottom:8px;"></div>
<div style="margin-bottom:8px;">Key: <input id="keyinp" type="text" style="color:#fff;"></div>
<div style="height:2.25em;">
<button id="btndecrypt" onclick="decryptor(decid,document.getElementById('keyinp').value);" style="position:absolute;left:20px;">Decrypt</button>
<button onclick="hidedecryptui();" style="position:absolute;right:20px;">Cancel</button>
</div>
</div>
</div></body></html>
|