
Сообщение от
Eltaron
Еще переписал всю историю, распаковав ROMS.PAK. Теперь всё лежит отдельными ромами (так намного удобней отслеживать историю изменений в логе), а в архив собирается уже при окончательной релизной сборке автоматом.
да, с ромами я тоже сделал отдельную папку с ромами и скриптом для сборки, правда скрипт bash, для линукс. Можно и для Windows батник добавить, но может есть лучше варианты?
Я там также убрал ildasm/ilasm из проектного файла, т.к. оно сильно тормозило сборку и слишком сложно было править большой IL файл и были проблемы с компиляцией на линукс, теперь код генерится с помощью Mono.Cecil, и достаточно просто добавить прототип функции в C# и он автоматически при сборке имплементируется. Это используется для реализации OpenGL, где для вызова функции теперь достаточно толко объявить прототип функции и переменную с указателем с таким-же именем и они автоматически имплементятся и инициализируются при компиляции - можно сразу вызывать и проверять указатель - найдена ли функция. Переписывание кода с си заключается по сути в добавлении прототипов функций в класс gl и замене glClear на gl.Clear, или GL_VERSION на GL.VERSION.
Вот пример OpenGL кода:
Код:
static void onResize(Vector2i wndSize) {
gl.Viewport(0, 0, wndSize.X, wndSize.Y);
gl.MatrixMode(GL.PROJECTION);
gl.LoadIdentity();
gl.Ortho(0.0, 1.0, 1.0, 0.0, 1, 0);
gl.MatrixMode(GL.MODELVIEW);
}
static void onRender(Context ctx, Vector2i size) {
gl.MatrixMode(GL.MODELVIEW);
gl.PushMatrix();
gl.Clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT);
gl.Enable(GL.TEXTURE_2D);
gl.LoadIdentity();
if (_program.IsLinked) {
gl.UseProgram(_program.Id);
if (_rubyInputSizeId != -1)
gl.Uniform2f(_rubyInputSizeId, 320f, 256f);
if (_rubyOutputSizeId != -1)
gl.Uniform2f(_rubyOutputSizeId, (float)size.X, (float)size.Y);
if (_rubyTextureSizeId != -1)
gl.Uniform2f(_rubyTextureSizeId, 320f, 256f);
}
curtxid = texids[curtex];
gl.BindTexture(GL.TEXTURE_2D, curtxid);
gl.Begin(GL.TRIANGLE_STRIP);
gl.TexCoord2f(1.0f, 0.0f); gl.Vertex2f(1.0f, 0.0f); // RT
gl.TexCoord2f(0.0f, 0.0f); gl.Vertex2f(0.0f, 0.0f); // LT
gl.TexCoord2f(1.0f, 1.0f); gl.Vertex2f(1.0f, 1.0f); // RB
gl.TexCoord2f(0.0f, 1.0f); gl.Vertex2f(0.0f, 1.0f); // LB
gl.End();
if (_program.IsLinked) {
gl.UseProgram(0);
}
gl.Disable(GL.TEXTURE_2D);
gl.MatrixMode(GL.MODELVIEW);
gl.PopMatrix();
gl.Flush();
//gl.Finish();
ctx.SwapBuffers();
}
А как ты перетащил историю с codeplex?