Информация Layered.dll - Re-Written in Pure Zig

BLACKFIRE69

Новичок
A few days ago, I met some of my classmates, and I learned that several of them had started game development projects using Zig . After talking to them, I felt motivated and, on my way home, decided to start my own project in Zig. However, my mind was blank, and I realized I had forgotten much of the language since I hadn't worked with Zig for months.

To refresh my skills, I began converting some of old C++ projects into Zig. One of these was the Layered project , originally developed by David D. Rocco.

Why Zig?
Код:
Zig is a modern, straightforward language that's easy to learn and enforces strict type matching for safer, more predictable code.
Designed as a powerful alternative to C, it combines performance and simplicity with seamless C interoperability, 
advanced memory management, and built-in tooling for streamlined development.

Here is the Layered project, completely re-written in pure Zig.

Форматирование (BB-код):
Module:          Layered.dll
Rewritten by:    BLACKFIRE69
Compiler:        Zig v0.14.0-dev.2371+c013f45ad
I started this project just for fun and don't intend to develop it further. For those who are interested, I've included the Zig source code, so feel free to take a look.

Also, if anyone has the latest version of the Layered C++ source code, I'd appreciate it if you could share it with me.

Example:
Форматирование (BB-код):
procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
begin
  lBeginRender(scene);
    lRenderHint(true);

    lFillRectangle(b1, 0, 0, WizardForm.Width, WizardForm.Height);
    lDrawRectangle(pen, 0, 0, WizardForm.Width, WizardForm.Height);

    lSetImageTransparent(70);
    lDrawImage(skip, 110, 210);
 
    lSetStringAlignment(StringAlignmentCenter);
    lSetStringLineAlignment(StringAlignmentCenter);

    lDrawStringRectW(WizardForm.Caption, 0, 190, WizardForm.Width, 25, font, b7);

  lEndRender();
end ;
Форматирование (BB-код):
procedure  InitializeWizard ();
begin
  lStartup;

  scene := lCreateScene(WizardForm.Handle, WizardForm.Width, WizardForm.Height);

  skip := lCreateTextureW(ExpandConstant('{tmp}\skip.gif'))
  tex := lCreateTextureW(ExpandConstant('{tmp}\tex.png'));

  b1 := lCreateTextureBrush(tex);
  b6 := lCreateGradientBrush(0, 0, WizardForm.Width, 0, $ff00ff00, $ff0000ff);
  b7 := lCreateSolidBrush($ffffffff);
  pen := lCreatePen($ffff0000, 2);

  TimerID := SetTimer(0, 0, 100, wrapEventProc(@TimerProc,4));
end ;

procedure  DeinitializeSetup ();
begin
  lShutdown;
end ;


0.png


1.png

2.png

3.png
 

Вложения

sergey3695

Ветеран
Модератор
Компилятор https://ziglang.org/download/
Чтобы собрать под Windows используем cmd
Код:
zig build
pause
в build.zig меняем в строке const optimize = std.builtin.OptimizeMode.Debug; на нужную сборку
Код:
pub const OptimizeMode = enum {
    Debug,
    ReleaseSafe,
    ReleaseFast,
    ReleaseSmall,
};
например const optimize = std.builtin.OptimizeMode.ReleaseSmall; В папке .\zig-out\bin собранный проект.
p.s. первый раз собирал на zig.
 

sergey3695

Ветеран
Модератор
Немного уменьшил размер dll убрав debug сообщения. 58 -> 43 Кб.
 

Вложения

Последнее редактирование:

Shegorat

Lord of Madness
Администратор
Если в build.zig указать
Код:
const optimize = b.standardOptimizeOption(.{});
Тогда опции оптимизации будут работать из консоли
Код:
zig build -Doptimize=ReleaseFast
Плюс нужно также статически слинковать рантайм c++, да, размер либы увеличится, но мы будем зависить только от голой системы (user32.dll, kernel32.dll, etc)
Код:
const lib = b.addSharedLibrary(.{
......
});
lib.linkLibCpp();
Но тут могут быть проблемы, насколько я помню, в stable версии zig не соберётся вариант gnu x86
 

sergey3695

Ветеран
Модератор
Обновил сообщение c dll.
@BLACKFIRE69, u can update build.zig with libc? p.s. i'm newbie
 
Последнее редактирование:

KARB10

Новичок
Какие преимущества у Layered перед fmxinno? В чем их отличия?
 

Nemko

Дилетант
Модератор
KARB10, думаю, маленький размер библиотеки (~43кб), базовый функционал для создания графического интерфейса с помощью многослойного окна (подойдет для воссоздания множества дизайнерских решений).
 
Сверху