34 Commits

Author SHA1 Message Date
03da8574be Sync build files with main
Some checks failed
Build system / Check kernel codestyle (pull_request) Successful in 20s
Build system / Build (pull_request) Failing after 48s
- Fix merge conflicts.
2025-05-20 19:12:59 +01:00
a6abf50f97 system/rdsave: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:12:58 +01:00
a1538d2d7f system/MyKey: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
a9351a35d9 system/mousemul: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.
2025-05-20 19:10:55 +01:00
dbd340dd7d system/menu: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
00f3b86d44 system/launcher: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
99bee67a4c system/launch: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files.
2025-05-20 19:10:55 +01:00
de26ccc3b7 system/kobra: Post-SVN clean up
- Move source code from `trunk` into program root directory.
2025-05-20 19:10:55 +01:00
8a2d12bad8 system/icon: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
5e91894495 system/hdd_info: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.
2025-05-20 19:10:55 +01:00
e01add279b system/eskin: Post-SVN clean up
- Update ASM include paths.
- Note: Line endings standardised to `LF`, so best to view diffs with whitespace changes hidden.
2025-05-20 19:10:55 +01:00
402ee973eb system/eskin: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files.
2025-05-20 19:10:55 +01:00
0bff8fb2fc system/docpack: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:55 +01:00
12c0d3916f system/docky: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.
2025-05-20 19:10:54 +01:00
555ab125a3 system/cpu: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:54 +01:00
e18946f81b system/calendar: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:54 +01:00
4a3a04bb4d system/board: Post-SVN clean up
- Move source code from `trunk` into program root directory.
- Update build files and ASM include paths.
2025-05-20 19:10:54 +01:00
7e63294b5e Post-SVN clean up (#244)
- Move source code from `trunk` into program root directory.
- Fix build and ASM files.
- Translated a few RU comments to en_US.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.

(Work towards #75, point 3)

Reviewed-on: #244
Reviewed-by: Gleb Zaharov <risdeveau@codrs.ru>
Reviewed-by: Burer <burer@kolibrios.org>
Co-authored-by: Andrew <dent.ace@gmail.com>
Co-committed-by: Andrew <dent.ace@gmail.com>
2025-05-20 17:36:10 +02:00
c148987224 Libs/http: Added all delim chars from RFC 3986 (#233)
Original PR: https://github.com/KolibriOS/kolibrios/pull/34
Original issue: https://github.com/KolibriOS/kolibrios/issues/33

Co-authored-by: Sarveshwaar SS <94345639+Saru2003@users.noreply.github.com>

Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/233
Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com>
Reviewed-by: IgorA <igora@noreply.localhost>
Co-authored-by: Burer <burer@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2025-05-17 19:11:15 +02:00
4550e15838 Magnify: Moved to programs/system
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 29s
Build system / Build (pull_request) Successful in 8m45s
Signed-off-by: Max Logaev <maxlogaev@proton.me>
2025-05-14 21:58:44 +03:00
cc867a0bb8 Magnify: Added visual grid. Changed magnify calc and display logic
- Fully refactored codestyle;
- Changed magnify calculations and display logic,
  now it is similar to Pipet;
- Added proper copyrights;
- Localization to all system languages;
- Removed redundant .bat files;
- Added visual grid (Leency).

Co-authored-by: Kiril Lipatov <lipatov.kiril@gmail.com>
2025-05-14 21:58:24 +03:00
16a0ef9543 WebView 3.91 (#230)
- fix crash at the end of the page https://menuetos.net/docs.htm;
- improve position of the line under text (and related code)
  for a various font sizes;
- handle params width= and size= of <hr>;
- update acid_0.1.htm page.

Reviewed-on: #230
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: leency <lipatov.kiril@gmail.com>
Co-committed-by: leency <lipatov.kiril@gmail.com>
2025-05-05 19:04:52 +02:00
51b150c9aa Kernel: Fixed bug #221 - accept does not fill sockaddr 2025-05-05 18:14:22 +02:00
c18da5afae TinyGL: Added gluDisk. Fixed args in gluCylinder and gluSphere (#223)
TinyGL:
- Fixed setting of `GL_FRONT_AND_BACK` mode;
- Fixed setting of `GL_SPOT_DIRECTION` angle;
- Optimization of drawing triangles and lines;
- Input parameters are adjusted to the OpenGL standard
  in `gluCylinder` and `gluSphere` functions;
- Added `gluDisk` function (the gluDisk function draws
  a disk-shaped quadric figure);
- Optimize function `calc_buf`.

Flag:
- Added lighting.

info3ds, info3ds_u, test_glu0, test_glu1, test_glu2,
textures0, textures1, textures2:
- Updated programs using `gluCylinder` and `gluSphere`.

Reviewed-on: #223
Reviewed-by: Ivan B <dunkaist@noreply.localhost>
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: IgorA <aie85playm@gmail.com>
Co-committed-by: IgorA <aie85playm@gmail.com>
2025-05-04 20:00:04 +02:00
cd1c2ce969 Fix docpack shortcut for sysfuncs in text editors
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 28s
Build system / Build (pull_request) Successful in 6m54s
Docpack app has several help files included. Tinypad and CEdit run the
app to show one of sysfuncs.txt/sysfuncr.txt files. The text editors
pass a one-letter argument to specify the text file. It used to be 'f'
for sysfuncs, it has become 'e' recently. Update this one-letter
argument both in tinypad and cedit.

Resolve #216
2025-04-30 01:50:46 +01:00
d7795a8961 Flag: demo program rewritten from C to FASM (#219)
Original source: http://ftp.kolibrios.org/arch/libraries/TinyGL/examples/flag_src.7z

Reviewed-on: #219
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Reviewed-by: Ivan B <dunkaist@noreply.localhost>
Co-authored-by: IgorA <aie85playm@gmail.com>
Co-committed-by: IgorA <aie85playm@gmail.com>
2025-04-22 15:11:55 +02:00
b948491fb3 Calc+: Fix list buttons UI (#220)
- Fixed list buttons wrong position and size;
- Fixed list buttons logic not working.

Reviewed-on: #220
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Burer <burer@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2025-04-22 15:01:29 +02:00
03cfdeb50f TinyGL: Bug fixes. info3ds, info3ds_u, vox_tgl: Related changes (#210)
TinyGL:
- The `depth` parameter in the `glClearDepth` function is now `qword` instead of `dword`.
- Fixed bug with z-buffer (the edges were cut off incorrectly, the coordinates in it were from 0 to 1, but should be from -1 to 1)
- Optimized array functions: `glDrawArrays`, `glDrawElements`

info3ds, info3ds_u, vox_tgl:
- Removed unnecessary operations after fixing a bug with the z-buffer.

Reviewed-on: #210
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: IgorA <aie85playm@gmail.com>
Co-committed-by: IgorA <aie85playm@gmail.com>
2025-04-15 14:40:41 +02:00
e4cd8a4d74 Calc+ v1.0 (#189)
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 26s
Build system / Build (pull_request) Successful in 7m1s
- Bigger fonts
- System colors
- Code refactoring to make UI flexible and more readable
- Move from ISO to IMG
- Add to main menu, add to desktop instead of Calc, remove from App+
- Localization to all system languages
- Source code file is now UTF-8

Co-authored-by: Burer <burer@kolibrios.org>
Reviewed-on: #189
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Kiril Lipatov <lipatov.kiril@gmail.com>
Co-committed-by: Kiril Lipatov <lipatov.kiril@gmail.com>
2025-04-14 19:46:57 +02:00
75b6663ce0 Ftpc: Update (#185)
- fix for bugs with buffers 'remote_list_buf', 'buf_buffer2';
- fix stack leak when navigating files;
- change sorting of folders and files, clean code;
- added option to show|hide log;
- icons are taken from @reshare;
- added icons to the 'disconnect' and 'search' buttons.

Reviewed-on: #185
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: IgorA <aie85playm@gmail.com>
Co-committed-by: IgorA <aie85playm@gmail.com>
2025-04-10 18:47:13 +02:00
df0c5d8f48 Сharsets: Updated to 0.4.2 (#196)
30.03.2025 - 0.4.0
- Localization for all system languages
- Display all character scales
- Abolity to copy character codes
- Block on charpage 00 for CP866
- New character code half markers
- Navigation using keys (see hotkeys.txt)

03.04.2025 - 0.4.1
- Fixed bug with codes color subscription

04.04.2025 - 0.4.2
- Fixed bug with resetting UTF charpage to zero on double charset swap to CP866
- Improved charpage blocking for CP866 UX
- Improved char codes copying UI

Reviewed-on: #196
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Burer <burer@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2025-04-10 16:24:11 +02:00
fcb9f49785 flood-it: Fixed buttons position (#193)
Reviewed-on: #193
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: leency <lipatov.kiril@gmail.com>
Co-committed-by: leency <lipatov.kiril@gmail.com>
2025-04-03 12:32:18 +02:00
d6c44c6570 WebView 3.9
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 31s
Build system / Build (pull_request) Successful in 6m27s
- new homepages
- fix clash on a wrong <kosicon> number
- set proper internal page sizes
2025-04-03 10:50:04 +02:00
b8a1487bab Fixed menu.dat (ru_RU) after moving the period app
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 22s
Build system / Build (pull_request) Successful in 6m24s
Signed-off-by: Max Logaev <maxlogaev@proton.me>
2025-04-03 11:29:55 +03:00
324 changed files with 12301 additions and 10456 deletions

View File

@@ -66,17 +66,6 @@ to the end commit message body on a new line.
Use **rebase** to keep your branch up to date.
## Licensing
For new source code files and for existing ones without a license, you need to add the following header to the beginning of the file:
```asm
; SPDX-License-Identifier: GPL-2.0-only
; Program - Brief description.
; Copyright (C) 2011-2025 KolibriOS team
```
Be careful when setting copyright and date interval. Review the file's history to verify its origin.
## Conclusion
We hope this small instructions will help you to get familiar with KolibriOS contribution rules and inspire you to participate in the life of our project.

View File

@@ -1,6 +1,6 @@
# KolibriOS
[![License](https://img.shields.io/badge/License-GPL%202.0-green)](./LICENSE)
[![License](https://img.shields.io/badge/License-GPL%202.0-green)](./COPYING.TXT)
[![Build system](https://git.kolibrios.org/KolibriOS/kolibrios/actions/workflows/build.yaml/badge.svg)](https://git.kolibrios.org/KolibriOS/kolibrios/actions)
KolibriOS is a hobby operating system for x86-compatible computers, which is currently being developed by a small but passionate team of enthusiasts.

View File

@@ -49,8 +49,6 @@ img_files = {
{"MEDIA/IMGF/INVSOL.OBJ", "common/media/ImgF/invSol.obj"},
{"MEDIA/PIXIESKN.PNG", SRC_PROGS .. "/cmm/pixie2/pixieskn.png"},
{"NETWORK/FTPC.INI", SRC_PROGS .. "/network/ftpc/ftpc.ini"},
{"NETWORK/FTPC_SYS.PNG", SRC_PROGS .. "/network/ftpc/ftpc_sys.png"},
{"NETWORK/FTPC_NOD.PNG", SRC_PROGS .. "/network/ftpc/ftpc_nod.png"},
{"NETWORK/FTPD.INI", "common/network/ftpd.ini"},
{"NETWORK/KNMAP", "common/network/knmap"},
{"NETWORK/USERS.INI", "common/network/users.ini"},
@@ -82,7 +80,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"GAMES/DESCENT", build_type .. "/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/rus/.shell"},
{"SETTINGS/GAMES.INI", "ru_RU/settings/games.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/mykey.ini"},
{"SETTINGS/SYSPANEL.INI", "ru_RU/settings/syspanel.ini"},
}) elseif build_type == "en_US" then tup.append_table(img_files, {
{"WELCOME.HTM", VAR_DATA .. "/" .. build_type .. "/welcome.htm.kpack"},
@@ -92,7 +90,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"GAMES/DESCENT", "common/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"},
{"SETTINGS/GAMES.INI", "common/settings/games.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/mykey.ini"},
{"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"},
}) elseif build_type == "es_ES" then tup.append_table(img_files, {
{"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"},
@@ -101,7 +99,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"GAMES/DESCENT", "common/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"},
{"SETTINGS/GAMES.INI", "common/settings/games.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/mykey.ini"},
{"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"},
}) elseif build_type == "it_IT" then tup.append_table(img_files, {
{"EXAMPLE.ASM", SRC_PROGS .. "/develop/examples/example/trunk/example.asm"},
@@ -109,7 +107,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"File Managers/KFAR.INI", "common/File Managers/kfar.ini"},
{"GAMES/DESCENT", "common/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey_it.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/mykey_it.ini"},
{"SETTINGS/GAMES.INI", "common/settings/games.ini"},
{"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"},
}) else tup.append_table(img_files, {
@@ -119,7 +117,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
{"GAMES/DESCENT", "common/games/descent"},
{"SETTINGS/.shell", SRC_PROGS .. "/system/shell/bin/eng/.shell"},
{"SETTINGS/GAMES.INI", "common/settings/games.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/trunk/mykey.ini"},
{"SETTINGS/MYKEY.INI", SRC_PROGS .. "/system/MyKey/mykey.ini"},
{"SETTINGS/SYSPANEL.INI", "common/settings/syspanel.ini"},
}) end
@@ -197,8 +195,8 @@ extra_files = {
{"kolibrios/develop/utils/SPEDump", SRC_PROGS .. "/develop/SPEDump/SPEDump.kex"},
{"kolibrios/emul/", "common/emul/*"},
{"kolibrios/emul/dosbox/", "common/emul/DosBox/*"},
{"kolibrios/emul/e80/readme.txt", SRC_PROGS .. "/emulator/e80/trunk/readme.txt"},
{"kolibrios/emul/e80/keyboard.png", SRC_PROGS .. "/emulator/e80/trunk/keyboard.png"},
{"kolibrios/emul/e80/readme.txt", SRC_PROGS .. "/emulator/e80/readme.txt"},
{"kolibrios/emul/e80/keyboard.png", SRC_PROGS .. "/emulator/e80/keyboard.png"},
{"kolibrios/emul/fceu/fceu", SRC_PROGS .. "/emulator/fceu/fceu"},
{"kolibrios/emul/fceu/FCEU ReadMe.txt", SRC_PROGS .. "/emulator/fceu/FCEU ReadMe.txt"},
{"kolibrios/emul/chip8/chip8", VAR_PROGS .. "/emulator/chip8/chip8"},
@@ -286,7 +284,7 @@ extra_files = {
{"kolibrios/netsurf/res/", "common/network/netsurf/res/*"},
{"kolibrios/res/skins/", "../skins/authors.txt"},
{"kolibrios/res/templates/", "common/templates/*"},
{"kolibrios/res/templates/", SRC_PROGS .. "/emulator/e80/trunk/games/*"},
{"kolibrios/res/templates/", SRC_PROGS .. "/emulator/e80/games/*"},
{"kolibrios/res/templates/NES/", "common/templates/NES/*"},
{"kolibrios/res/wallpapers/", "common/wallpapers/*"},
{"kolibrios/res/system/", build_type .. "/settings/kolibri.lbl"},
@@ -318,14 +316,14 @@ if build_type == "ru_RU" then tup.append_table(extra_files, {
{"Docs/cp866/Hot_Keys.txt", build_type .. "/docs/Hot_Keys.txt"},
{"Docs/cp866/Install.txt", build_type .. "/docs/Install.txt"},
{"Docs/cp866/Credits.txt", build_type .. "/docs/Credits.txt"},
{"Docs/cp866/SysFuncr.txt", VAR_PROGS .. "/system/docpack/trunk/SysFuncr.txt"},
{"Docs/cp866/SysFuncr.txt", VAR_PROGS .. "/system/docpack/SysFuncr.txt"},
{"Docs/cp1251/Config.txt", VAR_DATA .. "/" .. build_type .. "/docs/CONFIG.WIN.TXT", cp1251_from = build_type .. "/docs/Config.txt"},
{"Docs/cp1251/Copying.txt", "$(VAR_DATA)/$(build_type)/docs/COPYING.WIN.TXT", cp1251_from = build_type .. "/docs/Copying.txt"},
{"Docs/cp1251/History.txt", "$(VAR_DATA)/$(build_type)/docs/HISTORY.WIN.TXT", cp1251_from = build_type .. "/docs/History.txt"},
{"Docs/cp1251/Hot_Keys.txt", "$(VAR_DATA)/$(build_type)/docs/HOT_KEYS.WIN.TXT", cp1251_from = build_type .. "/docs/Hot_Keys.txt"},
{"Docs/cp1251/Install.txt", "$(VAR_DATA)/$(build_type)/docs/INSTALL.WIN.TXT", cp1251_from = build_type .. "/docs/Install.txt"},
{"Docs/cp1251/credits.txt", "$(VAR_DATA)/$(build_type)/docs/CREDITS.WIN.TXT", cp1251_from = build_type .. "/docs/Credits.txt"},
{"Docs/cp1251/SysFuncr.txt", "$(VAR_DATA)/$(build_type)/docs/SYSFUNCR.WIN.TXT", cp1251_from = SRC_PROGS .. "/system/docpack/trunk/SysFuncr.txt"},
{"Docs/cp1251/SysFuncr.txt", "$(VAR_DATA)/$(build_type)/docs/SYSFUNCR.WIN.TXT", cp1251_from = SRC_PROGS .. "/system/docpack/SysFuncr.txt"},
{"HD_Load/9x2klbr/", SRC_PROGS .. "/hd_load/9x2klbr/readme_dos.txt"},
{"HD_Load/9x2klbr/", SRC_PROGS .. "/hd_load/9x2klbr/readme_win.txt"},
{"HD_Load/mtldr/", SRC_PROGS .. "/hd_load/mtldr/install.txt"},
@@ -348,7 +346,7 @@ if build_type == "ru_RU" then tup.append_table(extra_files, {
{"Docs/Hot_Keys.txt", build_type .. "/docs/Hot_Keys.txt"},
{"Docs/Install.txt", build_type .. "/docs/Install.txt"},
{"Docs/Credits.txt", build_type .. "/docs/Credits.txt"},
{"Docs/SysFuncs.txt", VAR_PROGS .. "/system/docpack/trunk/SysFuncs.txt"},
{"Docs/SysFuncs.txt", VAR_PROGS .. "/system/docpack/SysFuncs.txt"},
{"HD_Load/9x2klbr/", SRC_PROGS .. "/hd_load/9x2klbr/readme.txt"},
{"HD_Load/mtldr/install.txt", SRC_PROGS .. "/hd_load/mtldr/install_eng.txt"},
{"HD_Load/USB_Boot/readme.txt", SRC_PROGS .. "/hd_load/usb_boot/readme_eng.txt"},
@@ -399,10 +397,10 @@ tup.append_table(iso_extra_files, {
if tup.getconfig('NO_FASM') ~= 'full' then
tup.append_table(img_files, {
{"KERNEL.MNT", VAR_PROGS .. "/../kernel/trunk/kernel.mnt"},
{"@DOCKY", VAR_PROGS .. "/system/docky/trunk/docky"},
{"@DOCKY", VAR_PROGS .. "/system/docky/docky"},
{"@HA", VAR_PROGS .. "/other/ha/HA"},
{"@ICON", VAR_PROGS .. "/system/icon_new/icon"},
{"@MENU", VAR_PROGS .. "/system/menu/trunk/menu"},
{"@MENU", VAR_PROGS .. "/system/menu/menu"},
{"@NOTIFY", VAR_PROGS .. "/system/notify3/notify"},
{"@OPEN", VAR_PROGS .. "/system/open/open"},
{"@TASKBAR", VAR_PROGS .. "/system/taskbar/trunk/TASKBAR"},
@@ -411,32 +409,33 @@ tup.append_table(img_files, {
{"HACONFIG", VAR_PROGS .. "/other/ha/HACONFIG"},
{"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"},
{"APM", VAR_PROGS .. "/system/apm/apm"},
{"CALC", VAR_PROGS .. "/other/calc/trunk/calc"},
{"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/calendar"},
{"CALC", VAR_PROGS .. "/other/calc/calc"},
{"CALCPLUS", VAR_PROGS .. "/other/calcplus/calcplus"},
{"CALENDAR", VAR_PROGS .. "/system/calendar/calendar"},
{"COLRDIAL", VAR_PROGS .. "/system/colrdial/color_dialog"},
{"CROPFLAT", VAR_PROGS .. "/system/cropflat/cropflat"},
{"CPU", VAR_PROGS .. "/system/cpu/trunk/cpu"},
{"CPU", VAR_PROGS .. "/system/cpu/cpu"},
{"CPUID", VAR_PROGS .. "/testing/cpuid/trunk/CPUID"},
{"DOCPACK", VAR_PROGS .. "/system/docpack/trunk/docpack"},
{"DOCPACK", VAR_PROGS .. "/system/docpack/docpack"},
{"DEFAULT.SKN", VAR_SKINS .. "/../skins/Leency/Shkvorka/Shkvorka.skn"},
{"DISPTEST", VAR_PROGS .. "/testing/disptest/trunk/disptest"},
{"END", VAR_PROGS .. "/system/end/light/end"},
{"ESKIN", VAR_PROGS .. "/system/eskin/trunk/eskin"},
{"ESKIN", VAR_PROGS .. "/system/eskin/eskin"},
{"FSPEED", VAR_PROGS .. "/testing/fspeed/fspeed"},
{"GMON", VAR_PROGS .. "/system/gmon/gmon"},
{"HDD_INFO", VAR_PROGS .. "/system/hdd_info/trunk/hdd_info"},
{"HDD_INFO", VAR_PROGS .. "/system/hdd_info/hdd_info"},
{"KBD", VAR_PROGS .. "/testing/kbd/trunk/kbd"},
{"KPACK", VAR_PROGS .. "/other/kpack/trunk/kpack"},
{"LAUNCHER", VAR_PROGS .. "/system/launcher/trunk/launcher"},
{"LAUNCHER", VAR_PROGS .. "/system/launcher/launcher"},
{"LOADDRV", VAR_PROGS .. "/system/loaddrv/loaddrv"},
{"MAGNIFY", VAR_PROGS .. "/demos/magnify/trunk/magnify"},
{"MAGNIFY", VAR_PROGS .. "/system/magnify/magnify"},
{"MGB", VAR_PROGS .. "/testing/mgb/trunk/mgb"},
{"MOUSEMUL", VAR_PROGS .. "/system/mousemul/trunk/mousemul"},
{"MOUSEMUL", VAR_PROGS .. "/system/mousemul/mousemul"},
{"MADMOUSE", VAR_PROGS .. "/other/madmouse/madmouse"},
{"MYKEY", VAR_PROGS .. "/system/MyKey/trunk/MyKey"},
{"MYKEY", VAR_PROGS .. "/system/MyKey/MyKey"},
{"PCIDEV", VAR_PROGS .. "/testing/pcidev/trunk/PCIDEV"},
{"RDSAVE", VAR_PROGS .. "/system/rdsave/trunk/rdsave"},
{"RTFREAD", VAR_PROGS .. "/other/rtfread/trunk/rtfread"},
{"RDSAVE", VAR_PROGS .. "/system/rdsave/rdsave"},
{"RTFREAD", VAR_PROGS .. "/other/rtfread/rtfread"},
{"SEARCHAP", VAR_PROGS .. "/system/searchap/searchap"},
{"SCRSHOOT", VAR_PROGS .. "/media/scrshoot/scrshoot"},
{"SETUP", VAR_PROGS .. "/system/setup/trunk/setup"},
@@ -468,7 +467,7 @@ tup.append_table(img_files, {
{"DEMOS/UNVWATER", VAR_PROGS .. "/demos/unvwater/unvwater"},
{"DEMOS/WEB", VAR_PROGS .. "/demos/web/trunk/web"},
{"DEMOS/ZEROLINE", VAR_PROGS .. "/demos/zeroline/trunk/zeroline"},
{"DEVELOP/BOARD", VAR_PROGS .. "/system/board/trunk/board"},
{"DEVELOP/BOARD", VAR_PROGS .. "/system/board/board"},
{"DEVELOP/DBGBOARD", VAR_PROGS .. "/system/dbgboard/dbgboard"},
{"DEVELOP/CEDIT", SRC_PROGS .. "/develop/cedit/CEDIT"},
{"DEVELOP/CHARSETS", VAR_PROGS .. "/develop/charsets/charsets"},
@@ -524,10 +523,10 @@ tup.append_table(img_files, {
{"LIB/RASTERWORKS.OBJ", VAR_PROGS .. "/develop/libraries/fontRasterWorks_unicode/RasterWorks.obj"},
{"LIB/SORT.OBJ", VAR_PROGS .. "/develop/libraries/sorter/sort.obj"},
{"LIB/TINYGL.OBJ", VAR_PROGS .. "/develop/libraries/TinyGL/asm_fork/tinygl.obj"},
{"MEDIA/ANIMAGE", VAR_PROGS .. "/media/animage/trunk/animage"},
{"MEDIA/ANIMAGE", VAR_PROGS .. "/media/animage/animage"},
{"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"},
{"MEDIA/KIV", VAR_PROGS .. "/media/kiv/trunk/kiv"},
{"MEDIA/LISTPLAY", VAR_PROGS .. "/media/listplay/trunk/listplay"},
{"MEDIA/KIV", VAR_PROGS .. "/media/kiv/kiv"},
{"MEDIA/LISTPLAY", VAR_PROGS .. "/media/listplay/listplay"},
{"MEDIA/MIDAMP", VAR_PROGS .. "/media/midamp/trunk/midamp"},
{"MEDIA/MP3INFO", VAR_PROGS .. "/media/mp3info/mp3info"},
{"MEDIA/PALITRA", VAR_PROGS .. "/media/palitra/trunk/palitra"},
@@ -605,6 +604,7 @@ tup.append_table(extra_files, {
{"kolibrios/3D/voxel_utilites/VOX_CREATOR" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_creator"},
{"kolibrios/3D/voxel_utilites/VOX_MOVER" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_mover"},
{"kolibrios/3D/voxel_utilites/VOX_TGL" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_tgl"},
{"kolibrios/demos/flag", VAR_PROGS .. "/demos/flag/flag"},
{"kolibrios/demos/life3", VAR_PROGS .. "/games/life3/life3"},
{"kolibrios/demos/qjulia", VAR_PROGS .. "/demos/qjulia/trunk/qjulia"},
{"kolibrios/develop/koldbg", VAR_PROGS .. "/develop/koldbg/koldbg"},
@@ -628,7 +628,6 @@ tup.append_table(extra_files, {
{"kolibrios/media/zsea/plugins/rotate.obj", VAR_PROGS .. "/media/zsea/plugins/rotate/rotate.obj"},
{"kolibrios/media/zsea/plugins/scaling.obj", VAR_PROGS .. "/media/zsea/plugins/scaling/scaling.obj"},
{"kolibrios/utils/AMDtemp", VAR_PROGS .. "/system/amd_temp_view/AMDtemp"},
{"kolibrios/utils/calcplus", VAR_PROGS .. "/other/calcplus/calcplus"},
{"kolibrios/utils/kfm/kfm", VAR_PROGS .. "/fs/kfm/trunk/kfm"},
{"kolibrios/utils/tedit/t_edit", VAR_PROGS .. "/other/t_edit/t_edit"},
{"kolibrios/3D/blocks/block.bin", VAR_PROGS .. "/bcc32/games/blocks/block.bin"}
@@ -642,7 +641,7 @@ if build_type == "ru_RU" then tup.append_table(img_files, {
}) end
if build_type == "ru_RU" then tup.append_table(extra_files, {
{"kolibrios/utils/period", VAR_PROGS .. "/other/period/trunk/period"},
{"kolibrios/utils/period", VAR_PROGS .. "/other/period/period"},
{"kolibrios/games/Dungeons/Dungeons", VAR_PROGS .. "/games/Dungeons/Dungeons"},
}) end
@@ -753,7 +752,7 @@ tup.append_table(img_files, {
tup.append_table(extra_files, {
-- {"kolibrios/3D/cubeline", VAR_PROGS .. "/demos/cubeline/trunk/cubeline"},
{"kolibrios/3D/gears", VAR_PROGS .. "/demos/gears/gears"},
{"kolibrios/emul/e80/e80", VAR_PROGS .. "/emulator/e80/trunk/e80"},
{"kolibrios/emul/e80/e80", VAR_PROGS .. "/emulator/e80/e80"},
{"kolibrios/emul/uarm/", VAR_CONTRIB .. "/other/uarm/uARM"},
{"kolibrios/games/2048", VAR_PROGS .. "/games/2048/2048"},
{"kolibrios/games/checkers", VAR_PROGS .. "/games/checkers/checkers"},

View File

@@ -29,7 +29,6 @@ Dicty=/k/utils/DICTY.KEX,79
fNav=/k/utils/fNav/fNav,93
CncEditor=/k/utils/cnc_editor/cnc_editor,15
Life=/k/demos/life2,13
Calc+=/k/utils/calcplus,4
TinyBasic=/k/develop/TinyBasic/TinyBasic,91
THashView=/k/utils/thashview,124
Notes=/k/utils/notes,117

View File

@@ -235,8 +235,8 @@ ico=58
x=68
y=68
[21]
name=CALC
path=CALC
name=CALC+
path=CALCPLUS
param=
ico=4
x=204

View File

@@ -92,6 +92,7 @@
59 Screen keyboard |zkey
#10 **** DATA PROCESSING
16 Calculator |calc
16 Calculator+ |calcplus
03 Tinypad |tinypad
28 CodeEdit |develop/cedit
21 Table processor |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68
y=68
[21]
name=CALC
path=CALC
name=CALC+
path=CALCPLUS
param=
ico=4
x=204

View File

@@ -96,6 +96,7 @@
24 NDN * |/kolibrios/utils/ndn/ndn
#11 **** PROCESO DE DATOS
16 Calculadora |calc
16 Calculadora+ |calcplus
16 Tinypad |tinypad
16 CodeEdit |develop/cedit
16 Procesador de tablas |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68
y=68
[21]
name=CALC
path=CALC
name=CALC+
path=CALCPLUS
param=
ico=4
x=204

View File

@@ -80,6 +80,7 @@
65 NDN * |/kolibrios/utils/ndn/ndn
#11 **** DATA PROCESSING ****
16 Kalkulaator |calc
16 Kalkulaator+ |calcplus
16 Teksti redaktor |tinypad
16 CodeEdit |develop/cedit
16 Tabelarvutus |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68
y=68
[21]
name=CALC
path=CALC
name=CALC+
path=CALCPLUS
param=
ico=4
x=204

View File

@@ -79,6 +79,7 @@
65 NDN * |/kolibrios/utils/ndn/ndn
#11 **** DATA PROCESSING
16 Calcolatrice |calc
16 Calcolatrice+ |calcplus
16 Tinypad |tinypad
16 CodeEdit |develop/cedit
16 Table Processor |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68
y=68
[21]
name=CALC
path=CALC
name=CALC+
path=CALCPLUS
param=
ico=4
x=204

View File

@@ -90,6 +90,7 @@
59 <20><><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |zkey
#10 **** <20><><EFBFBD><EFBFBD>
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |calc
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+ |calcplus
03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tinypad |tinypad
28 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeEdit |develop/cedit
21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |table
@@ -119,7 +120,7 @@
45 <20><><EFBFBD><EFBFBD><20><><EFBFBD><E0A8AD><EFBFBD><EFBFBD><EFBFBD> |easyshot
29 FB2 <20><><EFBFBD><E2A0AB> |fb2read
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> |aclock
21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |period
21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |/kolibrios/utils/period
59 <20><EFBFBD><E0A5AD><EFBFBD><EFBFBD> KJ|ABuIIIA |games/klavisha
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> |demos/bcdclk
53 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |timer

View File

@@ -668,6 +668,8 @@ socket_accept:
DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_accept: socknum=%u sockaddr=%x length=%u\n", ecx, edx, esi
push edx esi
call socket_num_to_ptr
test eax, eax
jz .invalid
@@ -696,6 +698,24 @@ socket_accept:
mov ebx, [ebx + APPDATA.tid]
mov [eax + SOCKET.TID], ebx
pop esi edx
test edx, edx
jz .skip_sockaddr
mov word[edx], 0 ; unknown domain
cmp esi, 8 ; domain + port + ipv4
jb .skip_sockaddr
mov word[edx], AF_INET4
mov esi, edx
mov edx, [eax + IP_SOCKET.RemoteIP]
mov [esi + sockaddr.ip], edx
mov dx, [eax + TCP_SOCKET.RemotePort]
mov [esi + sockaddr.port], dx
.skip_sockaddr:
; Return socket number to caller
mov eax, [eax + SOCKET.Number]
mov [esp + SYSCALL_STACK.eax], eax
@@ -711,16 +731,19 @@ socket_accept:
.wouldblock:
mov dword[esp + SYSCALL_STACK.ebx], EWOULDBLOCK
mov dword[esp + SYSCALL_STACK.eax], -1
pop esi edx
ret
.invalid:
mov dword[esp + SYSCALL_STACK.ebx], EINVAL
mov dword[esp + SYSCALL_STACK.eax], -1
pop esi edx
ret
.notsupp:
mov dword[esp + SYSCALL_STACK.ebx], EOPNOTSUPP
mov dword[esp + SYSCALL_STACK.eax], -1
pop esi edx
ret
;-----------------------------------------------------------------;

View File

@@ -692,6 +692,15 @@ struct TinyGLContext
long int dx, dy, x, y;
};
struct GLUquadricObj
{
GLenum DrawStyle; // GLU_FILL, LINE, SILHOUETTE, or POINT
GLenum Orientation; // GLU_INSIDE or GLU_OUTSIDE
GLboolean TextureFlag; // Generate texture coords?
GLenum Normals; // GLU_NONE, GLU_FLAT, or GLU_SMOOTH
void (__stdcall* ErrorFunc)(GLenum err); // Error handler callback function
};
//
// tinygl - import table
//
@@ -748,7 +757,7 @@ void (__stdcall* glEdgeFlag)(int flag) = (void (__stdcall*)(int))&"glEdgeFlag";
void (__stdcall* glMatrixMode)(int mode) = (void (__stdcall*)(int))&"glMatrixMode";
void (__stdcall* glLoadMatrixf)(const float* m) = (void (__stdcall*)(const float*))&"glLoadMatrixf";
void (__stdcall* glLoadIdentity)() = (void (__stdcall*)())&"glLoadIdentity";
//void (__stdcall* glMultMatrixf)(...) = (void (__stdcall*)(...))&"glMultMatrixf";
void (__stdcall* glMultMatrixf)(const GLfloat *m) = (void (__stdcall*)(const GLfloat*))&"glMultMatrixf";
void (__stdcall* glPushMatrix)() = (void (__stdcall*)())&"glPushMatrix";
void (__stdcall* glPopMatrix)() = (void (__stdcall*)())&"glPopMatrix";
void (__stdcall* glRotatef)(float angle, float x, float y, float z) = (void (__stdcall*)(float, float, float, float))&"glRotatef";
@@ -763,7 +772,7 @@ void (__stdcall* glEndList)() = (void (__stdcall*)())&"glEndList";
void (__stdcall* glCallList)(unsigned int list) = (void (__stdcall*)(unsigned int))&"glCallList";
void (__stdcall* glClear)(int mask) = (void (__stdcall*)(int))&"glClear";
void (__stdcall* glClearColor)(float r, float g, float b, float a) = (void (__stdcall*)(float, float, float, float))&"glClearColor";
//void (__stdcall* glClearDepth)(...) = (void (__stdcall*)(...))&"glClearDepth";
void (__stdcall* glClearDepth)(double depth) = (void (__stdcall*)(double))&"glClearDepth";
void (__stdcall* glRenderMode)(int mode) = (void (__stdcall*)(int))&"glRenderMode";
//void (__stdcall* glSelectBuffer)(...) = (void (__stdcall*)(...))&"glSelectBuffer";
//void (__stdcall* glInitNames)(...) = (void (__stdcall*)(...))&"glInitNames";
@@ -799,18 +808,22 @@ void (__stdcall* glColorPointer)(GLint size, GLenum type, GLsizei stride, const
void (__stdcall* glNormalPointer)(GLenum type, GLsizei stride, const GLvoid* pointer) = (void (__stdcall*)(GLenum, GLsizei, const GLvoid*))&"glNormalPointer";
void (__stdcall* glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) = (void (__stdcall*)(GLint, GLenum, GLsizei, const GLvoid*))&"glTexCoordPointer";
//void (__stdcall* glPolygonOffset)(...) = (void (__stdcall*)(...))&"glPolygonOffset";
//void (__stdcall* glOrtho)(...) = (void (__stdcall*)(...))&"glOrtho";
void (__stdcall* glOrtho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) = (void (__stdcall*)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble))&"glOrtho";
//void (__stdcall* glDebug)(...) = (void (__stdcall*)(...))&"glDebug";
//void (__stdcall* glInit)(...) = (void (__stdcall*)(...))&"glInit";
//void (__stdcall* glClose)(...) = (void (__stdcall*)(...))&"glClose";
//void (__stdcall* gluPerspective)(...) = (void (__stdcall*)(...))&"gluPerspective";
//void (__stdcall* gluNewQuadric)(...) = (void (__stdcall*)(...))&"gluNewQuadric";
//void (__stdcall* gluDeleteQuadric)(...) = (void (__stdcall*)(...))&"gluDeleteQuadric";
//void (__stdcall* gluQuadricDrawStyle)(...) = (void (__stdcall*)(...))&"gluQuadricDrawStyle";
//void (__stdcall* gluQuadricOrientation)(...) = (void (__stdcall*)(...))&"gluQuadricOrientation";
//void (__stdcall* gluQuadricTexture)(...) = (void (__stdcall*)(...))&"gluQuadricTexture";
//void (__stdcall* gluCylinder)(...) = (void (__stdcall*)(...))&"gluCylinder";
//void (__stdcall* gluSphere)(...) = (void (__stdcall*)(...))&"gluSphere";
void (__stdcall* gluPerspective)(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) = (void (__stdcall*)(GLdouble, GLdouble, GLdouble, GLdouble))&"gluPerspective";
GLUquadricObj* (__stdcall* gluNewQuadric)() = (GLUquadricObj* (__stdcall*)())&"gluNewQuadric";
void (__stdcall* gluDeleteQuadric)(GLUquadricObj *state) = (void (__stdcall*)(GLUquadricObj*))&"gluDeleteQuadric";
void (__stdcall* gluQuadricDrawStyle)(GLUquadricObj *quadObject, GLenum drawStyle) = (void (__stdcall*)(GLUquadricObj*, GLenum))&"gluQuadricDrawStyle";
void (__stdcall* gluQuadricOrientation)(GLUquadricObj *quadObject, GLenum orientation) = (void (__stdcall*)(GLUquadricObj*, GLenum))&"gluQuadricOrientation";
void (__stdcall* gluQuadricTexture)(GLUquadricObj *quadObject, GLboolean textureCoords) = (void (__stdcall*)(GLUquadricObj*, GLboolean))&"gluQuadricTexture";
void (__stdcall* gluCylinder)(GLUquadricObj *qobj,
GLdouble baseRadius, GLdouble topRadius, GLdouble height, GLint slices, GLint stacks) = (void (__stdcall*)(GLUquadricObj*, GLdouble, GLdouble, GLdouble, GLint, GLint))&"gluCylinder";
void (__stdcall* gluDisk)(GLUquadricObj *qobj,
GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops) = (void (__stdcall*)(GLUquadricObj*, GLdouble, GLdouble, GLint, GLint))&"gluDisk";
void (__stdcall* gluSphere)(GLUquadricObj *qobj,
GLdouble radius, GLint slices, GLint stacks) = (void (__stdcall*)(GLUquadricObj*, GLdouble, GLint, GLint))&"gluSphere";
void (__stdcall* kosglMakeCurrent)(long l, long t, long w, long h, TinyGLContext*) = (void (__stdcall*)(long, long, long, long, TinyGLContext*))&"kosglMakeCurrent";
void (__stdcall* kosglSwapBuffers)() = (void (__stdcall*)())&"kosglSwapBuffers";
asm{

View File

@@ -13,12 +13,12 @@ rem
set __value=
set __res=
shift
:__allowed
set __values=%1 %__values%
shift
if not "%1"=="" goto __allowed
set /P __res=">
:Check_Value
for %%a in (%__values%) do if %%a==%__res% set __value=%__res%
@@ -56,25 +56,25 @@ for %%i in (%BIN% %BIN%\demos %BIN%\develop %BIN%\lib %BIN%\games %BIN%\network
echo *
echo Building system
echo *
fasm system\calendar\trunk\calendar.asm %BIN%\calendar
fasm system\board\trunk\board.asm %BIN%\develop\board
fasm system\calendar\calendar.asm %BIN%\calendar
fasm system\board\board.asm %BIN%\develop\board
fasm system\commouse\trunk\commouse.asm %BIN%\commouse
fasm system\cpu\trunk\cpu.asm %BIN%\cpu
fasm system\cpu\cpu.asm %BIN%\cpu
fasm system\cpuid\trunk\cpuid.asm %BIN%\cpuid
fasm system\skincfg\trunk\skincfg.asm %BIN%\skincfg
fasm system\docpack\trunk\docpack.asm %BIN%\docpack
fasm system\docpack\docpack.asm %BIN%\docpack
fasm system\end\trunk\end.asm %BIN%\end
fasm system\gmon\gmon.asm %BIN%\gmon
fasm system\icon\trunk\icon.asm %BIN%\icon
fasm system\icon\icon.asm %BIN%\icon
fasm system\kbd\trunk\kbd.ASM %BIN%\kbd
fasm system\launcher\trunk\launcher.asm %BIN%\launcher
fasm system\menu\trunk\menu.asm %BIN%\@menu
fasm system\launcher\launcher.asm %BIN%\launcher
fasm system\menu\menu.asm %BIN%\@menu
fasm system\mgb\trunk\mgb.asm %BIN%\mgb
fasm system\mousemul\trunk\mousemul.asm %BIN%\mousemul
fasm system\mousemul\mousemul.asm %BIN%\mousemul
fasm system\PANEL\trunk\@TASKBAR.ASM %BIN%\@TASKBAR
fasm system\pcidev\trunk\pcidev.asm %BIN%\pcidev
fasm system\RB\trunk\@RB.ASM %BIN%\@RB
fasm system\rdsave\trunk\rdsave.asm %BIN%\rdsave
fasm system\rdsave\rdsave.asm %BIN%\rdsave
fasm system\run\trunk\run.asm %BIN%\run
fasm system\setup\trunk\setup.asm %BIN%\setup
fasm system\skinsel\skinsel.asm %BIN%\skinsel
@@ -154,16 +154,16 @@ echo *
echo Building other
echo *
rem fasm other\archer\trunk\@rcher.asm %BIN%\@rcher
fasm other\calc\trunk\calc.asm %BIN%\calc
fasm other\calc\calc.asm %BIN%\calc
fasm other\mhc\trunk\mhc.asm %BIN%\mhc
fasm other\period\trunk\period.asm %BIN%\period
fasm other\rtfread\trunk\rtfread.asm %BIN%\rtfread
fasm other\period\period.asm %BIN%\period
fasm other\rtfread\rtfread.asm %BIN%\rtfread
echo *
echo Building media
echo *
rem media\ac97snd\trunk\ac97snd.asm ac97snd
fasm media\animage\trunk\animage.asm %BIN%\animage
fasm media\animage\animage.asm %BIN%\animage
fasm media\cdp\trunk\cdp.asm %BIN%\cdp
fasm media\gifview\trunk\gifview.asm %BIN%\gifview
fasm media\iconedit\trunk\iconedit.asm %BIN%\iconedit
@@ -231,38 +231,38 @@ echo *
echo Building depend application for fdd's nightbuild
echo *
echo __nightbuild fix yes >> config.inc
fasm media\kiv\trunk\kiv.asm %BIN%\nightbuild\kiv
fasm media\kiv\kiv.asm %BIN%\nightbuild\kiv
fasm media\scrshoot\scrshoot.asm %BIN%\nightbuild\scrshoot
fasm media\animage\trunk\animage.asm %BIN%\nightbuild\animage
fasm media\animage\animage.asm %BIN%\nightbuild\animage
fasm media\midamp\trunk\midamp.asm %BIN%\nightbuild\midamp
fasm develop\heed\trunk\heed.asm %BIN%\nightbuild\heed
fasm develop\tinypad\trunk\tinypad.asm %BIN%\nightbuild\tinypad
fasm system\skincfg\trunk\skincfg.asm %BIN%\nightbuild\skincfg
fasm system\hdd_info\trunk\hdd_info.asm %BIN%\nightbuild\hdd_info
fasm system\hdd_info\hdd_info.asm %BIN%\nightbuild\hdd_info
fasm system\mgb\trunk\mgb.asm %BIN%\nightbuild\mgb
fasm system\rdsave\trunk\rdsave.asm %BIN%\nightbuild\rdsave
fasm system\rdsave\rdsave.asm %BIN%\nightbuild\rdsave
fasm other\kpack\trunk\kpack.asm %BIN%\nightbuild\kpack
fasm other\rtfread\trunk\rtfread.asm %BIN%\nightbuild\rtfread
fasm other\rtfread\rtfread.asm %BIN%\nightbuild\rtfread
;restore
echo __CPU_type fix %res% > config.inc
erase lang.inc
echo *
echo Finished building
echo Finished building
echo *
kpack /nologo 2> nul
if "%errorlevel%"=="9009" (
echo *** NOTICE ***
echo If you want to pack all applications you may
echo If you want to pack all applications you may
echo place "kpack" in accessible directory.
echo You can download that tool from http://diamondz.land.ru/
goto END
)
echo Kpack KolibriOS apps?
echo
echo
set /P res=[y/n]?
@@ -273,7 +273,7 @@ echo Compressing system
echo *
kpack %BIN%\calendar
kpack %BIN%\develop\board
kpack %BIN%\cpu
kpack %BIN%\cpu
kpack %BIN%\cpuid
kpack %BIN%\skincfg
kpack %BIN%\docpack

View File

@@ -85,6 +85,7 @@ struct TWebBrowser {
void tag_table();
void tag_td();
void tag_tr();
void reset_font_style();
};
#include "TWB\render.h"
@@ -94,16 +95,16 @@ void TWebBrowser::SetPageDefaults()
{
t_html = t_body = link = false;
style.reset();
reset_font_style();
link_color_default = 0x0000FF;
link_color_active = 0xFF0000;
style.cur_line_h = list.item_h;
links.clear();
anchors.clear();
img_url.drop();
text_colors.drop();
text_colors.add(0);
if (secondrun) {
canvas.Init(list.x, list.y, list.w, math.max(list.visible, list.count));
canvas.Init(list.x, list.y, list.w, math.max(list.visible, list.count)+200);
canvas.Fill(0, bg_colors.get(0));
}
bg_colors.drop();
@@ -114,7 +115,6 @@ void TWebBrowser::SetPageDefaults()
draw_w = list.w - BODY_MARGIN - BODY_MARGIN;
linebuf = 0;
redirect = '\0';
list.SetFont(8, 14, 10011000b);
tag_table_reset();
is_html = true;
if (!strstri(bufpointer, "<body")) {

View File

@@ -49,14 +49,14 @@ void TWebBrowser::RenderLine(dword _line)
pc = text_colors.get_last();
if (link) && (pc == text_colors.get(0)) pc = link_color_default;
canvas.WriteText(draw_x, draw_y, list.font_type, pc, _line, NULL);
if (style.b) canvas.WriteText(draw_x+1, draw_y, list.font_type, pc, _line, NULL);
canvas.WriteText(draw_x, draw_y+1, list.font_type, pc, _line, NULL);
if (style.b) canvas.WriteText(draw_x+1, draw_y+1, list.font_type, pc, _line, NULL);
if (style.s) canvas.DrawBar(draw_x, list.item_h / 2 - zoom + draw_y, pw, zoom, pc);
if (style.u) canvas.DrawBar(draw_x, list.item_h - zoom - zoom + draw_y, pw, zoom, pc);
if (style.u) canvas.DrawBar(draw_x, draw_y + list.font_h, pw, zoom, pc);
if (link) {
if (ESBYTE[_line]==' ') && (ESBYTE[_line+1]==NULL) {} else {
canvas.DrawBar(draw_x, draw_y + list.item_h - calc(zoom*2)-1, pw, zoom, link_color_default);
links.add_text(draw_x, draw_y + list.y, pw, list.item_h - calc(zoom*2)-1, zoom);
canvas.DrawBar(draw_x, draw_y + list.font_h, pw, zoom, link_color_default);
links.add_text(draw_x, draw_y + list.y, pw, list.font_h, zoom);
}
}
_SKIP_DRAW:

View File

@@ -208,9 +208,20 @@ void TWebBrowser::tag_li()
void TWebBrowser::tag_hr()
{
dword hrcol = 0x00777777;
if (tag.get_value_of("color")) hrcol = GetColor(tag.value);
dword hr_width = draw_w-BODY_MARGIN-BODY_MARGIN;
dword hr_size = 1;
if (tag.get_value_of("color")) {
hrcol = GetColor(tag.value);
}
if (tag.get_value_of("width")) && (!strchr(tag.value, '%')) {
hr_width = math.min(hr_width, tag.get_number_of("width"));
}
if (tag.get_number_of("size")) {
hr_size = math.min(500, tag.number);
}
if (draw_x != left_gap) NewLine();
if (secondrun) canvas.DrawBar(5+left_gap, style.cur_line_h / 2 + draw_y - 1, draw_w-10, 1, hrcol);
if (secondrun) canvas.DrawBar(left_gap, style.cur_line_h / 2 + draw_y - 1, hr_width, hr_size, hrcol);
draw_y += hr_size - 3;
draw_x++;
NewLine();
return;
@@ -235,6 +246,12 @@ void TWebBrowser::tag_q()
chrncat(#linebuf, '\"', sizeof(TWebBrowser.linebuf));
}
void TWebBrowser::reset_font_style()
{
list.SetFont(BASIC_CHAR_W, 14, 10011000b);
style.cur_line_h = list.item_h = list.font_h + 5;
}
void TWebBrowser::tag_h1234_caption()
{
if (ESBYTE[#tag.name+1]=='4') {
@@ -250,19 +267,18 @@ void TWebBrowser::tag_h1234_caption()
NewLine();
}
if (tag.is("h1")) {
list.SetFont(BASIC_CHAR_W*2, 14+14, 10011001b);
list.SetFont(BASIC_CHAR_W*2, 14+13, 10011001b);
style.b = true;
} else if (tag.is("h2")) {
list.SetFont(BASIC_CHAR_W*2, 14+14, 10011001b);
list.SetFont(BASIC_CHAR_W*2, 14+13, 10011001b);
} else {
list.SetFont(6*2, 9+7, 10001001b);
list.SetFont(6*2, 9+8, 10001001b);
}
style.cur_line_h = list.item_h = list.font_h + 2;
style.cur_line_h = list.item_h = list.font_h + 3;
} else {
if (tag.is("h1")) style.b = false;
NewLine();
list.SetFont(BASIC_CHAR_W, 14, 10011000b);
style.cur_line_h = list.item_h = BASIC_LINE_H;
reset_font_style();
}
}
}
@@ -270,11 +286,15 @@ void TWebBrowser::tag_h1234_caption()
void TWebBrowser::tag_kosicon()
{
dword imgbuf[44];
dword maxicon;
dword shared_i18 = memopen("ICONS18", NULL, SHM_READ);
maxicon = EDX / 18 / 18 / 4;
if (shared_i18) && (tag.get_number_of("n")) {
if (draw_x + 18 > canvas.bufw) NewLine();
canvas.DrawImage(draw_x, draw_y-2, 18, 18, 18*18*4*tag.number+shared_i18);
draw_x += 22;
if (tag.number < maxicon) {
if (draw_x + 18 > canvas.bufw) NewLine();
canvas.DrawImage(draw_x, draw_y-1, 18, 18, 18*18*4*tag.number+shared_i18);
draw_x += 22;
}
}
}

View File

@@ -571,10 +571,10 @@ void OpenPage(dword _open_URL)
//INTERNAL PAGE
history.add(#new_url);
WB1.custom_encoding = -1;
if (streq(#new_url, URL_SERVICE_HOMEPAGE)) LoadInternalPage(#buildin_page_home, sizeof(buildin_page_home)-1);
else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test)-1);
if (streq(#new_url, URL_SERVICE_HOMEPAGE)) LoadInternalPage(#buildin_page_home, sizeof(buildin_page_home));
else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test));
else if (streq(#new_url, URL_SERVICE_HISTORY)) ShowHistory();
else LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
else LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
} else if (!strncmp(#new_url,"http:",5)) || (!strncmp(#new_url,"https:",6)) {
//WEB PAGE
@@ -589,7 +589,7 @@ void OpenPage(dword _open_URL)
if (!http.transfer) {
history.add(#new_url);
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
}
} else {
//LOCAL PAGE
@@ -712,7 +712,7 @@ void EventSubmitOmnibox()
void LoadInternalPage(dword _bufdata, _in_bufsize){
if (!_bufdata) || (!_in_bufsize) {
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
} else {
WB1.list.first = 0; //scroll page to the top
DrawOmnibox();

View File

@@ -112,4 +112,4 @@ char editbox_icons[] = FROM "res/editbox_icons.raw";
#define DEFAULT_URL URL_SERVICE_HOMEPAGE
char version[]="WebView 3.85";
char version[]="WebView 3.91";

View File

@@ -1,7 +1,7 @@
#ifdef LANG_RUS
#define HISTORY_HEADER "<html><title><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></title><body><b><3E><><EFBFBD><EFBFBD><EFBFBD><E9A5AD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></b><br>"
#define HISTORY_HEADER "<html><title><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></title><body bgcolor=#fff><h3><3E><><EFBFBD><EFBFBD><EFBFBD><E9A5AD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></h3><br>"
#else
#define HISTORY_HEADER "<html><title>History</title><body><b>Visited pages</b><br>"
#define HISTORY_HEADER "<html><title>History</title><body bgcolor=#fff><h3>Visited pages</h3><br>"
#endif
@@ -13,7 +13,7 @@ ShowHistory()
for (i=0; i<history.items.count-1; i++) //if (cache.type.get(i) == PAGE)
{
strcat(history_pointer, "<a href='");
strcat(history_pointer, "<kosicon n=3><a href='");
strcat(history_pointer, history.items.get(i));
strcat(history_pointer, "'>");
strcat(history_pointer, history.items.get(i));

View File

@@ -1,17 +1,49 @@
<html>
<head>
<title>Homepage</title>
</head>
<body><pre>Welcome to WebView a Text-Based Browser.
<html><head><title>New tab</title></head>
<body bgcolor=#fff>
KolibriOS Bookmarks:
1. <a href=//kolibrios.org>Homepage</a>
2. <a href="//builds.kolibrios.org">Night-builds</a>
3. <a href="//ftp.kolibrios.org">FTP Server</a>
<table><tr><td width=20><td width=220><pre>
_____________________
|# : : #|
| : WebView : |
| : for : |
| : KolibriOS : |
| : : |
| :_______________: |
| ____________ |
| | __ | |
| || | | |
\_____||__|________|__|<font color=#DDD>lc</font>
<font bg=#F8F15B>By the way,</font>
<font bg=#F8F15B> web <font bg=#FF5A7E color=#fff> 1.0 <font bg=#47D018> compatable
<font bg=#3CE7FF> </font></font></font></font>
<td>
</pre>
<kosicon n=58><a href=//kolibrios.org>Homepage</a> &nbsp;
<kosicon n=50><a href="//builds.kolibrios.org">Night-builds</a> &nbsp;
<kosicon n=50><a href="//ftp.kolibrios.org">FTP Server</a>
<pre>
By the way,
<font color="#555555">&bull; You can check for browser updates from the main menu.
&bull; To run a web search, type a text in the adress box and press Ctrl+Enter.
&bull; To run a web search, type a text in the adress box and press Ctrl+Enter.
&bull; Pressing F6 moves a text cursor to the omnibox.
&bull; Click on a label in the bottom right corner to change the encoding of a page.
</font>
&bull; You can manually change the encoding of a page by clicking on a label in the bottom right corner.
~+
* +
' |
() .-.,="``"=. - o -
'=/_ \ |
* | '=._ |
\ `=./`, '
. '=.__.=' `=' *
+ +
O * ' .<font color=#DDD>jgs</font>

View File

@@ -1,15 +1,49 @@
<html><head><meta charset="cp-866">
<title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0AD><EFBFBD></title></head>
<body><pre><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E2AEA2> <20><><EFBFBD><EFBFBD> WebView!
<html><head><title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></title></head>
<body bgcolor=#fff>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> KolibriOS:<ol>
<li><a href=//kolibrios.org><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><></a>
<li><a href="//builds.kolibrios.org"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᡮન</a>
<li><a href="//ftp.kolibrios.org">FTP <20><><EFBFBD></a></ol>
<table><tr><td width=20><td width=220><pre>
_____________________
|# : : #|
| : WebView : |
| : for : |
| : KolibriOS : |
| : : |
| :_______________: |
| ____________ |
| | __ | |
| || | | |
\_____||__|________|__|<font color=#DDD>lc</font>
<font bg=#F8F15B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,</font>
<font bg=#F8F15B> web <font bg=#FF5A7E color=#fff> 1.0 <font bg=#47D018> compatable
<font bg=#3CE7FF> </font></font></font></font>
<td>
</pre>
<kosicon n=58><a href=//kolibrios.org><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><></a> &nbsp;
<kosicon n=50><a href="//builds.kolibrios.org"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᡮન</a> &nbsp;
<kosicon n=50><a href="//ftp.kolibrios.org">FTP <20><><EFBFBD></a>
<pre>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<font color="#555555">&bull; <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
&bull; <20><><EFBFBD> <20><><EFBFBD><20> Google <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ctrl+Enter
&bull; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> F6 <20><><EFBFBD><EFBFBD><><EFBFBD><E2AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
&bull; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><E0A0AD><EFBFBD>, <20><><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E0A0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><> <20><><EFBFBD><EFBFBD>.
~+
* +
' |
() .-.,="``"=. - o -
'=/_ \ |
* | '=._ |
\ `=./`, '
. '=.__.=' `=' *
+ +
O * ' .<font color=#DDD>jgs</font>

View File

@@ -5,12 +5,19 @@
<title>Тест Acid 0.1</title>
</head>
<body bgcolor="#000000" link="#0066FF" text="#FFFFFF">
<h1 align=center>Это тестовая страница для проверки WebViewer</h1>
<br />
<p>WebViewer является текстовым браузером и поддерживает все популярные кодировки (cp1251, koi-8, cp866, unicode)
и некоторые теги. Поддержка таблииц (&lt;table&gt;), CSS, Javascript'a и Контактика пока не реализована :)
<h1 align=center>Тест Acid 0.1</h1>
<br>
<b>Это тестовая страница для проверки текстового браузера <s>HTML Viewer</s> WebView</b>
<p>Из кодировок поддерживаются: CP866(DOS), CP1251(Windows), CP1252(Latin legacy), KOI8, и конечно UTF8. CSS и Javascript пока не реализованы (ахахаха). Поддержка тега &lt;table&gt; крайне базовая, поддержки вложенных таблиц нет.
</p>
<br />
<h3>История</h3>
Ранее программа называлась <b >HTMLv (HTML Viewer)</b> и изначально задумывалась как <q>Центр справки и поддержки</q>. Чтобы не изобретать велосипед и одновременно исполнить мечту многих, форматом просматриваемых страниц был выбран html.
Первоначальный автор Veliant, затем разработка была подхвачена дизайнером Leency. Это была моя вторая программа после файлового менеджера Eolite.<br>
<span> <br />
<b>
<font color="#FF0000">K</font>
@@ -33,7 +40,8 @@
</b>
<br>
<p>
<table>
<td>
<bg bgcolor=#333>
Небольшой список:<ol>
<li><q>Этот текст в кавычках</q></li>
@@ -46,17 +54,14 @@
</p>
<br>
<pre>
"Осень уже пришла!"-
Шепнул мне на ухо ветер,
Подкравшись к подушке моей.
Басе
</pre>
<!-- комментарий: этого текста здесь <нет> -->
<br>
<img alt="нет картинки, просто alt">
<img src = http://wiby.org/about/wibyplex.gif>
<a href="http://kolibrios.org/i/logo.png"><img id="2.1.4" src="http://kolibrios.org/i/logo.png" alt="logo"><br>Открыть</a><br>
<br>
@@ -65,10 +70,25 @@
<a href='/sys/index.htm'>Незакрытый тег а - index.htm<br>
<a href="/sys/calc">/sys/calc</a><br>
<a href="#2.1.4">#2.1.4</a><br>
<a href="http://bash.im">http://bash.im</a><br>
<a href="http://kolibrios.org">http://kolibrios.org</a><br>
<a href="mailto:leency@mail.ru">Mail to Leency</a><br>
<br>
<br>
<h1><a href=#>Link H1</a> <u>Underline H1</u></h1>
<h2><a href=#>Link H2</a> <u>Underline H2</u></h2>
<h3><a href=#>Link H3</a> <u>Underline H2</u></h3>
<a href=#>Link</a> <u>Underline</u>
<td>
<pre>
"Осень уже пришла!"-
Шепнул мне на ухо ветер,
Подкравшись к подушке моей.
Басе
</pre><br>
В этом тексте есть переход на следующую строку, но браузер
его должен проигнорировать. Еще много пробелов. А тут есть
@@ -80,8 +100,19 @@
&#1082;&#1086;&#1088;&#1087;&#1091;&#1089; &#1085;&#1072; &#1090;&#1077;&#1088;&#1088;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080; &#1053;&#1058;&#1059; «&#1061;&#1055;&#1048;»
</p>
<pre><font color="#000">
<font bg=#FFED00 style="background-color:#FFED00"> Заметки </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> Речка на Жукова </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> Heroes 3 </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> Рисостерон, куринабол </font>
<font bg=#FFFBCE style="background-color:#FFFBCE"> </font>
</font></pre>
</table>
<hr color="#758999">
<center>Zhitomyr 2008-2015</center>
<center>Zhytomyr 2008-2025</center>
</body>

View File

@@ -0,0 +1,2 @@
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("flag.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "flag")

View File

@@ -0,0 +1,306 @@
; SPDX-License-Identifier: GPL-2.0-only
; Flag - demo program shows a flag with the inscription 'KolibriOS'
; Copyright (C) 2025 KolibriOS team
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../proc32.inc'
include '../../macros.inc'
include '../../KOSfuncs.inc'
include '../../load_lib.mac'
include '../../dll.inc'
include '../../develop/libraries/TinyGL/asm_fork/kosgl.inc'
include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc'
include '../../develop/libraries/TinyGL/asm_fork/examples/fps.inc'
@use_library
align 4
start:
load_library name_tgl, library_path, system_path, import_tinygl
cmp eax,SF_TERMINATE_PROCESS
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
; *** init ***
stdcall [kosglMakeCurrent], 0,15,600,380,ctx1
stdcall [glMatrixMode], GL_MODELVIEW
call [glLoadIdentity]
stdcall [glClearColor], 0.549, 0.549, 0.588, 1.0
stdcall [glEnable], GL_LIGHTING
stdcall [glLightf], GL_LIGHT0, GL_SPOT_EXPONENT, 0.0
stdcall [glLightf], GL_LIGHT0, GL_SPOT_CUTOFF, 180.0
stdcall [glEnable], GL_LIGHT0
stdcall [glLightfv], GL_LIGHT0, GL_POSITION, lightpos
stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, lightdirect
stdcall [glEnable], GL_COLOR_MATERIAL
glpush p3
stdcall [glClearDepth]
stdcall [glEnable], GL_CULL_FACE
stdcall [glEnable], GL_DEPTH_TEST
fninit
stdcall reshape, 600,380
; *** end init ***
align 4
red_win:
call draw_window
mcall SF_THREAD_INFO, procinfo,-1
mov eax,dword[procinfo.box.height]
cmp eax,120
jge @f
mov eax,120 ;min size
@@:
sub eax,43
mov ebx,dword[procinfo.box.width]
cmp ebx,200
jge @f
mov ebx,200
@@:
sub ebx,10
stdcall reshape, ebx,eax
align 16
still:
call draw_3d
cmp dword[stop],1
je @f
stdcall Fps, 365,4
mov dword[esp-4],eax
fild dword[esp-4]
fmul dword[delt_3]
fchs
fadd dword[dangle]
fstp dword[dangle] ;dangle -= 0.01*Fps(x,y)
mcall SF_WAIT_EVENT_TIMEOUT, 1
jmp .end0
align 4
@@:
mcall SF_WAIT_EVENT
.end0:
cmp al, EV_REDRAW
jz red_win
cmp al, EV_KEY
jz key
cmp al, EV_BUTTON
jz button
jmp still
; new window size or exposure
align 4
proc reshape, width:dword, height:dword
locals
dxy dq ?
endl
stdcall [glViewport], 0, 0, [width], [height]
stdcall [glMatrixMode], GL_PROJECTION
call [glLoadIdentity]
fild dword[width]
fidiv dword[height]
fstp qword[dxy] ;dxy = width/height
glpush p4
glpush p3
glpush dxy
glpush p1
call [gluPerspective] ;28.0, width/height, 1.0, 40.0
stdcall [glMatrixMode], GL_MODELVIEW
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
ret
endp
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW, (50 shl 16)+609,(30 shl 16)+425,0x33404040,,title1
call [kosglSwapBuffers]
;Title
mcall SF_DRAW_TEXT, (338 shl 16)+4, 0xc0c0c0, fps, fps.end-fps
mcall SF_DRAW_TEXT, (8 shl 16)+4, 0xc0c0c0, title2, title2.end-title2
mcall SF_REDRAW,SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
cmp ah,112 ;P
jne @f
xor dword[stop],1
jmp still
@@:
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
mcall SF_TERMINATE_PROCESS
align 4
title1: db 'TinyGL in KolibriOS'
.end: db 0
title2: db 'ESC - exit, P - pause'
.end: db 0
fps: db 'FPS:'
.end: db 0
align 16
proc draw_3d uses ebx ecx edx esi edi
locals
z dd ?
endl
call [glLoadIdentity]
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
stdcall [glTranslatef], 0.0, 0.0, -2.0
stdcall [glRotatef], 10.0, 0.0, 0.0, 1.0
stdcall [glRotatef], 43.0, 0.0, 1.0, 0.0
stdcall [glTranslatef], -0.6, -0.2, -0.1
mov edi, logo+9*41 ;edi = logo[9][0]
mov esi, 41 ;esi = i
align 4
.cycle0: ;for(int i=0;i<41;i++)
stdcall [glTranslatef], 0.045, 0.0, 0.0
call [glPushMatrix]
fld dword[angle]
fsin
fmul dword[delt_1]
fstp dword[z] ;= 0.08*sin(angle)
fld dword[angle]
fadd dword[delt_2]
fstp dword[angle] ;angle += 0.2
mov ecx, 9
mov ebx, edi
; ecx = j
.cycle1: ;for(int j=9;j>=0;j--)
cmp byte[ebx],0 ;if(logo[j][i])
je @f
push 0.0 ;b
push 0.0 ;g
push 1.0 ;r
jmp .end_c2
@@:
push 0.945 ;b
push 0.855 ;g
push 0.859 ;r
.end_c2:
call [glColor3f]
stdcall [glTranslatef], 0.0, 0.045, 0.0
stdcall [glBegin], GL_QUADS
stdcall [glVertex3f], 0.0, -0.04,[z]
stdcall [glVertex3f], 0.04,-0.04,[z]
stdcall [glVertex3f], 0.04, 0.0, [z]
stdcall [glVertex3f], 0.0, 0.0, [z]
call [glEnd]
add ebx, -41
dec ecx
jnz .cycle1
call [glPopMatrix]
inc edi ;edi = logo[9][i]
dec esi
jnz .cycle0
mov edx,dword[dangle]
mov dword[angle],edx
call [kosglSwapBuffers]
ret
endp
align 4
p1 dq 28.0
p3 dq 1.0
p4 dq 40.0
delt_1 dd 0.08
delt_2 dd 0.2
delt_3 dd 0.01
lightpos dd 2.0, 0.0, -2.5, 1.0
lightdirect dd 0.0, 0.0, -0.7
angle dd 0.0
dangle dd 0.0
stop dd 0
;[10][41]
logo db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,\
0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,\
0,0,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,\
0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,\
0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,\
0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;--------------------------------------------------
align 4
import_tinygl:
macro E_LIB n
{
if defined sz_#n
n dd sz_#n
end if
}
include '../../develop/libraries/TinyGL/asm_fork/export.inc'
dd 0,0
macro E_LIB n
{
if used n
sz_#n db `n,0
end if
}
include '../../develop/libraries/TinyGL/asm_fork/export.inc'
;--------------------------------------------------
system_path db '/sys/lib/'
name_tgl db 'tinygl.obj',0
;--------------------------------------------------
align 16
i_end:
ctx1 TinyGLContext
procinfo process_information
cur_dir_path rb 4096
library_path rb 4096
rb 4096
stacktop:
mem:

View File

@@ -1,7 +0,0 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
tup.rule({"magnify.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "magnify")

View File

@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm magnify.asm magnify
@kpack magnify
@erase lang.inc
@pause

View File

@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm magnify.asm magnify
@kpack magnify
@erase lang.inc
@pause

View File

@@ -1,156 +0,0 @@
;---------------------------------------------------------------------
; MAGNIFY SCREEN v1.0
;
; Version for KolibriOS 2005-2011
;
; Version for Menuet to 2005
;---------------------------------------------------------------------
; last update: 08/18/2011
; changed by: Marat Zakiyanov aka Mario79, aka Mario
; changes: Checking for "rolled up" window
;---------------------------------------------------------------------
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 1 ; header version
dd START ; program start
dd I_END ; program image size
dd 0x1000 ; required amount of memory
dd 0x1000 ; esp
dd 0, 0 ; no parameters, no path
;---------------------------------------------------------------------
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include '..\..\..\macros.inc'
delay equ 20
magnify_width = 40
magnify_height = 30
;---------------------------------------------------------------------
START: ; start of execution
redraw:
call draw_window
still:
call draw_magnify
wtevent:
mcall 23,delay ; wait here for event with timeout
dec eax
js still
jz redraw
dec eax
jnz button
; key in buffer
mov al, 2
mcall
jmp wtevent
;---------------------------------------------------------------------
button:
; we have only one button, close
or eax, -1
mcall
;---------------------------------------------------------------------
; ******* WINDOW DEFINITIONS AND DRAW ********
;---------------------------------------------------------------------
draw_window:
mcall 12,1
mov al, 48 ; function 48 : graphics parameters
mov bl, 4 ; subfunction 4 : get skin height
mcall
; DRAW WINDOW
mov ebx, 100*65536 + 8*magnify_width + 8
lea ecx, [eax + 100*65536 + 8*magnify_height + 3]
mov edx, 0x34000000 ; color of work area RRGGBB
mov edi, labelt ; header
xor eax, eax ; function 0 : define and draw window
mcall
mcall 12,2
ret
;---------------------------------------------------------------------
draw_magnify:
mcall 9,procinfo,-1
mov eax,[procinfo+70] ;status of window
test eax,100b
jne .end
mcall 14 ; get screen size
movzx ecx, ax
inc ecx
mov [size_y], ecx
shr eax, 16
inc eax
mov [size_x], eax
xor ebx, ebx
mcall 37 ; get mouse coordinates
mov ecx, eax
shr ecx, 16 ; ecx = x
movzx edx, ax ; edx = y
inc ecx
mov [m_xe], ecx
inc edx
mov [m_ye], edx
sub ecx, magnify_width
sub edx, magnify_height
mov [m_x], ecx
mov [m_y], edx
.loop_y:
.loop_x:
xor eax, eax ; assume black color for invalid pixels
test ecx, ecx
js .nopix
cmp ecx, [size_x]
jge .nopix
test edx, edx
js .nopix
cmp edx, [size_y]
jge .nopix
mov ebx, edx
imul ebx, [size_x]
add ebx, ecx
mcall 35 ; read pixel
.nopix:
push ecx edx
sub ecx, [m_x]
sub edx, [m_y]
mov ebx, ecx
shl ebx, 3+16
mov bl, 8
mov ecx, edx
shl ecx, 3+16
mov cl, 8
mov edx, eax
mcall 13
pop edx ecx
inc ecx
cmp ecx, [m_xe]
jnz .loop_x
mov ecx, [m_x]
inc edx
cmp edx, [m_ye]
jnz .loop_y
.end:
ret
;---------------------------------------------------------------------
; DATA AREA
;---------------------------------------------------------------------
if lang eq ru_RU
labelt:
db 'Magnifier - <20><><EFBFBD><E0A0AD><EFBFBD> <20>㯠', 0
else ; Default to en_US
labelt:
db 'Magnifier', 0
end if
I_END:
align 4
m_x dd ?
m_y dd ?
m_xe dd ?
m_ye dd ?
size_x dd ?
size_y dd ?
;---------------------------------------------------------------------
procinfo:
rb 1024
;---------------------------------------------------------------------

Binary file not shown.

View File

@@ -28,7 +28,7 @@ IMPORT
RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar;
CONST
HEADER = "CEdit (27-feb-2025)";
HEADER = "CEdit (30-apr-2025)";
ShellFilter = "";
EditFilter = "sh|inc|txt|asm|ob07|c|cpp|h|pas|pp|lua|ini|json";
@@ -1320,7 +1320,7 @@ BEGIN
|menuBoard:
K.Run("/sys/develop/board", "")
|menuSysFunc:
K.Run("/sys/docpack", "f")
K.Run("/sys/docpack", "e")
|menuLineNumbers:
T.toggleNumbers;
Ini.setInt("settings", "line_numbers", ORD(T.lineNumbers))

View File

@@ -1,2 +1,4 @@
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("charsets.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "charsets")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
tup.rule("charsets.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "%B")

View File

@@ -31,3 +31,19 @@ Development history
- Renamed to Charsets Viewer/Charsets
- Symbol highlight UI tweaks
- Fixed rolled up bug
30.03.2025 - 0.4.0
- Localization for all system languages
- Display all character scales
- Abolity to copy character codes
- Block on charpage 00 for CP866
- New character code half markers
- Navigation using keys (see hotkeys.txt)
03.04.2025 - 0.4.1
- Fixed bug with codes color subscription
04.04.2025 - 0.4.2
- Fixed bug with resetting UTF charpage to zero on double charset swap to CP866
- Improved charpage blocking for CP866 UX
- Improved char codes copying UI

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
Control hotkeys
- Navigate inside charpage:
- Arrows
- Num2/4/6/8
- Navigation between charpages:
- PgDN, PgUP - previous/next page
- Num0, Home - reset page to zero
- Change symbol scale:
- Num- and Num+

View File

@@ -12,6 +12,7 @@ include '../../develop/libraries/libs-dev/libimg/libimg.inc'
include '../../load_img.inc'
include '../../load_lib.mac'
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../develop/libraries/TinyGL/asm_fork/kosgl.inc'
include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include 'info_fun_float.inc'
@@ -235,7 +236,7 @@ start:
call [gluNewQuadric]
mov [qObj],eax
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax
@@ -1082,7 +1083,7 @@ l_libs_start:
lib_2 l_libs lib_name_2, file_name, system_dir_2, import_box_lib
lib_3 l_libs lib_name_3, file_name, system_dir_3, import_buf2d
lib_4 l_libs lib_name_4, file_name, system_dir_4, import_libkmenu
lib_5 l_libs lib_name_5, file_name, system_dir_5, import_lib_tinygl
lib_5 l_libs lib_name_5, file_name, system_dir_5, import_tinygl
lib_6 l_libs lib_name_6, file_name, system_dir_6, import_libini
l_libs_end:
@@ -1287,16 +1288,20 @@ dd 0,0
akmenuitem_draw db 'kmenuitem_draw',0
align 4
import_lib_tinygl:
import_tinygl:
macro E_LIB n
{
if defined sz_#n
n dd sz_#n
end if
}
include '../../develop/libraries/TinyGL/asm_fork/export.inc'
dd 0,0
macro E_LIB n
{
if used n
sz_#n db `n,0
end if
}
include '../../develop/libraries/TinyGL/asm_fork/export.inc'
@@ -1343,7 +1348,7 @@ buf_1:
align 4
el_focus dd tree1
tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\
16,16, 0xffffff,0xb0d0ff,0x400040, 5,35,195-16,250, 16,list_offs_text,0,\
16,16, 0xffffff,0xb0d0ff,0x10400040, 5,35,195-16,250, 16,list_offs_text,0,\
el_focus,w_scr_t1,0
align 4
@@ -1362,14 +1367,14 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ;
lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD><><E4AEAD><EFBFBD><EFBFBD><EFBFBD> <20>ᢥ饭<E1A2A5><E9A5AD>
if lang eq ru_RU
capt db 'info 3ds <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 29.09.20',0 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
capt db 'info 3ds <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 04.05.25',0 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
else ; Default to en_US
capt db 'info 3ds version 29.09.20',0 ;window caption
capt db 'info 3ds version 04.05.25',0 ;window caption
end if
align 16
i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28
ctx1 TinyGLContext
procinfo process_information
run_file_70 FileInfoBlock
sc system_colors

View File

@@ -1408,7 +1408,7 @@ buf_1:
align 4
el_focus dd tree1
tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\
16,16, 0xffffff,0xb0d0ff,0x400040, 5,47,195-16,250, 16,list_offs_text,0, el_focus,\
16,16, 0xffffff,0xb0d0ff,0x10400040, 5,47,195-16,250, 16,list_offs_text,0, el_focus,\
w_scr_t1,0
align 4
@@ -1427,9 +1427,9 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ;
lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD><><E4AEAD><EFBFBD><EFBFBD><EFBFBD> <20>ᢥ饭<E1A2A5><E9A5AD>
if lang eq ru_RU
capt db 'info 3ds [user] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 29.09.20',0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
capt db 'info 3ds [user] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 14.04.25',0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
else ; Default to en_US
capt db 'info 3ds [user] version 29.09.20',0 ; Window caption
capt db 'info 3ds [user] version 14.04.25',0 ; Window caption
end if
align 16

View File

@@ -306,7 +306,7 @@ align 4
faddp
fild dword[rad_c]
fdivp ;radius=(size.x+size.y)/rad_c
fstp dword[sph_radius]
fstp qword[sph_radius]
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> x <EFBFBD> y, <EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fld dword[edi+obj_3d.y_scale]
@@ -812,9 +812,8 @@ proc draw_3d uses eax ebx ecx edi, o_data:dword
@@:
stdcall [glDisable],GL_LIGHTING
.end_l:
stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
stdcall [glScalef], [edi+obj_3d.x_scale],[edi+obj_3d.y_scale],[edi+obj_3d.z_scale]
stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
stdcall [glScalef], 1.0,1.0,1.4 ;correct for z
stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
@@ -976,7 +975,10 @@ if version_edit eq 1
stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
call [glPushMatrix]
stdcall [glTranslatef], [eax],[eax+4],[eax+8]
stdcall [gluSphere], [qObj], [sph_radius], 8,8
push 8
push 8
glpush sph_radius
stdcall [gluSphere], [qObj]
call [glPopMatrix]
@@:
@@ -997,7 +999,10 @@ align 4
mov eax,[eax]
call [glPushMatrix]
stdcall [glTranslatef], [eax],[eax+4],[eax+8]
stdcall [gluSphere], [qObj], [sph_radius], 4,4
push 4
push 4
glpush sph_radius
stdcall [gluSphere], [qObj]
call [glPopMatrix]
dec ecx
jz .end_select
@@ -1345,5 +1350,5 @@ delt_size dd 3.0 ;
mouse_drag dd 0 ;<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mouse_x dd 0
mouse_y dd 0
sph_radius dd 0 ;<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>
sph_radius dq 0 ;radius of the sphere for selecting the active point

View File

@@ -951,13 +951,12 @@ endl
endp
align 4
proc glClearDepth uses eax, depth:dword
proc glClearDepth uses eax, depth:qword
locals
p rd 2
endl
mov dword[p],OP_ClearDepth
mov eax,[depth]
fld qword[eax]
fld qword[depth]
fstp dword[p+4]
lea eax,[ebp-8] ;=sizeof(dd)*2

View File

@@ -23,8 +23,7 @@ endl
imul ecx,ebx
shl ecx,2
add ecx,[eax+GLContext.color_array] ;ecx = &context.color_array[i]
mov ebx,ebp
sub ebx,20 ;=sizeof(dd)*5
lea ebx,[ebp-20] ;=sizeof(dd)*5
mov edx,[ecx]
mov [ebx+4],edx
mov edx,[ecx+4]
@@ -48,8 +47,7 @@ endl
imul esi,ebx
shl esi,2
add esi,[eax+GLContext.normal_array] ;esi = &normal_array[ebx * (3 + c->normal_array_stride)]
mov edi,eax
add edi,GLContext.current_normal
lea edi,[eax+GLContext.current_normal]
mov ecx,3
rep movsd
mov dword[edi],0.0
@@ -92,8 +90,7 @@ endl
imul ecx,ebx
shl ecx,2
add ecx,[eax+GLContext.vertex_array] ;ecx = &context.vertex_array[i]
mov ebx,ebp
sub ebx,20 ;=sizeof(dd)*5
lea ebx,[ebp-20] ;=sizeof(dd)*5
mov edx,[ecx]
mov [ebx+4],edx
mov edx,[ecx+4]
@@ -130,8 +127,7 @@ endl
mov eax,[i]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
lea eax,[ebp-8] ;=sizeof(dd)*2
stdcall gl_add_op,eax
ret
endp
@@ -139,10 +135,9 @@ endp
align 4
proc glopDrawArrays, context:dword, param:dword
locals
vi dd ?
idx dd ?
states dd ?
size dd ?
a_size dd ?
p rd 8 ;функция glopColor требует 8 параметров, другие функции требуют меньше, берем по максимуму что-бы не портить стек
endl
pushad
@@ -155,132 +150,19 @@ pushad
mov [idx],eax ;param[2].i
mov eax,[ebx+4]
mov [p+4],eax ;p[1].i = param[1].i
mov eax,ebp
sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall glopBegin, edx,eax
mov dword[vi],0
cmp ecx,1
jl @f
align 4
.cycle_0: ;for (int vi=0; vi<count; vi++)
cmp dword[vi],ecx
jge .cycle_0_end
bt dword[states],1 ;2^1=COLOR_ARRAY
jnc @f
mov esi,[edx+GLContext.color_array_size]
mov [size],esi
add esi,[edx+GLContext.color_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.color_array] ;esi = &context.color_array[i]
mov edi,ebp
sub edi,28 ;edi = &p[1]
mov ebx,[esi+8]
mov [edi],ebx ;p[1].f = context.color_array[i+2]
mov ebx,[esi+4]
mov [edi+4],ebx ;p[2].f = context.color_array[i+1]
mov ebx,[esi]
mov [edi+8],ebx ;p[3].f = context.color_array[i]
add edi,12
cmp dword[size],3
jle .e1
add esi,12
movsd
jmp .e2
.e1:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
.e2:
mov edi,ebp
sub edi,32 ;edi = &p[0]
mov ebx,ebp
sub ebx,12 ;ebp-12 = &p[5]
push ebx
add ebx,4 ;ebp-8 = &p[6]
push ebx
add ebx,4 ;ebp-4 = &p[7]
push ebx
stdcall RGBFtoRGBI,[edi+12],[edi+8],[edi+4] ;call: r,g,b,&p[7],&p[6],&p[5]
stdcall glopColor, edx,edi ;(context, p(op,rf,gf,bf,af,ri,gi,bi))
@@:
bt dword[states],2 ;2^2=NORMAL_ARRAY
jnc @f
mov esi,[edx+GLContext.normal_array_stride]
add esi,3
imul esi,[idx]
shl esi,2
add esi,[edx+GLContext.normal_array] ;esi = &context.normal_array[ idx * (3 + context.normal_array_stride) ]
mov edi,edx
add edi,GLContext.current_normal
movsd ;context.current_normal.X = context.normal_array[i]
movsd
movsd
mov dword[edi],0.0 ;context.current_normal.W = 0.0f
@@:
bt dword[states],3 ;2^3=TEXCOORD_ARRAY
jnc @f
mov esi,[edx+GLContext.texcoord_array_size]
mov [size],esi
add esi,[edx+GLContext.texcoord_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.texcoord_array] ;esi = &context.texcoord_array[i]
mov edi,edx
add edi,GLContext.current_tex_coord
movsd ;context.current_tex_coord.X = ccontext.texcoord_array[i]
movsd
cmp dword[size],2
jle .e3
movsd
jmp .e4
.e3:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
.e4:
cmp dword[size],3
jle .e5
movsd
jmp @f
.e5:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
@@:
bt dword[states],0 ;2^0=VERTEX_ARRAY
jnc @f
mov esi,[edx+GLContext.vertex_array_size]
mov [size],esi
add esi,[edx+GLContext.vertex_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.vertex_array] ;esi = &context.vertex_array[i]
mov edi,ebp
sub edi,28 ;edi = &p[1]
movsd ;p[1].f = context.vertex_array[i]
movsd
cmp dword[size],2
jle .e6
movsd
jmp .e7
.e6:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
jmp .e8 ;и 4-й тоже ставим по умолчанию
.e7:
cmp dword[size],3
jle .e8
movsd
sub edi,20 ;edi=&p[0]
jmp .e9
.e8:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
sub edi,16 ;edi=&p[0]
.e9:
stdcall glopVertex, edx,edi
@@:
call CopyArrayElementByIndex
inc dword[idx]
inc dword[vi]
jmp .cycle_0
.cycle_0_end:
loop .cycle_0
@@:
;mov eax,ebp
;sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall glopEnd, edx,eax
popad
ret
@@ -299,8 +181,7 @@ endl
mov eax,[count]
mov dword[p+12],eax
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
lea eax,[ebp-16] ;=sizeof(dd)*4
stdcall gl_add_op,eax
ret
endp
@@ -308,12 +189,12 @@ endp
align 4
proc glopDrawElements, context:dword, param:dword
locals
type dd ?
indices dd ? ;указатель на 16 или 32 битные индексы
ii dd ?
idx dd ?
states dd ?
type dd ?
size dd ?
indices dd ? ;указатель на 16 или 32 битные индексы
a_size dd ?
p rd 8
endl
pushad
@@ -328,8 +209,7 @@ pushad
mov [type],eax ;type = param[3].i
mov eax,[ebx+16]
mov [indices],eax ;*indices = param[4].p
mov eax,ebp
sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall glopBegin, edx,eax
mov dword[ii],0
@@ -351,127 +231,133 @@ align 4
.end_0:
mov [idx],esi
bt dword[states],1 ;2^1=COLOR_ARRAY
jnc @f
mov esi,[edx+GLContext.color_array_size]
mov [size],esi
add esi,[edx+GLContext.color_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.color_array] ;esi = &context.color_array[i]
mov edi,ebp
sub edi,28 ;edi = &p[1]
mov ebx,[esi+8]
mov [edi],ebx ;p[1].f = context.color_array[i+2]
mov ebx,[esi+4]
mov [edi+4],ebx ;p[2].f = context.color_array[i+1]
mov ebx,[esi]
mov [edi+8],ebx ;p[3].f = context.color_array[i]
add edi,12
cmp dword[size],3
jle .e1
add esi,12
movsd
jmp .e2
.e1:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
.e2:
mov edi,ebp
sub edi,32 ;edi = &p[0]
mov ebx,ebp
sub ebx,12 ;ebp-12 = &p[5]
push ebx
add ebx,4 ;ebp-8 = &p[6]
push ebx
add ebx,4 ;ebp-4 = &p[7]
push ebx
stdcall RGBFtoRGBI,[edi+12],[edi+8],[edi+4] ;call: r,g,b,&p[7],&p[6],&p[5]
stdcall glopColor, edx,edi ;(context, p(op,rf,gf,bf,af,ri,gi,bi))
@@:
bt dword[states],2 ;2^2=NORMAL_ARRAY
jnc @f
mov esi,[edx+GLContext.normal_array_stride]
add esi,3
imul esi,[idx] ;esi = idx * (3 + context.normal_array_stride)
shl esi,2
add esi,[edx+GLContext.normal_array]
mov edi,edx
add edi,GLContext.current_normal
movsd ;context.current_normal.X = context.normal_array[i]
movsd
movsd
mov dword[edi],0.0 ;context.current_normal.W = 0.0f
@@:
bt dword[states],3 ;2^3=TEXCOORD_ARRAY
jnc @f
mov esi,[edx+GLContext.texcoord_array_size]
mov [size],esi
add esi,[edx+GLContext.texcoord_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.texcoord_array] ;esi = &context.texcoord_array[i]
mov edi,edx
add edi,GLContext.current_tex_coord
movsd ;context.current_tex_coord.X = ccontext.texcoord_array[i]
movsd
cmp dword[size],2
jle .e3
movsd
jmp .e4
.e3:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
.e4:
cmp dword[size],3
jle .e5
movsd
jmp @f
.e5:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
@@:
bt dword[states],0 ;2^0=VERTEX_ARRAY
jnc @f
mov esi,[edx+GLContext.vertex_array_size]
mov [size],esi
add esi,[edx+GLContext.vertex_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.vertex_array] ;esi = &context.vertex_array[i]
mov edi,ebp
sub edi,28 ;edi = &p[1]
movsd ;p[1].f = context.vertex_array[i]
movsd
cmp dword[size],2
jle .e6
movsd
jmp .e7
.e6:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
jmp .e8 ;и 4-й тоже ставим по умолчанию
.e7:
cmp dword[size],3
jle .e8
movsd
sub edi,20 ;edi=&p[0]
jmp .e9
.e8:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
sub edi,16 ;edi=&p[0]
.e9:
stdcall glopVertex, edx,edi
@@:
call CopyArrayElementByIndex
inc dword[ii]
jmp .cycle_0
.cycle_0_end:
mov eax,ebp
sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall glopEnd, edx,eax
popad
ret
endp
;input:
; edx - GLContext
idx equ ebp-44
states equ ebp-40
a_size equ ebp-36
align 4
CopyArrayElementByIndex:
bt dword[states],1 ;2^1=COLOR_ARRAY
jnc @f
mov esi,[edx+GLContext.color_array_size]
mov [a_size],esi
add esi,[edx+GLContext.color_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.color_array] ;esi = &context.color_array[i]
lea edi,[ebp-28] ;edi = &p[1]
mov ebx,[esi+8]
mov [edi],ebx ;p[1].f = context.color_array[i+2]
mov ebx,[esi+4]
mov [edi+4],ebx ;p[2].f = context.color_array[i+1]
mov ebx,[esi]
mov [edi+8],ebx ;p[3].f = context.color_array[i]
add edi,12
cmp dword[a_size],3
jle .e1
add esi,12
movsd
jmp .e2
.e1:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
.e2:
lea edi,[ebp-32] ;edi = &p[0]
lea ebx,[ebp-12] ;ebp-12 = &p[5]
push ebx
add ebx,4 ;ebp-8 = &p[6]
push ebx
add ebx,4 ;ebp-4 = &p[7]
push ebx
stdcall RGBFtoRGBI,[edi+12],[edi+8],[edi+4] ;call: r,g,b,&p[7],&p[6],&p[5]
stdcall glopColor, edx,edi ;(context, p(op,rf,gf,bf,af,ri,gi,bi))
@@:
bt dword[states],2 ;2^2=NORMAL_ARRAY
jnc @f
mov esi,[edx+GLContext.normal_array_stride]
add esi,3
imul esi,[idx] ;esi = idx * (3 + context.normal_array_stride)
shl esi,2
add esi,[edx+GLContext.normal_array] ;esi = &context.normal_array[ idx * (3 + context.normal_array_stride) ]
lea edi,[edx+GLContext.current_normal]
movsd ;context.current_normal.X = context.normal_array[i]
movsd
movsd
mov dword[edi],0.0 ;context.current_normal.W = 0.0f
@@:
bt dword[states],3 ;2^3=TEXCOORD_ARRAY
jnc @f
mov esi,[edx+GLContext.texcoord_array_size]
mov [a_size],esi
add esi,[edx+GLContext.texcoord_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.texcoord_array] ;esi = &context.texcoord_array[i]
lea edi,[edx+GLContext.current_tex_coord]
movsd ;context.current_tex_coord.X = ccontext.texcoord_array[i]
movsd
cmp dword[a_size],2
jle .e3
movsd
jmp .e4
.e3:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
.e4:
cmp dword[a_size],3
jle .e5
movsd
jmp @f
.e5:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
@@:
bt dword[states],0 ;2^0=VERTEX_ARRAY
jnc @f
mov esi,[edx+GLContext.vertex_array_size]
mov [a_size],esi
add esi,[edx+GLContext.vertex_array_stride]
imul esi,[idx] ;esi = i
shl esi,2
add esi,[edx+GLContext.vertex_array] ;esi = &context.vertex_array[i]
lea edi,[ebp-28] ;edi = &p[1]
movsd ;p[1].f = context.vertex_array[i]
movsd
cmp dword[a_size],2
jle .e6
movsd
jmp .e7
.e6:
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
add edi,4
jmp .e8 ;и 4-й тоже ставим по умолчанию
.e7:
cmp dword[a_size],3
jle .e8
movsd
sub edi,20 ;edi=&p[0]
jmp .e9
.e8:
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
sub edi,16 ;edi=&p[0]
.e9:
stdcall glopVertex, edx,edi
@@:
ret
purge idx
purge states
purge a_size
align 4
proc glDrawElements uses eax, mode:dword, count:dword, type:dword, indices:dword
locals
@@ -488,8 +374,7 @@ endl
mov eax,[indices]
mov dword[p+16],eax
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
lea eax,[ebp-20] ;=sizeof(dd)*5
stdcall gl_add_op,eax
ret
endp
@@ -533,8 +418,7 @@ endl
;assert(0);
.end_f:
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
lea eax,[ebp-8] ;=sizeof(dd)*2
stdcall gl_add_op,eax
ret
endp
@@ -578,8 +462,7 @@ endl
;assert(0);
.end_f:
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
lea eax,[ebp-8] ;=sizeof(dd)*2
stdcall gl_add_op,eax
ret
endp
@@ -612,8 +495,7 @@ endl
mov eax,[pointer]
mov dword[p+12],eax
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
lea eax,[ebp-16] ;=sizeof(dd)*4
stdcall gl_add_op,eax
ret
endp
@@ -646,8 +528,7 @@ endl
mov eax,[pointer]
mov dword[p+12],eax
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
lea eax,[ebp-16] ;=sizeof(dd)*4
stdcall gl_add_op,eax
ret
endp
@@ -676,8 +557,7 @@ endl
mov eax,[pointer]
mov dword[p+8],eax
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
lea eax,[ebp-12] ;=sizeof(dd)*3
stdcall gl_add_op,eax
ret
endp
@@ -710,8 +590,7 @@ endl
mov eax,[pointer]
mov dword[p+12],eax
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
lea eax,[ebp-16] ;=sizeof(dd)*4
stdcall gl_add_op,eax
ret
endp

View File

@@ -21,7 +21,7 @@ proc gl_transform_to_viewport uses eax ebx ecx, context:dword,v:dword
fmul st0,st1
fmul dword[eax+GLContext.viewport+GLViewport.scale+offs_X]
fadd dword[eax+GLContext.viewport+GLViewport.trans+offs_X]
fistp dword[ebx+GLVertex.zp] ;v.zp.x = st0, st0 = st1
fistp dword[ebx+GLVertex.zp+ZBufferPoint.x] ;v.zp.x = st0, st0 = st1
fld dword[ebx+GLVertex.pc+offs_Y] ;st0 = v.pc.Y
fmul st0,st1
@@ -62,14 +62,14 @@ align 4
je @f
mov eax,[eax+GLContext.current_texture] ;eax = &context.current_texture
mov eax,[eax] ;eax = context.current_texture
;[eax+offs_text_images] = im = &context.current_texture.images[0]
;[eax+GLTexture.images] = im = &context.current_texture.images[0]
fild dword[eax+offs_text_images+offs_imag_s_bound]
fild dword[eax+GLTexture.images+GLImage.s_bound]
fmul dword[ebx+GLVertex.tex_coord+offs_X]
fistp dword[ebx+GLVertex.zp+ZBufferPoint.s]
;v.zp.s=(int)(v.tex_coord.X * im.s_bound)
fild dword[eax+offs_text_images+offs_imag_t_bound]
fild dword[eax+GLTexture.images+GLImage.t_bound]
fmul dword[ebx+GLVertex.tex_coord+offs_Y]
fistp dword[ebx+GLVertex.zp+ZBufferPoint.t]
;v.zp.t=(int)(v.tex_coord.Y * im.t_bound)
@@ -138,12 +138,12 @@ macro interpolate q, p0, p1, t
{
fld dword[t]
; интерполяция по координатам
fld dword[p1+GLVertex.pc]
fsub dword[p0+GLVertex.pc]
; interpolation by coordinates
fld dword[p1+GLVertex.pc+offs_X]
fsub dword[p0+GLVertex.pc+offs_X]
fmul st0,st1
fadd dword[p0+GLVertex.pc]
fstp dword[q+GLVertex.pc] ;q.pc.X = p0.pc.X + (p1.pc.X - p0.pc.X) * t
fadd dword[p0+GLVertex.pc+offs_X]
fstp dword[q+GLVertex.pc+offs_X] ;q.pc.X = p0.pc.X + (p1.pc.X - p0.pc.X) * t
fld dword[p1+GLVertex.pc+offs_Y]
fsub dword[p0+GLVertex.pc+offs_Y]
@@ -163,7 +163,7 @@ macro interpolate q, p0, p1, t
fadd dword[p0+GLVertex.pc+offs_W]
fstp dword[q+GLVertex.pc+offs_W]
; интерполяция по цвету
; color interpolation
fld dword[p1+GLVertex.color]
fsub dword[p0+GLVertex.color]
fmul st0,st1
@@ -228,7 +228,7 @@ align 4
fstsw ax
sahf
jae .r1_f1
fstp dword[ebx] ;if (t<*tmin) *tmax=t
fstp dword[ebx] ;if (t<*tmax) *tmax=t
jmp .r1
align 4
.els_1: ;else if (num>0)
@@ -1028,9 +1028,11 @@ if PROFILE eq 1
end if
mov eax,[edx+GLContext.current_texture]
mov eax,[eax] ;переход по указателю
;так как offs_text_images+offs_imag_pixmap = 0 то context.current_texture.images[0].pixmap = [eax]
stdcall ZB_setTexture, [edx+GLContext.zb], [eax],\
[eax+offs_imag_s_bound],[eax+offs_imag_t_bound],[eax+offs_imag_xsize_log2]
stdcall ZB_setTexture, [edx+GLContext.zb],\
[eax+GLTexture.images+GLImage.pixmap],\
[eax+GLTexture.images+GLImage.s_bound],\
[eax+GLTexture.images+GLImage.t_bound],\
[eax+GLTexture.images+GLImage.xsize_log2]
mov eax,[p0]
add eax,GLVertex.zp
push ecx

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Gears - 3D gear wheels
; Copyright (C) 2014-2025 KolibriOS team
use32
org 0
db 'MENUET01'
@@ -8,6 +12,7 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
include '../kosgl.inc'
include '../opengl_const.inc'
include 'fps.inc'
@@ -18,7 +23,7 @@ macro matr_cell c_funct,c_param,funct,param, dia
dia dword[esp-4*(c_param*(c_funct-funct)+(1+c_param-param))]
}
;Макрос для параметров типа double (8 байт)
;Macro for double type parameters (8 bytes)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
@@ -83,8 +88,7 @@ red_win:
mov ebx,200
@@:
sub ebx,10
stdcall reshape, ebx,eax
.end0:
stdcall reshape, ebx,eax
align 16
still:
@@ -165,8 +169,7 @@ draw_window:
;Title
mcall SF_DRAW_TEXT,(338 shl 16)+4,0xc0c0c0,fps, fps.end-fps
mcall SF_DRAW_TEXT,(8 shl 16)+4,0xc0c0c0,title3,title3.end-title3
;mcall SF_DRAW_TEXT,(180 shl 16)+4,0xc0c0c0,title2,title2.end-title2
mcall SF_DRAW_TEXT,(8 shl 16)+4,0xc0c0c0,title2,title2.end-title2
mcall SF_REDRAW,SSF_END_DRAW
popad
@@ -247,9 +250,7 @@ button:
align 4
title1: db 'TinyGL in KolibriOS'
.end: db 0
;title2: db 'F full screen'
;.end: db 0
title3: db 'ESC - exit, Arrow keys - rotate, +/- zoom, P - pause'
title2: db 'ESC - exit, Arrow keys - rotate, +/- zoom, P - pause'
.end: db 0
fps: db 'FPS:'
.end: db 0
@@ -922,8 +923,7 @@ name_tgl db 'tinygl.obj',0
align 16
i_end:
ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
;sizeof.TinyGLContext = 28
ctx1 TinyGLContext
procinfo process_information
cur_dir_path rb 4096
library_path rb 4096

View File

@@ -12,6 +12,15 @@ include '../opengl_const.inc'
@use_library
;Constants describing the house.3ds file (obtained using the info_3ds program)
VERTICES_OFFSET = 0x33 ;offset along which the coordinates of the vertices go
FACES_COUNT = 0x162 ;number of faces
FACES_OFFSET = 0x96b ;offset along which information about the edges goes
HOUSE_FILE_SIZE = 5297
txt_error_file_size db '"House.3ds file size does not match" -tE',0
align 4
start:
load_library name_tgl, library_path, system_path, import_tinygl
@@ -20,20 +29,20 @@ start:
mcall SF_SET_EVENTS_MASK,0x27
;заполняем массив индексов из файла house.3ds (который вшит внутрь данной программы)
;we fill the array of indices from the house.3ds file (which is embedded inside this program)
mov esi,house_3ds
add esi,0x1798 ;смещение по которому идет информация о гранях в файле 3ds (получено с использованием программы info_3ds)
add esi,FACES_OFFSET
mov edi,Indices
mov eax,0x1a6 ;число граней в файле 3ds (получено с использованием программы info_3ds)
mov eax,FACES_COUNT
@@:
movsd
movsw
add esi,2 ;пропускаем свойства грани
add esi,2 ;skip face properties
dec eax
or eax,eax
jnz @b
;первоначальные настройки контекста tinygl
;tinygl initial context settings
stdcall [kosglMakeCurrent], 10,10,400,350,ctx1
stdcall [glEnable], GL_DEPTH_TEST
stdcall [glClearColor], 0.0,0.0,0.0,0.0
@@ -48,13 +57,13 @@ red_win:
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
cmp al,EV_REDRAW
jz red_win
cmp al,EV_KEY
jz key
cmp al,EV_BUTTON
jz button
jmp still
align 4
draw_window:
@@ -140,29 +149,34 @@ caption db 'Test opengl 1.1 arrays, [Esc] - exit, [<-],[->],[Up],[Down] - rotate
align 4
draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;clear the color and depth buffer
mov eax,house_3ds.end-house_3ds
cmp eax,HOUSE_FILE_SIZE
je @f
notify_window_run txt_error_file_size
ret
@@:
call [glPushMatrix]
;масштаб и повороты
stdcall [glTranslatef], 0.0,0.0,0.5
;scale and rotations
stdcall [glScalef], [scale], [scale], [scale]
stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
;рисование через индексный массив
mov eax,house_3ds ;начало внедренного файла 3ds
add eax,0xeb ;смещение по которому идут координаты вершин (получено с использованием программы info_3ds)
stdcall [glVertexPointer], 3, GL_FLOAT, 0, eax ;задаем массив для вершин, 3 - число координат для одной вершины
stdcall [glEnableClientState], GL_VERTEX_ARRAY ;включаем режим рисования вершин
stdcall [glDrawElements], GL_TRIANGLES, 0x1a6*3, GL_UNSIGNED_SHORT, Indices ;mode, count, type, *indices
stdcall [glDisableClientState], GL_VERTEX_ARRAY ;отключаем режим рисования вершин
;drawing via index array
mov eax,house_3ds ;start of embedded 3ds file
add eax,VERTICES_OFFSET
stdcall [glVertexPointer], 3, GL_FLOAT, 0, eax ;we set an array for the vertices, 3 is the number of coordinates for one vertex
stdcall [glEnableClientState], GL_VERTEX_ARRAY ;turn on the vertex drawing mode
stdcall [glDrawElements], GL_TRIANGLES, FACES_COUNT*3, GL_UNSIGNED_SHORT, Indices ;mode, count, type, *indices
stdcall [glDisableClientState], GL_VERTEX_ARRAY ;disable vertex drawing mode
call [glPopMatrix]
ret
align 4
scale dd 0.0065 ;начальный масштаб (в идеальном случае должен вычислятся, но для даного примера подобран в ручную на глаз)
scale dd 0.07 ;initial scale (ideally should be calculated)
delt_sc dd 0.0005
angle_z dd 90.0
angle_y dd 90.0
@@ -170,10 +184,11 @@ angle_x dd 0.0
delt_size dd 3.0
align 4
house_3ds: ;внедряем файл внутрь программы (в идеальном случае должен открыватся через окно диалога, но для облегчения примера вшит внутрь)
house_3ds: ;we embed the file inside the program (ideally it should open through a dialog box)
file '../../../../../demos/view3ds/3ds_objects/House.3ds'
.end:
align 4
Indices rb 0x1a6*6 ;0x1a6 - число граней, на каждую грань по 3 точки, индекс точки 2 байта
Indices rb FACES_COUNT*6 ;3 points per edge, point index 2 bytes
;--------------------------------------------------
align 4

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Test glu0 - gluSphere functionality testing
; Copyright (C) 2014-2025 KolibriOS team
use32
org 0
db 'MENUET01'
@@ -8,6 +12,7 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
include '../kosgl.inc'
include '../opengl_const.inc'
@use_library
@@ -36,13 +41,13 @@ red_win:
align 16
still:
mcall SF_WAIT_EVENT
cmp al,1
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
cmp al,EV_REDRAW
jz red_win
cmp al,EV_KEY
jz key
cmp al,EV_BUTTON
jz button
jmp still
align 4
draw_window:
@@ -131,9 +136,6 @@ button:
mcall SF_TERMINATE_PROCESS
align 4
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
@@ -141,25 +143,37 @@ stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим б
stdcall [glColor3f], 1.0, 1.0, 0.0
call [glPushMatrix]
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale]
stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [gluSphere], [qObj], 1.0, 16,16
push 16
push 16
glpush rad1
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 1.0, 0.0, 0.0
stdcall [glTranslatef], -1.6,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 8,8
push 8
push 8
glpush rad2
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [glTranslatef], 3.2,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 8,8
push 8
push 8
glpush rad2
stdcall [gluSphere], [qObj]
call [glPopMatrix]
ret
align 4
qObj dd 0
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.55
scale dd 0.4
delt_sc dd 0.05
@@ -173,13 +187,17 @@ import_tinygl:
macro E_LIB n
{
if defined sz_#n
n dd sz_#n
end if
}
include '../export.inc'
dd 0,0
macro E_LIB n
{
if used n
sz_#n db `n,0
end if
}
include '../export.inc'
@@ -190,7 +208,8 @@ name_tgl db 'tinygl.obj',0
align 16
i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28
ctx1 TinyGLContext
qObj dd 0
cur_dir_path rb 4096
library_path rb 4096
rb 2048

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Test glu1 - gluCylinder and gluDisk functionality testing
; Copyright (C) 2014-2025 KolibriOS team
use32
org 0
db 'MENUET01'
@@ -8,24 +12,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc'
include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc'
include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc'
3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 500
3d_wnd_h equ 400
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
;Макрос для параметров типа double (8 байт)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
align 4
start:
load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки
;checking how successfully the libraries were loaded
mov ebp,lib_0
.test_lib_open:
cmp dword [ebp+ll_struc_size-4],0
@@ -39,16 +43,24 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
finit
fild dword[buf_ogl.w]
fdiv dword[fl_180]
fstp dword[angle_dzm]
fild dword[buf_ogl.h]
fdiv dword[fl_180]
fstp dword[angle_dym]
stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric]
mov [qObj],eax
stdcall [glClearColor], 0.25,0.25,0.25,0.0
stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax
@@ -60,6 +72,15 @@ load_libraries l_libs_start,l_libs_end
stdcall [buf2d_convert_text_matrix], buf_1
load_image_file 'toolb_1.png', image_data_toolbar
fld dword[scale]
stdcall update_number, txt_scale.v
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
fld dword[angle_z]
stdcall update_number, txt_angle_z.v
call SetLight
call draw_3d
align 4
@@ -69,19 +90,30 @@ red_win:
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
cmp al,EV_REDRAW
jz red_win
cmp al,EV_KEY
jz key
cmp al,EV_BUTTON
jz button
cmp al,EV_MOUSE
jne still
call mouse
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;вершины вкл.
@@ -128,11 +160,7 @@ key:
fld dword[angle_y]
fadd dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
jmp still
@@ -143,11 +171,7 @@ key:
fld dword[angle_y]
fsub dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
jmp still
@@ -158,11 +182,7 @@ key:
fld dword[angle_z]
fadd dword[delt_size]
fst dword[angle_z]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
stdcall update_number, txt_angle_z.v
call draw_3d
call [kosglSwapBuffers]
jmp still
@@ -173,11 +193,7 @@ key:
fld dword[angle_z]
fsub dword[delt_size]
fst dword[angle_z]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
stdcall update_number, txt_angle_z.v
call draw_3d
call [kosglSwapBuffers]
;jmp still
@@ -220,6 +236,104 @@ button:
stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS
align 4
mouse:
push eax ebx
mcall SF_MOUSE_GET,SSF_BUTTON_EXT
bt eax,0
jnc .end_m
;mouse l. but. move
cmp dword[mouse_drag],1
jne .end_m
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
sar ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jg @f
mov ebx,3d_wnd_l
@@:
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jle @f
mov ebx,3d_wnd_w
@@:
movsx eax,ax ;mouse.y
cmp eax,3d_wnd_t
jg @f
mov eax,3d_wnd_t
@@:
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jle @f
mov eax,3d_wnd_h
@@:
finit
fild dword[mouse_y]
mov [mouse_y],eax
fisub dword[mouse_y]
fdiv dword[angle_dzm] ;if the cursor moves along the y-axis (up or down)
fadd dword[angle_z]
fst dword[angle_z]
stdcall update_number, txt_angle_z.v
fild dword[mouse_x]
mov [mouse_x],ebx
fisub dword[mouse_x]
fdiv dword[angle_dym] ;if the cursor moves along the z-axis (left or right)
fadd dword[angle_y]
fst dword[angle_y]
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
jmp .end_d
.end_m:
bt eax,16
jnc @f
;mouse l. but. up
mov dword[mouse_drag],0
jmp .end_d
@@:
bt eax,8
jnc .end_d
;mouse l. but. press
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
sar ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jl .end_d
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jg .end_d
movsx eax,ax ;mouse.y
cmp eax,3d_wnd_t
jl .end_d
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jg .end_d
mov dword[mouse_drag],1
mov dword[mouse_x],ebx
mov dword[mouse_y],eax
.end_d:
pop ebx eax
ret
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4
but_st_point:
stdcall [gluQuadricDrawStyle], [qObj],GLU_POINT
@@ -255,11 +369,7 @@ but_zoom_p:
fld dword[sc_max]
@@:
fst dword[scale]
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
stdcall update_number, txt_scale.v
call draw_3d
call [kosglSwapBuffers]
ret
@@ -278,50 +388,54 @@ but_zoom_m:
fld dword[sc_min]
@@:
fst dword[scale]
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
stdcall update_number, txt_scale.v
call draw_3d
call [kosglSwapBuffers]
ret
align 4
caption db 'Test gluCylinder, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.55
rad3 dq 0.15
hei1 dq 2.0 ;высота цилиндра
hei2 dq 1.25
align 4
draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix]
call SetLight
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale]
stdcall [glScalef], 1.0, 1.0, 0.5
stdcall [glColor3f], 1.0, 1.0, 0.0
stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glTranslatef], 0.0,0.0,-1.0 ;опускаем цилинды вниз
stdcall [gluCylinder], [qObj], rad1,rad1,hei1, 32,8
push 8
push 32
glpush hei1
glpush rad1
glpush rad1
stdcall [gluCylinder], [qObj]
stdcall [glTranslatef], 0.0,0.0,2.0
push 4
push 32
glpush rad1
glpush rad3
stdcall [gluDisk], [qObj]
stdcall [glColor3f], 1.0, 0.0, 0.0
stdcall [glTranslatef], -1.6,0.0,0.0
stdcall [gluCylinder], [qObj], rad2,rad3,hei2, 16,8
stdcall [glTranslatef], -1.6,0.0,-2.0
push 8
push 16
glpush hei2
glpush rad3
glpush rad2
stdcall [gluCylinder], [qObj]
stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [glTranslatef], 3.2,0.0,0.0
stdcall [gluCylinder], [qObj], rad2,rad3,hei2, 16,8
push 8
push 16
glpush hei2
glpush rad3
glpush rad2
stdcall [gluCylinder], [qObj]
call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
@@ -347,10 +461,22 @@ SetLight:
stdcall [glEnable],GL_LIGHT0
ret
scale dd 0.4 ;начальный масштаб
sc_delt dd 0.05 ;изменение масштаба при нажатии
sc_min dd 0.1 ;минимальный масштаб
sc_max dd 1.1 ;максимальный масштаб
align 4
caption db 'Test gluCylinder and gluDisk, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.55
rad3 dq 0.15
hei1 dq 2.0 ;высота цилиндра
hei2 dq 1.25
fl_180 dd 180.0
scale dd 0.4 ;initial scale
sc_delt dd 0.05 ;zoom on click
sc_min dd 0.1 ;minimum scale
sc_max dd 1.1 ;maximum scale
angle_z dd -45.0
angle_y dd -150.0
delt_size dd 3.0
@@ -369,13 +495,17 @@ import_tinygl:
macro E_LIB n
{
if defined sz_#n
n dd sz_#n
end if
}
include '../export.inc'
dd 0,0
macro E_LIB n
{
if used n
sz_#n db `n,0
end if
}
include '../export.inc'
@@ -493,28 +623,23 @@ lib_name_2 db 'libimg.obj',0
txt_scale:
db 'Scale: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_z:
db 'Rotate z: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_y:
db 'Rotate y: '
.v:
db 0
rb 10
.v: rb 11
align 4
buf_ogl:
dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top
.w: dd 400
.h: dd 350
dw 3d_wnd_l ;+4 left
.t: dw 3d_wnd_t ;+6 top
.w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel
align 4
@@ -533,9 +658,14 @@ l_libs_end:
align 4
i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28
ctx1 TinyGLContext
image_data_toolbar dd 0
qObj dd 0
mouse_drag dd 0 ;scene rotation mode based on mouse cursor movement
mouse_x dd 0
mouse_y dd 0
angle_dzm dd 0 ;~ 3d_wnd_w/180 - adding scene rotation angles when rotating the mouse
angle_dym dd 0 ;~ 3d_wnd_h/180
run_file_70 FileInfoBlock
sc system_colors
align 16

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Test glu2 - gluSphere functionality testing
; Copyright (C) 2015-2025 KolibriOS team
use32
org 0
db 'MENUET01'
@@ -8,24 +12,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc'
include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc'
include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc'
3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 500
3d_wnd_h equ 400
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
;Макрос для параметров типа double (8 байт)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
align 4
start:
load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки
;checking how successfully the libraries were loaded
mov ebp,lib_0
.test_lib_open:
cmp dword [ebp+ll_struc_size-4],0
@@ -39,16 +43,24 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
finit
fild dword[buf_ogl.w]
fdiv dword[fl_180]
fstp dword[angle_dzm]
fild dword[buf_ogl.h]
fdiv dword[fl_180]
fstp dword[angle_dym]
stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric]
mov [qObj],eax
stdcall [glClearColor], 0.25,0.25,0.25,0.0
stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax
@@ -60,6 +72,15 @@ load_libraries l_libs_start,l_libs_end
stdcall [buf2d_convert_text_matrix], buf_1
load_image_file 'toolb_1.png', image_data_toolbar
fld dword[scale]
stdcall update_number, txt_scale.v
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
fld dword[angle_z]
stdcall update_number, txt_angle_z.v
call SetLight
call draw_3d
align 4
@@ -69,19 +90,30 @@ red_win:
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
cmp al,EV_REDRAW
jz red_win
cmp al,EV_KEY
jz key
cmp al,EV_BUTTON
jz button
cmp al,EV_MOUSE
jne still
call mouse
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;вершины вкл.
@@ -128,11 +160,7 @@ key:
fld dword[angle_y]
fadd dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
jmp still
@@ -143,11 +171,7 @@ key:
fld dword[angle_y]
fsub dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
jmp still
@@ -158,11 +182,7 @@ key:
fld dword[angle_z]
fadd dword[delt_size]
fst dword[angle_z]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
stdcall update_number, txt_angle_z.v
call draw_3d
call [kosglSwapBuffers]
jmp still
@@ -173,11 +193,7 @@ key:
fld dword[angle_z]
fsub dword[delt_size]
fst dword[angle_z]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
stdcall update_number, txt_angle_z.v
call draw_3d
call [kosglSwapBuffers]
;jmp still
@@ -220,6 +236,104 @@ button:
stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS
align 4
mouse:
push eax ebx
mcall SF_MOUSE_GET,SSF_BUTTON_EXT
bt eax,0
jnc .end_m
;mouse l. but. move
cmp dword[mouse_drag],1
jne .end_m
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
sar ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jg @f
mov ebx,3d_wnd_l
@@:
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jle @f
mov ebx,3d_wnd_w
@@:
movsx eax,ax ;mouse.y
cmp eax,3d_wnd_t
jg @f
mov eax,3d_wnd_t
@@:
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jle @f
mov eax,3d_wnd_h
@@:
finit
fild dword[mouse_y]
mov [mouse_y],eax
fisub dword[mouse_y]
fdiv dword[angle_dzm] ;if the cursor moves along the y-axis (up or down)
fadd dword[angle_z]
fst dword[angle_z]
stdcall update_number, txt_angle_z.v
fild dword[mouse_x]
mov [mouse_x],ebx
fisub dword[mouse_x]
fdiv dword[angle_dym] ;if the cursor moves along the z-axis (left or right)
fadd dword[angle_y]
fst dword[angle_y]
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
jmp .end_d
.end_m:
bt eax,16
jnc @f
;mouse l. but. up
mov dword[mouse_drag],0
jmp .end_d
@@:
bt eax,8
jnc .end_d
;mouse l. but. press
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
sar ebx,16 ;mouse.x
cmp ebx,3d_wnd_l
jl .end_d
sub ebx,3d_wnd_l
cmp ebx,3d_wnd_w
jg .end_d
movsx eax,ax ;mouse.y
cmp eax,3d_wnd_t
jl .end_d
sub eax,3d_wnd_t
cmp eax,3d_wnd_h
jg .end_d
mov dword[mouse_drag],1
mov dword[mouse_x],ebx
mov dword[mouse_y],eax
.end_d:
pop ebx eax
ret
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4
but_st_point:
stdcall [gluQuadricDrawStyle], [qObj],GLU_POINT
@@ -255,11 +369,7 @@ but_zoom_p:
fld dword[sc_max]
@@:
fst dword[scale]
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
stdcall update_number, txt_scale.v
call draw_3d
call [kosglSwapBuffers]
ret
@@ -278,41 +388,40 @@ but_zoom_m:
fld dword[sc_min]
@@:
fst dword[scale]
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
stdcall update_number, txt_scale.v
call draw_3d
call [kosglSwapBuffers]
ret
align 4
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix]
call SetLight
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale]
stdcall [glColor3f], 1.0, 1.0, 0.0
stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [gluSphere], [qObj], 1.0, 32,32
push 32
push 32
glpush rad1
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 1.0, 0.0, 0.0
stdcall [glTranslatef], -1.6,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 16,16
push 16
push 16
glpush rad2
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [glTranslatef], 3.2,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 16,16
push 16
push 16
glpush rad2
stdcall [gluSphere], [qObj]
call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
@@ -338,10 +447,19 @@ SetLight:
stdcall [glEnable],GL_LIGHT0
ret
scale dd 0.4 ;начальный масштаб
sc_delt dd 0.05 ;изменение масштаба при нажатии
sc_min dd 0.1 ;минимальный масштаб
sc_max dd 1.1 ;максимальный масштаб
align 4
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.55
fl_180 dd 180.0
scale dd 0.4 ;initial scale
sc_delt dd 0.05 ;zoom on click
sc_min dd 0.1 ;minimum scale
sc_max dd 1.1 ;maximum scale
angle_z dd 0.0
angle_y dd 0.0
delt_size dd 3.0
@@ -360,13 +478,17 @@ import_tinygl:
macro E_LIB n
{
if defined sz_#n
n dd sz_#n
end if
}
include '../export.inc'
dd 0,0
macro E_LIB n
{
if used n
sz_#n db `n,0
end if
}
include '../export.inc'
@@ -484,28 +606,23 @@ lib_name_2 db 'libimg.obj',0
txt_scale:
db 'Scale: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_z:
db 'Rotate z: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_y:
db 'Rotate y: '
.v:
db 0
rb 10
.v: rb 11
align 4
buf_ogl:
dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top
.w: dd 400
.h: dd 350
dw 3d_wnd_l ;+4 left
.t: dw 3d_wnd_t ;+6 top
.w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel
align 4
@@ -524,9 +641,14 @@ l_libs_end:
align 4
i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28
ctx1 TinyGLContext
image_data_toolbar dd 0
qObj dd 0
mouse_drag dd 0 ;scene rotation mode based on mouse cursor movement
mouse_x dd 0
mouse_y dd 0
angle_dzm dd 0 ;~ 3d_wnd_w/180 - adding scene rotation angles when rotating the mouse
angle_dym dd 0 ;~ 3d_wnd_h/180
run_file_70 FileInfoBlock
sc system_colors
align 16

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Textures0 - example of texture mapping on a sphere and cube
; Copyright (C) 2015-2025 KolibriOS team
use32
org 0
db 'MENUET01'
@@ -8,24 +12,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc'
include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc'
include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 500
3d_wnd_h equ 400
;Макрос для параметров типа double (8 байт)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
align 4
start:
load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки
;checking how successfully the libraries were loaded
mov ebp,lib_0
.test_lib_open:
cmp dword [ebp+ll_struc_size-4],0
@@ -39,9 +43,9 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric]
mov [qObj],eax
stdcall [gluQuadricTexture], eax,GL_TRUE
@@ -49,7 +53,7 @@ load_libraries l_libs_start,l_libs_end
stdcall [glClearColor], 0.25,0.25,0.25,0.0
stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax
@@ -63,6 +67,11 @@ load_libraries l_libs_start,l_libs_end
load_image_file 'toolb_1.png', image_data_toolbar
load_image_file 'text_1.png', texture, text_w,text_h ;открытие файла текстуры
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
fld dword[angle_z]
stdcall update_number, txt_angle_z.v
;* Setup texturing *
stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
@@ -88,19 +97,27 @@ red_win:
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
cmp al,EV_REDRAW
jz red_win
cmp al,EV_KEY
jz key
cmp al,EV_BUTTON
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;сферы
@@ -144,11 +161,7 @@ key:
fld dword[angle_y]
fadd dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -158,11 +171,7 @@ key:
fld dword[angle_y]
fsub dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -172,11 +181,7 @@ key:
fld dword[angle_z]
fadd dword[delt_size]
fst dword[angle_z]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
stdcall update_number, txt_angle_z.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -186,11 +191,7 @@ key:
fld dword[angle_z]
fsub dword[delt_size]
fst dword[angle_z]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_z.v],0
stdcall str_cat, txt_angle_z.v,Data_String
stdcall update_number, txt_angle_z.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -227,6 +228,20 @@ button:
stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4
but_dr_0:
mov dword[dr_figure],0
@@ -287,15 +302,12 @@ but_zoom_m:
call [kosglSwapBuffers]
ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix]
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale]
stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
@@ -304,15 +316,24 @@ cmp dword[dr_figure],0
jne @f
; рисование сфер
stdcall [glColor3f], 1.0, 1.0, 0.0
stdcall [gluSphere], [qObj], 1.0, 32,32
push 32
push 32
glpush rad1
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 1.0, 0.0, 0.0
stdcall [glTranslatef], -1.6,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 16,16
push 16
push 16
glpush rad2
stdcall [gluSphere], [qObj]
stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [glTranslatef], 3.2,0.0,0.0
stdcall [gluSphere], [qObj], 0.55, 16,16
push 16
push 16
glpush rad2
stdcall [gluSphere], [qObj]
@@:
cmp dword[dr_figure],1
jne @f
@@ -388,6 +409,13 @@ call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,25,0xffff00
ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.55
scale dd 0.4 ;начальный масштаб
sc_delt dd 0.05 ;изменение масштаба при нажатии
sc_min dd 0.1 ;минимальный масштаб
@@ -410,13 +438,17 @@ import_tinygl:
macro E_LIB n
{
if defined sz_#n
n dd sz_#n
end if
}
include '../export.inc'
dd 0,0
macro E_LIB n
{
if used n
sz_#n db `n,0
end if
}
include '../export.inc'
@@ -534,28 +566,23 @@ lib_name_2 db 'libimg.obj',0
txt_scale:
db 'Scale: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_z:
db 'Rotate z: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_y:
db 'Rotate y: '
.v:
db 0
rb 10
.v: rb 11
align 4
buf_ogl:
dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top
.w: dd 400
.h: dd 350
dw 3d_wnd_l ;+4 left
.t: dw 3d_wnd_t ;+6 top
.w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel
align 4
@@ -574,7 +601,7 @@ l_libs_end:
align 4
i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28
ctx1 TinyGLContext
image_data_toolbar dd 0
dr_figure dd 0
qObj dd 0

View File

@@ -1,3 +1,8 @@
; SPDX-License-Identifier: GPL-2.0-only
; Textures1 - drawing the earth with and without meridians.
; Texture size 1024*512 pixels is used.
; Copyright (C) 2015-2025 KolibriOS team
use32
org 0
db 'MENUET01'
@@ -8,24 +13,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc'
include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc'
include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 450
3d_wnd_h equ 400
;Макрос для параметров типа double (8 байт)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
align 4
start:
load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки
;checking how successfully the libraries were loaded
mov ebp,lib_0
.test_lib_open:
cmp dword [ebp+ll_struc_size-4],0
@@ -39,9 +44,9 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric]
mov [qObj],eax
stdcall [gluQuadricTexture], eax,GL_TRUE
@@ -49,7 +54,7 @@ load_libraries l_libs_start,l_libs_end
stdcall [glClearColor], 0.0,0.0,0.0,0.0
stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax
@@ -63,6 +68,11 @@ load_libraries l_libs_start,l_libs_end
load_image_file 'toolb_1.png', image_data_toolbar
load_image_file 'text_2.png', texture, text_w,text_h ;открытие файла текстуры
fld dword[angle_x]
stdcall update_number, txt_angle_x.v
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
;* Setup texturing *
stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
@@ -88,19 +98,27 @@ red_win:
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
cmp al,EV_REDRAW
jz red_win
cmp al,EV_KEY
jz key
cmp al,EV_BUTTON
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;земля с меридиан.
@@ -146,11 +164,7 @@ key:
fld dword[angle_y]
fadd dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -160,11 +174,7 @@ key:
fld dword[angle_y]
fsub dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -174,11 +184,7 @@ key:
fld dword[angle_x]
fadd dword[delt_size]
fst dword[angle_x]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_x.v],0
stdcall str_cat, txt_angle_x.v,Data_String
stdcall update_number, txt_angle_x.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -188,11 +194,7 @@ key:
fld dword[angle_x]
fsub dword[delt_size]
fst dword[angle_x]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_x.v],0
stdcall str_cat, txt_angle_x.v,Data_String
stdcall update_number, txt_angle_x.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -229,6 +231,20 @@ button:
stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4
but_dr_0:
mov dword[dr_figure],0
@@ -289,34 +305,40 @@ but_zoom_m:
call [kosglSwapBuffers]
ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix]
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale]
stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
stdcall [glScalef], 1.0, 1.0, 0.2 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
cmp dword[dr_figure],0
jne @f
; рисование земли с меридианами
; drawing earth with meridians
stdcall [glColor3f], 0.0, 0.0, 1.0
stdcall [gluQuadricDrawStyle], [qObj],GLU_LINE
stdcall [gluSphere], [qObj], 1.0, 24,18 ;меридианы
push 18
push 24
glpush rad1
stdcall [gluSphere], [qObj] ;meridians
stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
stdcall [gluSphere], [qObj], 0.995, 24,18 ;земля
push 24
push 18
glpush rad2
stdcall [gluSphere], [qObj] ;Earth
@@:
cmp dword[dr_figure],1
jne @f
; рисование земли
; drawing the earth
stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
stdcall [gluSphere], [qObj], 1.0, 64,64
push 64
push 64
glpush rad1
stdcall [gluSphere], [qObj]
@@:
call [glPopMatrix]
@@ -325,6 +347,13 @@ call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00
ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
rad1 dq 1.0
rad2 dq 0.995
scale dd 0.95 ;начальный масштаб
sc_delt dd 0.05 ;изменение масштаба при нажатии
sc_min dd 0.1 ;минимальный масштаб
@@ -340,13 +369,17 @@ import_tinygl:
macro E_LIB n
{
if defined sz_#n
n dd sz_#n
end if
}
include '../export.inc'
dd 0,0
macro E_LIB n
{
if used n
sz_#n db `n,0
end if
}
include '../export.inc'
@@ -464,34 +497,27 @@ lib_name_2 db 'libimg.obj',0
txt_scale:
db 'Scale: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_z:
db 'Rotate z: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_x:
db 'Rotate x: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_y:
db 'Rotate y: '
.v:
db 0
rb 10
.v: rb 11
align 4
buf_ogl:
dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top
.w: dd 400
.h: dd 350
dw 3d_wnd_l ;+4 left
.t: dw 3d_wnd_t ;+6 top
.w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel
align 4
@@ -510,7 +536,7 @@ l_libs_end:
align 4
i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28
ctx1 TinyGLContext
image_data_toolbar dd 0
dr_figure dd 0
qObj dd 0

View File

@@ -1,3 +1,7 @@
; SPDX-License-Identifier: GPL-2.0-only
; Textures2 - example of creating a spherical panorama using texture
; Copyright (C) 2015-2025 KolibriOS team
use32
org 0
db 'MENUET01'
@@ -8,24 +12,24 @@ include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_img.inc'
include '../../../../../load_lib.mac'
include '../kosgl.inc'
include '../opengl_const.inc'
include '../zbuffer.inc'
include '../../../../../develop/info3ds/info_fun_float.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
3d_wnd_l equ 0 ;tinygl buffer left indent
3d_wnd_t equ 30 ;tinygl buffer top indent
3d_wnd_w equ 450
3d_wnd_h equ 400
;Макрос для параметров типа double (8 байт)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
align 4
start:
load_libraries l_libs_start,l_libs_end
;проверка на сколько удачно загузились библиотеки
;checking how successfully the libraries were loaded
mov ebp,lib_0
.test_lib_open:
cmp dword [ebp+ll_struc_size-4],0
@@ -39,9 +43,9 @@ load_libraries l_libs_start,l_libs_end
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
call [gluNewQuadric]
mov [qObj],eax
stdcall [gluQuadricDrawStyle], eax,GLU_FILL
@@ -50,7 +54,7 @@ load_libraries l_libs_start,l_libs_end
stdcall [glClearColor], 0.0,0.0,0.0,0.0
stdcall [glShadeModel], GL_SMOOTH
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
mov eax,[ctx1.gl_context]
mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+ZBuffer.pbuf]
mov dword[buf_ogl],eax
@@ -64,6 +68,11 @@ load_libraries l_libs_start,l_libs_end
load_image_file 'toolb_1.png', image_data_toolbar
load_image_file 'text_3.png', texture, text_w,text_h ;открытие файла текстуры
fld dword[angle_x]
stdcall update_number, txt_angle_x.v
fld dword[angle_y]
stdcall update_number, txt_angle_y.v
;* Setup texturing *
stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
@@ -89,19 +98,27 @@ red_win:
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
cmp al,EV_REDRAW
jz red_win
cmp al,EV_KEY
jz key
cmp al,EV_BUTTON
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx,[buf_ogl.w]
add ebx,(50 shl 16)+9
mov ecx,[buf_ogl.h]
add ecx,(30 shl 16)+4
add ecx,eax
add cx,[buf_ogl.t]
mcall SF_CREATE_WINDOW,,,0x33ffffff,,caption
mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;масштаб +
@@ -141,11 +158,7 @@ key:
fld dword[angle_y]
fadd dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -155,11 +168,7 @@ key:
fld dword[angle_y]
fsub dword[delt_size]
fst dword[angle_y]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_y.v],0
stdcall str_cat, txt_angle_y.v,Data_String
stdcall update_number, txt_angle_y.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -169,11 +178,7 @@ key:
fld dword[angle_x]
fadd dword[delt_size]
fst dword[angle_x]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_x.v],0
stdcall str_cat, txt_angle_x.v,Data_String
stdcall update_number, txt_angle_x.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -183,11 +188,7 @@ key:
fld dword[angle_x]
fsub dword[delt_size]
fst dword[angle_x]
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_angle_x.v],0
stdcall str_cat, txt_angle_x.v,Data_String
stdcall update_number, txt_angle_x.v
call draw_3d
call [kosglSwapBuffers]
@@:
@@ -214,6 +215,20 @@ button:
stdcall mem.Free,[image_data_toolbar]
mcall SF_TERMINATE_PROCESS
;input:
; st0 - number
; txt_addr - pointer to text buffer
align 4
proc update_number uses eax, txt_addr:dword
mov word[NumberSymbolsAD],2
fstp qword[Data_Double]
call DoubleFloat_to_String
mov eax,[txt_addr]
mov byte[eax],0
stdcall str_cat, eax,Data_String
ret
endp
align 4
but_zoom_p:
finit
@@ -260,21 +275,25 @@ but_zoom_m:
call [kosglSwapBuffers]
ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
call [glPushMatrix]
stdcall [glTranslatef], 0.0,0.0,-1.0 ;двигаем сферу на себя, что-бы отсечь переднюю часть
stdcall [glScalef], [scale], [scale], [scale]
stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
stdcall [glScalef], 1.0, 1.0, 0.2 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
; рисование панорамы
stdcall [gluSphere], [qObj], 1.0, 64,64
push 64
push 64
add esp,-8
fld1
fstp qword[esp]
stdcall [gluSphere], [qObj]
call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
@@ -282,6 +301,10 @@ call [glPopMatrix]
stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00
ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
scale dd 1.5 ;начальный масштаб
sc_delt dd 0.05 ;изменение масштаба при нажатии
sc_min dd 0.95 ;минимальный масштаб
@@ -297,13 +320,17 @@ import_tinygl:
macro E_LIB n
{
if defined sz_#n
n dd sz_#n
end if
}
include '../export.inc'
dd 0,0
macro E_LIB n
{
if used n
sz_#n db `n,0
end if
}
include '../export.inc'
@@ -421,34 +448,27 @@ lib_name_2 db 'libimg.obj',0
txt_scale:
db 'Scale: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_z:
db 'Rotate z: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_x:
db 'Rotate x: '
.v:
db 0
rb 10
.v: rb 11
txt_angle_y:
db 'Rotate y: '
.v:
db 0
rb 10
.v: rb 11
align 4
buf_ogl:
dd 0 ;указатель на буфер изображения
dw 10,10 ;+4 left,top
.w: dd 400
.h: dd 350
dw 3d_wnd_l ;+4 left
.t: dw 3d_wnd_t ;+6 top
.w: dd 3d_wnd_w
.h: dd 3d_wnd_h
dd 0,24 ;+16 color,bit in pixel
align 4
@@ -467,7 +487,7 @@ l_libs_end:
align 4
i_end:
ctx1 rb 28 ;sizeof.TinyGLContext = 28
ctx1 TinyGLContext
image_data_toolbar dd 0
qObj dd 0
TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)

View File

@@ -168,7 +168,8 @@ E_LIB gluQuadricDrawStyle
E_LIB gluQuadricOrientation
E_LIB gluQuadricTexture
E_LIB gluCylinder ;(GLUquadricObj, double, double, double, int, int)
E_LIB gluSphere ;(GLUquadricObj, float, int, int)
E_LIB gluDisk ;(GLUquadricObj, double, double, int, int)
E_LIB gluSphere ;(GLUquadricObj, double, int, int)
;
; KolibriOS functions

View File

@@ -6,29 +6,9 @@ struct GLUquadricObj
ErrorFunc dd ? ; Error handler callback function
ends
offs_qobj_DrawStyle equ 0
offs_qobj_Orientation equ 4
offs_qobj_TextureFlag equ 8
offs_qobj_Normals equ 12
offs_qobj_ErrorFunc equ 16
;Так как некоторые извращенческие функции OpenGL воспринимают только параметры
;типа double (8 байт) то придется пихать их в стек макросом glpush
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
;void drawTorus(float rc, int numc, float rt, int numt)
;{
;}
;static void normal3f(GLfloat x, GLfloat y, GLfloat z )
;{
;}
align 4
an360f dd 360.0
fl_0_5 dd 0.5
fl_360 dd 360.0
align 16
proc gluPerspective, fovy:qword, aspect:qword, zNear:qword, zFar:qword
@@ -40,7 +20,7 @@ locals
endl
fldpi
fmul qword[fovy]
fdiv dword[an360f]
fdiv dword[fl_360]
fptan
ffree st0 ;выкидываем 1.0 которая осталось после вычисления тангенса
fincstp
@@ -76,11 +56,11 @@ gluNewQuadric:
stdcall gl_malloc, sizeof.GLUquadricObj
or eax,eax
jz @f
mov dword[eax+offs_qobj_DrawStyle],GLU_FILL
mov dword[eax+offs_qobj_Orientation],GLU_OUTSIDE
mov dword[eax+offs_qobj_TextureFlag],GL_FALSE
mov dword[eax+offs_qobj_Normals],GLU_SMOOTH
mov dword[eax+offs_qobj_ErrorFunc],0 ;NULL
mov dword[eax+GLUquadricObj.DrawStyle],GLU_FILL
mov dword[eax+GLUquadricObj.Orientation],GLU_OUTSIDE
mov dword[eax+GLUquadricObj.TextureFlag],GL_FALSE
mov dword[eax+GLUquadricObj.Normals],GLU_SMOOTH
mov dword[eax+GLUquadricObj.ErrorFunc],0 ;NULL
@@:
ret
@@ -114,7 +94,7 @@ proc gluQuadricDrawStyle uses eax ebx, qobj:dword, drawStyle:dword
jmp .err_q
align 4
@@:
mov dword[eax+offs_qobj_DrawStyle],ebx
mov dword[eax+GLUquadricObj.DrawStyle],ebx
jmp @f
align 4
.err_q:
@@ -139,7 +119,7 @@ proc gluQuadricOrientation uses eax ebx, qobj:dword, orientation:dword
jmp .err_q
align 4
@@:
mov dword[eax+offs_qobj_Orientation],ebx
mov dword[eax+GLUquadricObj.Orientation],ebx
jmp @f
align 4
.err_q:
@@ -159,7 +139,7 @@ proc gluQuadricTexture uses eax ebx, qobj:dword, texture:dword
cmp ebx,GL_FALSE
je @f
@@:
mov dword[eax+offs_qobj_TextureFlag],ebx
mov dword[eax+GLUquadricObj.TextureFlag],ebx
jmp @f
align 4
.err_q:
@@ -169,7 +149,7 @@ align 4
endp
align 16
proc gluCylinder qobj:dword, baseRadius:dword, topRadius:dword, height:dword,\
proc gluCylinder qobj:dword, baseRadius:qword, topRadius:qword, height:qword,\
slices:dword, stacks:dword
locals
da dq ? ;double
@@ -193,7 +173,7 @@ endl
pushad
mov edx,[qobj]
fld1
cmp dword[edx+offs_qobj_Orientation],GLU_INSIDE
cmp dword[edx+GLUquadricObj.Orientation],GLU_INSIDE
jne @f
fchs
@@:
@@ -203,14 +183,12 @@ pushad
fadd st0,st0
fidiv dword[slices]
fstp qword[da] ;da = 2.0*M_PI / slices
mov ebx,[topRadius]
fld qword[ebx]
mov ecx,[baseRadius]
fsub qword[ecx]
fld qword[topRadius]
fsub qword[baseRadius]
fld st0 ;copy: topRadius-baseRadius
fidiv dword[stacks]
fstp qword[dr] ;dr = (topRadius-baseRadius) / stacks
mov eax,[height]
lea eax,[height]
fld qword[eax]
fidiv dword[stacks]
fstp qword[dz] ;dz = height / stacks
@@ -218,7 +196,7 @@ pushad
fdiv qword[eax]
fstp dword[nz] ;nz = (baseRadius-topRadius) / height ; Z component of normal vectors
cmp dword[edx+offs_qobj_DrawStyle],GLU_POINT
cmp dword[edx+GLUquadricObj.DrawStyle],GLU_POINT
jne .else0
stdcall glBegin,GL_POINTS
mov ebx,[slices]
@@ -245,8 +223,7 @@ align 4
call glNormal3f ;x*nsign, y*nsign, nz*nsign
mov dword[z],0.0
mov ecx,[baseRadius]
fld qword[ecx]
fld qword[baseRadius]
fstp qword[r] ;r = baseRadius
mov ecx,[stacks]
inc ecx
@@ -277,16 +254,15 @@ align 4
call glEnd
jmp .end_f
.else0:
cmp dword[edx+offs_qobj_DrawStyle],GLU_LINE
cmp dword[edx+GLUquadricObj.DrawStyle],GLU_LINE
je @f
cmp dword[edx+offs_qobj_DrawStyle],GLU_SILHOUETTE
cmp dword[edx+GLUquadricObj.DrawStyle],GLU_SILHOUETTE
je .else2
jmp .else1
@@:
; Draw rings
mov dword[z],0.0
mov ecx,[baseRadius]
fld qword[ecx]
fld qword[baseRadius]
fstp qword[r] ;r = baseRadius
mov ecx,[stacks]
inc ecx
@@ -342,28 +318,100 @@ align 4
align 4
.else2:
; draw one ring at each end
; if (baseRadius!=0.0) {
lea ecx,[baseRadius]
fld qword[ecx]
ftst
fnstsw ax
ffree st0
fincstp
sahf
je .rad_b0
stdcall glBegin,GL_LINE_LOOP
mov ebx,[slices]
mov dword[i],0
align 4
.cycle_4: ;for (i=0;i<slices;i++)
; {
; x = cos(i*da);
; y = sin(i*da);
; normal3f( x*nsign, y*nsign, nz*nsign );
; glVertex3f( x*baseRadius, y*baseRadius, 0.0 );
; }
cmp [i],ebx
jge .cycle_4_end
fild dword[i]
fmul qword[da]
fld st0
fcos
fstp dword[x] ;x = cos(i*da)
fsin
fstp dword[y] ;y = sin(i*da)
fld dword[nsign]
fmul dword[nz]
fstp dword[esp-4]
fld dword[nsign]
fmul dword[y]
fstp dword[esp-8]
fld dword[nsign]
fmul dword[x]
fstp dword[esp-12]
add esp,-12
call glNormal3f ;x*nsign, y*nsign, nz*nsign
push 0.0
fld qword[ecx]
fmul dword[y]
fstp dword[esp-4]
fld qword[ecx]
fmul dword[x]
fstp dword[esp-8]
add esp,-8
call glVertex3f ;x*baseRadius, y*baseRadius, 0.0
inc dword[i]
jmp .cycle_4
.cycle_4_end:
call glEnd
.rad_b0:
lea ecx,[topRadius]
fld qword[ecx]
ftst
fnstsw ax
ffree st0
fincstp
sahf
je .else2_end
stdcall glBegin,GL_LINE_LOOP
mov ebx,[slices]
mov dword[i],0
align 4
.cycle_5: ;for (i=0;i<slices;i++)
; {
; x = cos(i*da);
; y = sin(i*da);
; normal3f( x*nsign, y*nsign, nz*nsign );
; glVertex3f( x*topRadius, y*topRadius, height );
; }
cmp [i],ebx
jge .cycle_5_end
fild dword[i]
fmul qword[da]
fld st0
fcos
fstp dword[x] ;x = cos(i*da)
fsin
fstp dword[y] ;y = sin(i*da)
fld dword[nsign]
fmul dword[nz]
fstp dword[esp-4]
fld dword[nsign]
fmul dword[y]
fstp dword[esp-8]
fld dword[nsign]
fmul dword[x]
fstp dword[esp-12]
add esp,-12
call glNormal3f ;x*nsign, y*nsign, nz*nsign
fld qword[height]
fstp dword[esp-4]
fld qword[ecx]
fmul dword[y]
fstp dword[esp-8]
fld qword[ecx]
fmul dword[x]
fstp dword[esp-12]
add esp,-12
call glVertex3f ;x*topRadius, y*topRadius, height
inc dword[i]
jmp .cycle_5
.cycle_5_end:
call glEnd
; }
.else2_end:
; draw length lines
stdcall glBegin,GL_LINES
@@ -390,8 +438,7 @@ align 4
sub esp,12
call glNormal3f ;x*nsign, y*nsign, nz*nsign
mov dword[esp-4],0.0
mov ecx,[baseRadius]
fld qword[ecx]
fld qword[baseRadius]
fld st0
fmul dword[y]
fstp dword[esp-8]
@@ -399,11 +446,9 @@ align 4
fstp dword[esp-12]
sub esp,12
call glVertex3f ;x*baseRadius, y*baseRadius, 0.0
mov eax,[height]
fld qword[eax]
fld qword[height]
fstp dword[esp-4]
mov ecx,[topRadius]
fld qword[ecx]
fld qword[topRadius]
fld st0
fmul dword[y]
fstp dword[esp-8]
@@ -419,7 +464,7 @@ align 4
jmp .end_f
align 4
.else1:
cmp dword[edx+offs_qobj_DrawStyle],GLU_FILL
cmp dword[edx+GLUquadricObj.DrawStyle],GLU_FILL
jne .end_f
fld1
fidiv dword[slices]
@@ -453,8 +498,7 @@ align 4
fchs
fstp dword[x2] ;x2 = -sin((i+1)*da)
mov dword[z],0.0
mov ecx,[baseRadius]
fld qword[ecx]
fld qword[baseRadius]
fstp qword[r] ;r = baseRadius
mov dword[tcy],0.0
stdcall glBegin,GL_QUAD_STRIP
@@ -479,7 +523,7 @@ align 4
fstp dword[esp-12]
sub esp,12
call glNormal3f ;x1*nsign, y1*nsign, nz*nsign
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[edx+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f
stdcall glTexCoord2f, [tcx],[tcy]
@@:
@@ -504,7 +548,7 @@ align 4
fstp dword[esp-12]
sub esp,12
call glNormal3f ;x2*nsign, y2*nsign, nz*nsign
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[edx+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f
push dword[tcy]
fld dword[tcx]
@@ -535,7 +579,7 @@ align 4
fstp dword[esp-12]
sub esp,12
call glNormal3f ;x2*nsign, y2*nsign, nz*nsign
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[edx+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f
stdcall glTexCoord2f, [tcx],[tcy]
@@:
@@ -560,7 +604,7 @@ align 4
fstp dword[esp-12]
sub esp,12
call glNormal3f ;x1*nsign, y1*nsign, nz*nsign
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[edx+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f
push dword[tcy]
fld dword[tcx]
@@ -605,18 +649,164 @@ endp
; Disk (adapted from Mesa)
;void gluDisk(GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops )
;{
;}
align 16
proc gluDisk uses eax ebx ecx edx esi, qobj:dword,\
innerRadius:qword, outerRadius:qword, slices:dword, loops:dword
locals
a dq ?
da dq ?
dr dd ?
r1 dd ?
r2 dd ?
dtc dd ?
s dd ? ;int
sa dd ?
ca dd ?
endl
;ebx = s
;ecx = l
;esi = slices
mov ecx,[loops]
cmp ecx,1
jl .end_f
mov esi,[slices]
cmp esi,1
jl .end_f
mov edx,[qobj]
cmp dword[edx+GLUquadricObj.DrawStyle],GLU_FILL
jne .no_fill
fld1
cmp dword[edx+GLUquadricObj.Orientation],GLU_OUTSIDE
je @f
fchs
@@:
add esp,-4
fstp dword[esp]
stdcall glNormal3f,0.0,0.0
fldpi
fadd st0,st0
fidiv dword[slices]
fstp qword[da] ;da = 2.0*M_PI / slices
fld qword[outerRadius]
fsub qword[innerRadius]
fild dword[loops]
fdivp st1,st
fstp dword[dr] ;dr = (outerRadius-innerRadius) / loops
; texture of a gluDisk is a cut out of the texture unit square
; x, y in [-outerRadius, +outerRadius]; s, t in [0, 1] (linear mapping)
fld1
fadd st0,st0
fmul qword[outerRadius]
fstp dword[dtc] ;dtc = 2.0*outerRadius
fld qword[innerRadius]
fstp dword[r1]
align 4
.cycle_0: ;for (l=loops;l>0;l--)
fld dword[r1]
fadd dword[dr]
fstp dword[r2] ;r2 = r1 + dr
stdcall glBegin,GL_QUAD_STRIP
xor ebx,ebx
.cycle_1: ;for (s=0;s<=slices;s++)
cmp esi,ebx
jne .u1
fldz
fstp qword[a]
jmp .u2
align 4
.u1:
mov [s],ebx
fild dword[s]
fmul qword[da]
fstp qword[a]
.u2:
fld qword[a]
fld st0
fsin
fstp dword[sa] ;sa = sin(a)
fcos
fstp dword[ca] ;ca = cos(a)
cmp dword[edx+GLUquadricObj.TextureFlag],0
je @f
fld dword[ca]
fmul dword[r2]
fdiv dword[dtc]
fadd dword[fl_0_5]
fstp dword[esp-4]
fld dword[sa]
fmul dword[r2]
fdiv dword[dtc]
fadd dword[fl_0_5]
add esp,-8
fstp dword[esp]
call glTexCoord2f ;0.5+sa*r2/dtc,0.5+ca*r2/dtc
@@:
fld dword[r2]
fmul dword[ca]
fstp dword[esp-4]
fld dword[r2]
fmul dword[sa]
add esp,-8
fstp dword[esp]
call glVertex2f ;r2*sa, r2*ca
cmp dword[edx+GLUquadricObj.TextureFlag],0
je @f
fld dword[ca]
fmul dword[r1]
fdiv dword[dtc]
fadd dword[fl_0_5]
fstp dword[esp-4]
fld dword[sa]
fmul dword[r1]
fdiv dword[dtc]
fadd dword[fl_0_5]
add esp,-8
fstp dword[esp]
call glTexCoord2f ;0.5+sa*r1/dtc,0.5+ca*r1/dtc
@@:
fld dword[r1]
fmul dword[ca]
fstp dword[esp-4]
fld dword[r1]
fmul dword[sa]
add esp,-8
fstp dword[esp]
call glVertex2f ;r1*sa, r1*ca
inc ebx
cmp esi,ebx
jge .cycle_1
.cycle_1_end:
call glEnd
mov eax,[r2]
mov [r1],eax
dec ecx
jnz .cycle_0
jmp .end_f
align 4
.no_fill:
push [loops]
push [slices]
sub esp,8
fldz
fstp qword[esp]
glpush innerRadius
glpush outerRadius
stdcall gluCylinder, [qobj]
.end_f:
ret
endp
;
; Sphere (adapted from Mesa)
;
;input:
; float radius, int slices, int stacks
; double radius, int slices, int stacks
align 16
proc gluSphere qobj:dword, radius:dword, slices:dword, stacks:dword
proc gluSphere qobj:dword, radius:qword, slices:dword, stacks:dword
locals
rho dd ? ;float
drho dd ?
@@ -638,7 +828,7 @@ endl
pushad
mov eax,[qobj]
cmp dword[eax+offs_qobj_Normals],GLU_NONE ;if (qobj.Normals==GLU_NONE)
cmp dword[eax+GLUquadricObj.Normals],GLU_NONE ;if (qobj.Normals==GLU_NONE)
jne .els_0
mov dword[normals],GL_FALSE
jmp @f
@@ -646,7 +836,7 @@ align 4
.els_0:
mov dword[normals],GL_TRUE
@@:
cmp dword[eax+offs_qobj_Orientation],GLU_INSIDE ;if (qobj.Orientation==GLU_INSIDE)
cmp dword[eax+GLUquadricObj.Orientation],GLU_INSIDE ;if (qobj.Orientation==GLU_INSIDE)
jne .els_1
mov dword[nsign],-1.0
jmp @f
@@ -666,7 +856,7 @@ align 4
ffree st0
fincstp
cmp dword[eax+offs_qobj_DrawStyle],GLU_FILL ;if (qobj.DrawStyle==GLU_FILL)
cmp dword[eax+GLUquadricObj.DrawStyle],GLU_FILL ;if (qobj.DrawStyle==GLU_FILL)
jne .if_glu_line
; draw +Z end as a triangle fan
@@ -675,13 +865,13 @@ align 4
jne @f
stdcall glNormal3f, 0.0, 0.0, 1.0
@@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f
stdcall glTexCoord2f, 0.5,1.0
@@:
sub esp,4
fld dword[nsign]
fmul dword[radius]
fmul qword[radius]
fstp dword[esp]
stdcall glVertex3f, 0.0, 0.0 ;, nsign * radius
fld dword[drho]
@@ -728,7 +918,7 @@ align 4
sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@:
fld dword[radius]
fld qword[radius]
fld dword[z]
fmul st0,st1
fstp dword[esp-4]
@@ -754,7 +944,7 @@ align 4
fstp dword[d_t] ;1.0 / stacks
mov dword[t],1.0 ; because loop now runs from 0
mov ebx,[stacks]
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je .els_2
mov dword[i],0
mov [imax],ebx
@@ -820,11 +1010,11 @@ align 4
sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f
stdcall glTexCoord2f, [s],[t]
@@:
fld dword[radius]
fld qword[radius]
fld dword[z]
fmul st0,st1
fstp dword[esp-4]
@@ -868,7 +1058,7 @@ align 4
sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f
fld dword[t]
fsub dword[d_t]
@@ -879,7 +1069,7 @@ align 4
fadd dword[d_s]
fstp dword[s]
@@:
fld dword[radius]
fld qword[radius]
fld dword[z]
fmul st0,st1
fstp dword[esp-4]
@@ -910,7 +1100,7 @@ align 4
jne @f
stdcall glNormal3f, 0.0, 0.0, -1.0
@@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f
stdcall glTexCoord2f, 0.5,0.0
mov dword[s],1.0
@@ -918,7 +1108,7 @@ align 4
mov [t],ebx
@@:
sub esp,4
fld dword[radius]
fld qword[radius]
fchs
fmul dword[nsign]
fstp dword[esp]
@@ -970,14 +1160,14 @@ align 4
fincstp
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@:
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
je @f
stdcall glTexCoord2f, [s],[t]
fld dword[s]
fsub dword[d_s]
fstp dword[s]
@@:
fld dword[radius]
fld qword[radius]
fld dword[z]
fmul st0,st1
fstp dword[esp-4]
@@ -998,9 +1188,9 @@ align 4
align 4
.if_glu_line:
cmp dword[eax+offs_qobj_DrawStyle],GLU_LINE ;if (qobj.DrawStyle==GLU_LINE)
cmp dword[eax+GLUquadricObj.DrawStyle],GLU_LINE ;if (qobj.DrawStyle==GLU_LINE)
je @f
cmp dword[eax+offs_qobj_DrawStyle],GLU_SILHOUETTE ;if (qobj.DrawStyle==GLU_SILHOUETTE)
cmp dword[eax+GLUquadricObj.DrawStyle],GLU_SILHOUETTE ;if (qobj.DrawStyle==GLU_SILHOUETTE)
je @f
jmp .if_glu_point
align 4
@@ -1056,7 +1246,7 @@ align 4
sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@:
fld dword[radius]
fld qword[radius]
fld dword[z]
fmul st0,st1
fstp dword[esp-4]
@@ -1123,7 +1313,7 @@ align 4
sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@:
fld dword[radius]
fld qword[radius]
fld dword[z]
fmul st0,st1
fstp dword[esp-4]
@@ -1148,7 +1338,7 @@ align 4
align 4
.if_glu_point:
cmp dword[eax+offs_qobj_DrawStyle],GLU_POINT ;if (qobj.DrawStyle==GLU_POINT)
cmp dword[eax+GLUquadricObj.DrawStyle],GLU_POINT ;if (qobj.DrawStyle==GLU_POINT)
jne .end_f
; top and bottom-most points
@@ -1157,7 +1347,10 @@ align 4
jne @f
stdcall glNormal3f, 0.0,0.0,dword[nsign]
@@:
stdcall glVertex3f, 0.0,0.0,dword[radius]
sub esp,4
fld qword[radius]
fstp dword[esp]
stdcall glVertex3f, 0.0,0.0
cmp dword[normals],GL_TRUE
jne @f
sub esp,4
@@ -1167,7 +1360,7 @@ align 4
stdcall glNormal3f, 0.0,0.0 ;,-nsign
@@:
sub esp,4
fld dword[radius]
fld qword[radius]
fchs
fstp dword[esp]
stdcall glVertex3f, 0.0,0.0 ;,-radius
@@ -1220,7 +1413,7 @@ align 4
sub esp,12
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
@@:
fld dword[radius]
fld qword[radius]
fld dword[z]
fmul st0,st1
fstp dword[esp-4]

View File

@@ -1,15 +1,6 @@
; simple gl like driver for TinyGL and KolibriOS - porting iadn
struct TinyGLContext
gl_context dd ?
xsize dd ? ;+4
ysize dd ? ;+8
d_x dd ? ;+12
d_y dd ? ;+16
x dd ? ;+20
y dd ? ;+24
ends
include 'kosgl.inc'
;KOSGLContext kosglCreateContext(KOSGLContext shareList, int flags)
;{

View File

@@ -0,0 +1,15 @@
;Macro for double type parameters (8 bytes)
macro glpush GLDoubleVar {
push dword[GLDoubleVar+4]
push dword[GLDoubleVar]
}
struct TinyGLContext
gl_context dd ?
xsize dd ? ;+4
ysize dd ? ;+8
d_x dd ? ;+12
d_y dd ? ;+16
x dd ? ;+20
y dd ? ;+24
ends

View File

@@ -1,5 +1,6 @@
align 4
sp128f dd 128.0
fl_128 dd 128.0
fl_1e_3 dd 1.0e-3
align 4
proc glopMaterial uses eax ebx ecx edi esi, context:dword, p:dword
@@ -11,8 +12,7 @@ proc glopMaterial uses eax ebx ecx edi esi, context:dword, p:dword
cmp ecx,GL_FRONT_AND_BACK ;if (mode == GL_FRONT_AND_BACK)
jne @f
mov dword[ebx+4],GL_FRONT ;p[1].i=GL_FRONT
lea edi,[ebp+12]
stdcall glopMaterial,eax,edi
stdcall glopMaterial,eax,ebx
mov ecx,GL_BACK
@@:
lea edi,[eax+GLContext.materials]
@@ -58,7 +58,7 @@ align 4
add edi,GLMaterial.shininess
movsd
mov dword[edi],SPECULAR_BUFFER_RESOLUTION
fdiv dword[sp128f]
fdiv dword[fl_128]
fimul dword[edi]
fistp dword[edi] ;m.shininess_i = (v[0]/128.0f)*SPECULAR_BUFFER_RESOLUTION
jmp .end_f
@@ -185,15 +185,15 @@ align 4
cmp ecx,GL_SPOT_EXPONENT
jne @f
mov ecx,[ebx+12]
mov [edi+GLLight.spot_exponent],ecx ;l.spot_exponent=p[3]
mov [edx+GLLight.spot_exponent],ecx ;l.spot_exponent=p[3]
jmp .end_f
align 4
@@:
cmp ecx,GL_SPOT_CUTOFF
jne .end_spot_c
fld dword[ebp+12] ;float a=v.v[0]
fld dword[ebx+12] ;float a=v.v[0]
; assert(a == 180 || (a>=0 && a<=90));
fst dword[edi+GLLight.spot_cutoff] ;l.spot_cutoff=a
fst dword[edx+GLLight.spot_cutoff] ;l.spot_cutoff=a
fcom dword[an180f] ;if (a != 180)
fstsw ax
sahf
@@ -202,7 +202,7 @@ align 4
fmulp
fdiv dword[an180f]
fcos
fstp dword[edi+GLLight.cos_spot_cutoff] ;l.cos_spot_cutoff=cos(a * M_PI / 180.0)
fstp dword[edx+GLLight.cos_spot_cutoff] ;l.cos_spot_cutoff=cos(a * M_PI / 180.0)
jmp .end_f
@@:
ffree st0
@@ -213,21 +213,21 @@ align 4
cmp ecx,GL_CONSTANT_ATTENUATION
jne @f
mov ecx,[ebx+12]
mov [edi+GLLight.attenuation],ecx ;l->attenuation[0]=p[3]
mov [edx+GLLight.attenuation],ecx ;l->attenuation[0]=p[3]
jmp .end_f
align 4
@@:
cmp ecx,GL_LINEAR_ATTENUATION
jne @f
mov ecx,[ebx+12]
mov [edi+GLLight.attenuation+4],ecx ;l->attenuation[1]=p[3]
mov [edx+GLLight.attenuation+4],ecx ;l->attenuation[1]=p[3]
jmp .end_f
align 4
@@:
cmp ecx,GL_QUADRATIC_ATTENUATION
jne @f
mov ecx,[ebx+12]
mov [edi+GLLight.attenuation+8],ecx ;l->attenuation[2]=p[3]
mov [edx+GLLight.attenuation+8],ecx ;l->attenuation[2]=p[3]
jmp .end_f
align 4
@@: ;default:
@@ -356,22 +356,18 @@ align 4
ret
endp
align 4
fl_1e_3 dd 1.0e-3
; non optimized lightening model
align 16
proc gl_shade_vertex, context:dword, v:dword
locals
R dd ? ;float ebp-96
G dd ? ;float ebp-92
B dd ? ;float ebp-88
A dd ? ;float ebp-84
s V3 ;ebp-80
d V3 ;ebp-68
tmp dd ? ;float ebp-56
att dd ? ;float ebp-52
dot_spot dd ? ;float ebp-48
R dd ? ;float ebp-92
G dd ? ;float ebp-88
B dd ? ;float ebp-84
A dd ? ;float ebp-80
s V3 ;ebp-76
d V3 ;ebp-64
tmp dd ? ;float ebp-52
att dd ? ;float ebp-48
lR dd ? ;float ebp-44
lB dd ? ;float ebp-40
lG dd ? ;float ebp-36
@@ -396,8 +392,7 @@ pushad
mov esi,[v]
mov edx,[context]
mov ecx,edx
add ecx,GLContext.materials ;ecx(m) = &context.materials[0]
lea ecx,[edx+GLContext.materials] ;ecx(m) = &context.materials[0]
mov eax,[edx+GLContext.light_model_two_side]
mov [twoside],eax
@@ -410,7 +405,7 @@ pushad
fld dword[edx+GLContext.ambient_light_model]
fmul dword[ecx+GLMaterial.ambient]
fadd dword[ecx] ;GLMaterial.emission=0
fadd dword[ecx+GLMaterial.emission]
fstp dword[R] ;R=m.emission.v[0]+m.ambient.v[0]*context.ambient_light_model.v[0]
fld dword[edx+GLContext.ambient_light_model+4]
fmul dword[ecx+GLMaterial.ambient+4]
@@ -430,7 +425,7 @@ pushad
; ambient
fld dword[ecx+GLMaterial.ambient]
fmul dword[ebx] ;GLLight.ambient=0
fmul dword[ebx+GLLight.ambient]
fstp dword[lR] ;lR=l.ambient.v[0] * m.ambient.v[0]
fld dword[ecx+GLMaterial.ambient+4]
fmul dword[ebx+GLLight.ambient+4]
@@ -447,8 +442,8 @@ pushad
; light at infinity
ffree st0 ;l.position.v[3]
fincstp
mov eax,[ebx+GLLight.norm_position]
mov [d],eax ;d.X=l.norm_position.v[0]
mov eax,[ebx+GLLight.norm_position+offs_X]
mov [d+offs_X],eax ;d.X=l.norm_position.v[0]
mov eax,[ebx+GLLight.norm_position+offs_Y]
mov [d+offs_Y],eax ;d.Y=l.norm_position.v[1]
mov eax,[ebx+GLLight.norm_position+offs_Z]
@@ -460,9 +455,9 @@ align 4
; distance attenuation
ffree st0 ;l.position.v[3]
fincstp
fld dword[ebx+GLLight.position]
fsub dword[esi+GLVertex.ec]
fstp dword[d] ;d.X=l.position.v[0]-v.ec.v[0]
fld dword[ebx+GLLight.position+offs_X]
fsub dword[esi+GLVertex.ec+offs_X]
fstp dword[d+offs_X] ;d.X=l.position.v[0]-v.ec.v[0]
fld dword[ebx+GLLight.position+offs_Y]
fsub dword[esi+GLVertex.ec+offs_Y]
fstp dword[d+offs_Y] ;d.Y=l.position.v[1]-v.ec.v[1]
@@ -484,9 +479,9 @@ align 4
jbe @f ;if (dist>1.0e-3)
fld1
fdiv st0,st1
fld dword[d]
fld dword[d+offs_X]
fmul st0,st1
fstp dword[d]
fstp dword[d+offs_X]
fld dword[d+offs_Y]
fmul st0,st1
fstp dword[d+offs_Y]
@@ -509,8 +504,8 @@ align 4
ffree st0 ;dist
fincstp
.els_0_end:
fld dword[d]
fmul dword[n]
fld dword[d+offs_X]
fmul dword[n+offs_X]
fld dword[d+offs_Y]
fmul dword[n+offs_Y]
faddp
@@ -563,7 +558,6 @@ align 4
fmul dword[d+offs_Z]
faddp
fchs
fst dword[dot_spot]
cmp dword[twoside],0 ;if (twoside && dot_spot < 0)
je @f
ftst ;if (dot_spot<0)
@@ -702,7 +696,7 @@ align 4
@@:
shl dword[idx],2
add edi,dword[idx]
fld dword[edi+offs_spec_buf] ;dot_spec = specbuf.buf[idx]
fld dword[edi+GLSpecBuf.buf] ;dot_spec = specbuf.buf[idx]
fld dword[ebx+GLLight.specular]
fmul st0,st1
fmul dword[ecx+GLMaterial.specular]

View File

@@ -57,12 +57,13 @@ proc delete_list uses eax ebx ecx edx, context:dword, list:dword
; free param buffer
mov eax,[edx] ;eax = GLList.first_op_buffer
@@:
cmp eax,0
je .end_w
mov ecx,[eax+offs_gpbu_next]
or eax,eax
jz .end_w
mov ecx,[eax+GLParamBuffer.next]
stdcall gl_free,eax
mov eax,ecx
jmp @b
align 4
.end_w:
stdcall gl_free,edx
@@ -79,10 +80,10 @@ proc alloc_list uses ebx ecx, context:dword, list:dword
mov ecx,eax
stdcall gl_zalloc,sizeof.GLList
mov dword[ecx+offs_gpbu_next],0 ;ob.next=NULL
mov dword[ecx+GLParamBuffer.next],0 ;ob.next=NULL
mov dword[eax],ecx ;l.first_op_buffer=ob
mov dword[ecx+offs_gpbu_ops],OP_EndList ;ob.ops[0].op=OP_EndList
mov dword[ecx+GLParamBuffer.ops],OP_EndList ;ob.ops[0].op=OP_EndList
mov ebx,[context]
mov ebx,[ebx+GLContext.shared_state]
@@ -138,12 +139,12 @@ pushad
jle @f
mov edi,eax
stdcall gl_zalloc,sizeof.GLParamBuffer
mov dword[eax+offs_gpbu_next],0 ;=NULL
mov dword[eax+GLParamBuffer.next],0 ;=NULL
mov dword[edi+offs_gpbu_next],eax
mov dword[edi+GLParamBuffer.next],eax
lea esi,[edi+4*ebx]
mov dword[esi+offs_gpbu_ops],OP_NextBuffer
mov dword[esi+offs_gpbu_ops+4],eax
mov dword[esi+GLParamBuffer.ops],OP_NextBuffer
mov dword[esi+GLParamBuffer.ops+4],eax
mov dword[edx+GLContext.current_op_buffer],eax
xor ebx,ebx
@@ -168,8 +169,8 @@ push edi esi
mov ebx,[ebx]
lea eax,[op_table_str]
@@:
cmp ebx,0
je @f
or ebx,ebx
jz @f
cmp byte[eax],0
jne .no_dec
dec ebx
@@ -197,21 +198,24 @@ push edi esi
add ebx,4
inc esi
cmp byte[esi],'f'
cmp byte[esi],'f' ;float
jne @f
fld dword[ebx]
fstp qword[Data_Double]
call DoubleFloat_to_String
stdcall str_cat, edi,Data_String
@@:
cmp byte[esi],'d'
jne @f
cmp byte[esi],'C' ;const
je @f
cmp byte[esi],'d' ;integer
je @f
jmp .no_param
@@:
stdcall str_len,edi
add edi,eax
sub ecx,eax
mov eax,dword[ebx]
stdcall convert_int_to_str,ecx
@@:
.no_param:
inc esi
cmp byte[esi],0
@@ -307,8 +311,8 @@ proc glNewList uses eax ebx, list:dword, mode:dword
; assert(ebx->compile_flag == 0);
stdcall find_list,ebx,[list]
cmp eax,0
je @f
or eax,eax
jz @f
stdcall delete_list,ebx,[list]
@@:
stdcall alloc_list,ebx,[list]
@@ -347,8 +351,8 @@ align 4
proc glIsList, list:dword
call gl_get_context
stdcall find_list, eax,[list]
cmp eax,0 ;NULL
je @f
or eax,eax ;NULL
jz @f
mov eax,1
@@:
ret

View File

@@ -1,5 +1,5 @@
;
; функции для вычисления зеркального цвета (блики)
; functions for calculating specular color (glare)
;
align 4
@@ -10,49 +10,41 @@ locals
endl
mov dword[f_inc],SPECULAR_BUFFER_SIZE
mov ebx,[buf]
add ebx,offs_spec_buf
add ebx,GLSpecBuf.buf
mov dword[ebx],0.0 ;buf.buf[0] = 0.0
xor ecx,ecx
inc ecx
fld dword[shininess] ;сначала берем y
fld1
fidiv dword[f_inc]
fst dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE
fst dword[val]
fstp dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE
mov dword[val],0.0
align 4
.cycle_0: ;for (i = 1; i <= SPECULAR_BUFFER_SIZE; i++)
.cycle_0: ;for (i = 1; i < SPECULAR_BUFFER_SIZE; i++)
inc ecx
cmp ecx,SPECULAR_BUFFER_SIZE
jg @f
;Вычисляем x^y
jge @f
fld dword[shininess]
fld dword[val]
fadd dword[f_inc]
fst dword[val] ;val += f_inc
;need to calculate pow(val, shininess)
fyl2x ;Стек FPU теперь содержит: st0=z=y*log2(x):
;Теперь считаем 2**z:
fld st0 ;Создаем еще одну копию z
frndint ;Округляем
fyl2x ;the FPU stack now contains: st0=z=y*log2(x):
;now we count 2**z:
fld st0 ;copy z
frndint
fsubr st0,st1 ;st1=z, st0=z-trunc(z)
f2xm1 ;st1=z, st0=2**(z-trunc(z))-1
fld1
faddp ;st1=z, st0=2**(z-trunc(z))
fscale ;st1=z, st0=(2**trunc(z))*(2**(z-trunc(z)))=2**t
fxch st1
fstp st ;Результат остается на вершине стека st0
fstp st ;the result remains on the top of the stack st0
add ebx,4
fstp dword[ebx] ;buf.buf[i] = pow(val, shininess)
ffree st0 ;испорченный shininess
fincstp
fld dword[shininess] ;сначала берем y
fld dword[val]
fadd dword[f_inc]
fst dword[val] ;val += f_inc
inc ecx
jmp .cycle_0
@@:
ffree st0 ;val
fincstp
ffree st0 ;shininess
fincstp
mov dword[ebx+4],1.0
ret
endp
@@ -70,22 +62,22 @@ endl
.cycle_0:
or eax,eax ;while (found)
jz @f
cmp [eax+offs_spec_shininess_i],ebx ;while (found.shininess_i != shininess_i)
cmp [eax+GLSpecBuf.shininess_i],ebx ;while (found.shininess_i != shininess_i)
je @f
mov ecx,[oldest]
mov ecx,[ecx+offs_spec_last_used]
cmp [eax+offs_spec_last_used],ecx ;if (found.last_used < oldest.last_used)
mov ecx,[ecx+GLSpecBuf.last_used]
cmp [eax+GLSpecBuf.last_used],ecx ;if (found.last_used < oldest.last_used)
jge .end_0
mov [oldest],eax ;oldest = found
.end_0:
mov eax,[eax+offs_spec_next] ;found = found.next
mov eax,[eax+GLSpecBuf.next] ;found = found.next
jmp .cycle_0
@@:
cmp dword[found],0 ;if (found) /* hey, found one! */
je @f
mov eax,[found]
mov ecx,[edx+GLContext.specbuf_used_counter]
mov [eax+offs_spec_last_used],ecx ;found.last_used = context.specbuf_used_counter
mov [eax+GLSpecBuf.last_used],ecx ;found.last_used = context.specbuf_used_counter
inc dword[edx+GLContext.specbuf_used_counter]
jmp .end_f ;return found
@@:
@@ -102,21 +94,21 @@ endl
@@:
inc dword[edx+GLContext.specbuf_num_buffers]
mov ecx,[edx+GLContext.specbuf_first]
mov [eax+offs_spec_next],ecx
mov [eax+GLSpecBuf.next],ecx
mov [edx+GLContext.specbuf_first],eax
mov ecx,[edx+GLContext.specbuf_used_counter]
mov [eax+offs_spec_last_used],ecx
mov [eax+GLSpecBuf.last_used],ecx
inc dword[edx+GLContext.specbuf_used_counter]
mov [eax+offs_spec_shininess_i],ebx
mov [eax+GLSpecBuf.shininess_i],ebx
stdcall calc_buf, eax,dword[shininess]
jmp .end_f
.end_1:
; overwrite the lru buffer
;tgl_trace("overwriting spec buffer :(\n");
mov eax,[oldest]
mov [eax+offs_spec_shininess_i],ebx
mov [eax+GLSpecBuf.shininess_i],ebx
mov ecx,[edx+GLContext.specbuf_used_counter]
mov [eax+offs_spec_last_used],ecx
mov [eax+GLSpecBuf.last_used],ecx
inc dword[edx+GLContext.specbuf_used_counter]
stdcall calc_buf, eax,dword[shininess]
.end_f:

View File

@@ -17,9 +17,9 @@ proc find_texture uses ebx ecx, context:dword, h:dword
cmp dword[eax],0
je .no_found
mov ebx,[eax]
cmp dword[ebx+offs_text_handle],ecx
cmp dword[ebx+GLTexture.handle],ecx
je .found
mov eax,[ebx+offs_text_next]
mov eax,[ebx+GLTexture.next]
jmp @b
.no_found:
xor eax,eax ;ret NULL
@@ -32,36 +32,36 @@ proc free_texture uses eax ebx ecx edx, context:dword, h:dword
mov edx,[context]
stdcall find_texture,edx,[h] ;t=find_texture(context,h)
cmp dword[eax+offs_text_prev],0 ;if (t.prev==NULL)
cmp dword[eax+GLTexture.prev],0 ;if (t.prev==NULL)
jne .else
mov edx,[edx+GLContext.shared_state+4] ;edx = &context.shared_state.texture_hash_table[0]
mov ebx,[eax+offs_text_handle]
mov ebx,[eax+GLTexture.handle]
and ebx,0xff
shl ebx,2
add edx,ebx ;edx = &context.shared_state.texture_hash_table[t.handle % TEXTURE_HASH_TABLE_SIZE]
mov ebx,[eax+offs_text_next]
mov ebx,[eax+GLTexture.next]
mov [edx],ebx ;*ht=t.next
jmp @f
.else:
mov ebx,[eax+offs_text_prev]
mov ecx,[eax+offs_text_next]
mov [ebx+offs_text_next],ecx ;t.prev.next=t.next
mov ebx,[eax+GLTexture.prev]
mov ecx,[eax+GLTexture.next]
mov [ebx+GLTexture.next],ecx ;t.prev.next=t.next
@@:
cmp dword[eax+offs_text_next],0 ;if (t.next!=NULL)
cmp dword[eax+GLTexture.next],0 ;if (t.next!=NULL)
je @f
mov ebx,[eax+offs_text_next]
mov ecx,[eax+offs_text_prev]
mov [ebx+offs_text_prev],ecx ;t.next.prev=t.prev
mov ebx,[eax+GLTexture.next]
mov ecx,[eax+GLTexture.prev]
mov [ebx+GLTexture.prev],ecx ;t.next.prev=t.prev
@@:
xor ebx,ebx
mov ecx,[eax+offs_text_images] ;im=&t.images[0]
mov ecx,[eax+GLTexture.images] ;im=&t.images[0]
.cycle_0: ;for(i=0;i<MAX_TEXTURE_LEVELS;i++)
cmp ebx,MAX_TEXTURE_LEVELS
jge .cycle_0_end
cmp dword[ecx+offs_imag_pixmap],0 ;if (im.pixmap != NULL)
cmp dword[ecx+GLImage.pixmap],0 ;if (im.pixmap != NULL)
je @f
stdcall gl_free,[ecx+offs_imag_pixmap]
stdcall gl_free,[ecx+GLImage.pixmap]
@@:
add ecx,sizeof.GLImage
inc ebx
@@ -87,16 +87,16 @@ proc alloc_texture uses ebx ecx, context:dword, h:dword
add ecx,ebx ;ecx = &context.shared_state.texture_hash_table[h % TEXTURE_HASH_TABLE_SIZE]
mov ebx,[ecx]
mov [eax+offs_text_next],ebx
mov dword[eax+offs_text_prev],0 ;NULL
cmp dword[eax+offs_text_next],0 ;NULL
mov [eax+GLTexture.next],ebx
mov dword[eax+GLTexture.prev],0 ;NULL
cmp dword[eax+GLTexture.next],0 ;NULL
je @f
mov [eax+offs_text_prev],eax
mov [eax+GLTexture.prev],eax
@@:
mov [ecx],eax
mov ebx,[h]
mov [eax+offs_text_handle],ebx
mov [eax+GLTexture.handle],ebx
ret
endp
@@ -129,11 +129,11 @@ proc glGenTextures uses eax ebx ecx edx esi, n:dword, textures:dword
.cycle_1: ;while (t!=NULL)
or edx,edx
jz .cycle_1_end
cmp [edx+offs_text_handle],ebx ;if (t.handle>max)
cmp [edx+GLTexture.handle],ebx ;if (t.handle>max)
jle @f
mov ebx,[edx+offs_text_handle] ;max=t.handle
mov ebx,[edx+GLTexture.handle] ;max=t.handle
@@:
mov edx,[edx+offs_text_next] ;t=t.next
mov edx,[edx+GLTexture.next] ;t=t.next
jmp .cycle_1
.cycle_1_end:
inc ecx
@@ -266,22 +266,22 @@ align 4
mov ecx,[context]
mov ecx,[ecx+GLContext.current_texture]
add ecx,offs_text_images
add ecx,GLTexture.images
imul ebx,sizeof.GLTexture
add ecx,ebx ;ecx = &context.current_texture.images[level]
mov [ecx+offs_imag_xsize],edx ;im.xsize=width
mov [ecx+offs_imag_ysize],esi ;im.ysize=height
mov [ecx+GLImage.xsize],edx ;im.xsize=width
mov [ecx+GLImage.ysize],esi ;im.ysize=height
mov ebx,edx
dec ebx
shl ebx,ZB_POINT_TEXEL_SIZE
mov [ecx+offs_imag_s_bound],ebx ;im.s_bound = (unsigned int)(width-1)
mov [ecx+GLImage.s_bound],ebx ;im.s_bound = (unsigned int)(width-1)
shr ebx,ZB_POINT_TEXEL_SIZE
mov dword[ecx+offs_imag_xsize_log2],ZB_POINT_TEXEL_SIZE
mov dword[ecx+GLImage.xsize_log2],ZB_POINT_TEXEL_SIZE
or ebx,ebx
jz .set_l2
@@:
dec dword[ecx+offs_imag_xsize_log2]
dec dword[ecx+GLImage.xsize_log2]
shr ebx,1
or ebx,ebx
jnz @b
@@ -289,18 +289,18 @@ align 4
;im.xsize_log2 = ZB_POINT_TEXEL_SIZE-log_2(width)
dec esi
shl esi,ZB_POINT_TEXEL_SIZE
mov [ecx+offs_imag_t_bound],esi ;im.t_bound = (unsigned int)(height-1)
mov [ecx+GLImage.t_bound],esi ;im.t_bound = (unsigned int)(height-1)
shr esi,ZB_POINT_TEXEL_SIZE
inc esi
cmp dword[ecx+offs_imag_pixmap],0 ;if (im.pixmap!=NULL)
cmp dword[ecx+GLImage.pixmap],0 ;if (im.pixmap!=NULL)
je @f
stdcall gl_free, [ecx+offs_imag_pixmap]
stdcall gl_free, [ecx+GLImage.pixmap]
@@:
if TGL_FEATURE_RENDER_BITS eq 24
imul edx,esi
imul edx,3
stdcall gl_malloc,edx
mov [ecx+offs_imag_pixmap],eax ;im.pixmap = gl_malloc(width*height*3)
mov [ecx+GLImage.pixmap],eax ;im.pixmap = gl_malloc(width*height*3)
or eax,eax ;if(im.pixmap)
jz @f
mov edi,eax
@@ -314,7 +314,7 @@ if TGL_FEATURE_RENDER_BITS eq 32
imul edx,esi
shl edx,2
stdcall gl_malloc,edx
mov [ecx+offs_imag_pixmap],eax ;im.pixmap = gl_malloc(width*height*4)
mov [ecx+GLImage.pixmap],eax ;im.pixmap = gl_malloc(width*height*4)
or eax,eax ;if(im.pixmap)
jz @f
;gl_convertRGB_to_8A8R8G8B(eax,[pixels1],ebx,esi)

View File

@@ -86,14 +86,14 @@ endl
fdiv st0,st1 ;st0 = 0.5
fild dword[eax+GLViewport.xsize]
fsub st0,st1
fsub dword[fl_1e_3]
fdiv st0,st2
fst dword[eax+GLViewport.scale+offs_X]
fiadd dword[eax+GLViewport.xmin]
fstp dword[eax+GLViewport.trans+offs_X]
fild dword[eax+GLViewport.ysize]
fsub st0,st1
fsub dword[fl_1e_3]
fdiv st0,st2
fchs
fst dword[eax+GLViewport.scale+offs_Y]
@@ -134,21 +134,13 @@ endl
cmp dword[edx+GLContext.lighting_enabled],0 ;if(context.lighting_enabled)
jne .if_0
cmp dword[eax+GLContext.texture_2d_enabled],0
jne .if_0
jmp @f
cmp dword[edx+GLContext.texture_2d_enabled],0
je @f
align 4
.if_0:
if DEBUG ;context.matrix_stack_ptr[0]
stdcall gl_print_matrix,dword[edx+GLContext.matrix_stack_ptr],4
end if
; precompute inverse modelview
lea ebx,[ebp-sizeof.M4]
stdcall gl_M4_Inv, ebx,dword[edx+GLContext.matrix_stack_ptr]
if DEBUG ;tmp
stdcall dbg_print,txt_sp,txt_nl
stdcall gl_print_matrix,ebx,4
end if
push ebx
lea ebx,[edx+GLContext.matrix_model_view_inv]
stdcall gl_M4_Transpose, ebx
@@ -253,8 +245,7 @@ pushad
cmp dword[eax+GLContext.lighting_enabled],0 ;if (context.lighting_enabled)
jne @f
cmp dword[eax+GLContext.texture_2d_enabled],0
jne @f
jmp .els_0
je .els_0
align 4
@@:
; eye coordinates needed for lighting

View File

@@ -51,16 +51,11 @@ struct GLSpecBuf
next dd ? ;struct GLSpecBuf*
ends
offs_spec_shininess_i equ 0
offs_spec_last_used equ 4
offs_spec_buf equ 8
offs_spec_next equ 8+4*(SPECULAR_BUFFER_SIZE+1)
struct GLLight
ambient V4
diffuse V4
ambient V4
diffuse V4
specular V4
position V4
position V4
spot_direction V3
spot_exponent dd ? ;float
spot_cutoff dd ? ;float
@@ -102,9 +97,6 @@ struct GLParamBuffer
next dd ? ;struct GLParamBuffer*
ends
offs_gpbu_ops equ 0
offs_gpbu_next equ 4*OP_BUFFER_MAX_SIZE
struct GLList
first_op_buffer dd ? ;GLParamBuffer*
; TODO: extensions for an hash table or a better allocating scheme
@@ -133,29 +125,17 @@ struct GLImage
t_bound dd ? ;unsigned int
ends
offs_imag_pixmap equ 0
offs_imag_xsize equ 4
offs_imag_ysize equ 8
offs_imag_xsize_log2 equ 12
offs_imag_s_bound equ 16
offs_imag_t_bound equ 20
; textures
TEXTURE_HASH_TABLE_SIZE equ 256 ;должно быть кратное 2, в коде берется остаток от деления (через and быстрее чем div)
struct GLTexture
images rb sizeof.GLImage * MAX_TEXTURE_LEVELS ;GLImage[MAX_TEXTURE_LEVELS]
images rd (sizeof.GLImage * MAX_TEXTURE_LEVELS)/4 ;GLImage[MAX_TEXTURE_LEVELS]
handle dd ? ;int
next dd ? ;struct GLTexture*
prev dd ? ;struct GLTexture*
ends
offs_text_images equ 0
offs_text_handle equ sizeof.GLImage*MAX_TEXTURE_LEVELS
offs_text_next equ 4+offs_text_handle
offs_text_prev equ 8+offs_text_handle
; shared state
struct GLSharedState

View File

@@ -17,7 +17,7 @@ proc ZB_plot uses eax ebx ecx edx edi, zb:dword, p:dword
mov edi,[ebx+ZBufferPoint.z]
shr edi,ZB_POINT_Z_FRAC_BITS
cmp di,word[ecx]
jl .end_f
jb .end_f
if TGL_FEATURE_RENDER_BITS eq 24
mov eax,[ebx+ZBufferPoint.r]
mov byte[edx],ah

View File

@@ -101,7 +101,7 @@ local .end_0
mov [zz],eax
mov ebx,[pz]
cmp ax,word[ebx]
jl .end_0
jb .end_0
RGBPIXEL
mov eax,dword[zz]
mov ebx,[pz]
@@ -114,9 +114,7 @@ end if
macro DRAWLINE d_x,d_y,inc_1,inc_2
{
local .mz_0
local .mz_1
local .mz_2
mov eax,d_x
mov [n],eax
@@ -124,26 +122,12 @@ if INTERP_Z eq 1
mov ebx,[p1]
mov eax,[p2]
mov eax,[eax+ZBufferPoint.z]
cmp eax,[ebx+ZBufferPoint.z]
jg .mz_0
je .mz_1
;if(p2.z<p1.z)
sub eax,[ebx+ZBufferPoint.z]
neg eax
inc eax
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mz_2
.mz_0:
sub eax,[ebx+ZBufferPoint.z]
xor edx,edx
div dword[n]
jmp .mz_2
jz .mz_1
;if(p2.z!=p1.z)
cdq
idiv dword[n]
.mz_1:
xor eax,eax
.mz_2:
mov [zinc],eax ;zinc=(p2.z-p1.z)/n
end if
shl dword d_y,1

View File

@@ -102,7 +102,7 @@ local .end_0
mov [zz],eax
mov ebx,[pz]
cmp ax,word[ebx]
jl .end_0
jb .end_0
RGBPIXEL
mov eax,dword[zz]
mov ebx,[pz]
@@ -115,18 +115,10 @@ end if
macro DRAWLINE d_x,d_y,inc_1,inc_2
{
local .mz_0
local .mz_1
local .mz_2
local .mr_0
local .mr_1
local .mr_2
local .mg_0
local .mg_1
local .mg_2
local .mb_0
local .mb_1
local .mb_2
mov eax,d_x
mov [n],eax
@@ -135,103 +127,44 @@ local .mb_2
mov ecx,[p2]
if INTERP_Z eq 1
mov eax,[ecx+ZBufferPoint.z]
cmp eax,[ebx+ZBufferPoint.z]
jg .mz_0
je .mz_1
;if(p2.z<p1.z)
sub eax,[ebx+ZBufferPoint.z]
neg eax
inc eax
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mz_2
.mz_0:
sub eax,[ebx+ZBufferPoint.z]
xor edx,edx
div dword[n]
jmp .mz_2
jz .mz_1
;if(p2.z!=p1.z)
cdq
idiv dword[n]
.mz_1:
xor eax,eax
.mz_2:
mov [zinc],eax ;zinc=(p2.z-p1.z)/n
end if
;ebx=&p1, ecx=&p2
mov eax,[ecx+ZBufferPoint.r]
cmp eax,[ebx+ZBufferPoint.r]
jg .mr_0
je .mr_1
;if(p2.r<p1.r)
sub eax,[ebx+ZBufferPoint.r]
neg eax
inc eax
shl eax,8
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mr_2
.mr_0:
sub eax,[ebx+ZBufferPoint.r]
shl eax,8
xor edx,edx
div dword[n]
jmp .mr_2
jz .mr_1
;if(p2.r!=p1.r)
shl eax,8
cdq
idiv dword[n]
.mr_1:
xor eax,eax
.mr_2:
mov [rinc],eax ;rinc=((p2.r-p1.r)<<8)/n
mov eax,[ecx+ZBufferPoint.g]
cmp eax,[ebx+ZBufferPoint.g]
jg .mg_0
je .mg_1
;if(p2.g<p1.g)
sub eax,[ebx+ZBufferPoint.g]
neg eax
inc eax
shl eax,8
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mg_2
.mg_0:
sub eax,[ebx+ZBufferPoint.g]
shl eax,8
xor edx,edx
div dword[n]
jmp .mg_2
jz .mg_1
;if(p2.g!=p1.g)
shl eax,8
cdq
idiv dword[n]
.mg_1:
xor eax,eax
.mg_2:
mov [ginc],eax ;ginc=((p2.g-p1.g)<<8)/n
mov eax,[ecx+ZBufferPoint.b]
cmp eax,[ebx+ZBufferPoint.b]
jg .mb_0
je .mb_1
;if(p2.b<p1.b)
sub eax,[ebx+ZBufferPoint.b]
neg eax
inc eax
shl eax,8
xor edx,edx
div dword[n]
neg eax
inc eax
jmp .mb_2
.mb_0:
sub eax,[ebx+ZBufferPoint.b]
shl eax,8
xor edx,edx
div dword[n]
jmp .mb_2
jz .mb_1
;if(p2.b!=p1.b)
shl eax,8
cdq
idiv dword[n]
.mb_1:
xor eax,eax
.mb_2:
mov [binc],eax ;binc=((p2.b-p1.b)<<8)/n
shl dword d_y,1

View File

@@ -58,7 +58,7 @@ end if
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
jl .end_0
jb .end_0
;edi = pp
mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24
@@ -103,7 +103,7 @@ local .end_0
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
jl .end_0
jb .end_0
;edi = pp
mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24
@@ -171,7 +171,7 @@ local .end_0
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
jl .end_0
jb .end_0
;edi = pp
mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24
@@ -251,7 +251,7 @@ local .end_0
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
jl .end_0
jb .end_0
;edi = pp
mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24

View File

@@ -393,20 +393,9 @@ align 4
mov [dx1],eax ;dx1 = l2.x - l1.x
cmp edx,0 ;if (dy1 > 0)
jle .els_3
xor edx,edx
cmp eax,0
jl .otr_dx1
shl eax,16
div dword[dy1] ;eax = (dx1 << 16) / dy1
jmp .end_3
align 4
.otr_dx1:
neg eax
inc eax
shl eax,16
div dword[dy1] ;eax = (-dx1 << 16) / dy1
neg eax
inc eax
cdq
idiv dword[dy1] ;eax = (dx1 << 16) / dy1
jmp .end_3
align 4
.els_3:
@@ -505,7 +494,6 @@ end if
.end_upd_l:
; compute values for the right edge
cmp dword[update_right],0 ;if(update_right)
je .end_upd_r
mov ebx,[pr1]
@@ -521,20 +509,9 @@ end if
mov [dy2],edx ;dy2 = pr2.y - pr1.y
cmp edx,0 ;if (dy2 > 0)
jle .els_4
xor edx,edx
cmp eax,0
jl .otr_dx2
shl eax,16
div dword[dy2] ;eax = (dx2 << 16) / dy2
jmp .end_4
align 4
.otr_dx2:
neg eax
inc eax ;dx2 *= -1
shl eax,16
div dword[dy2] ;eax = (-dx2 << 16) / dy2
neg eax
inc eax
cdq
idiv dword[dy2] ;eax = (dx2 << 16) / dy2
jmp .end_4
align 4
.els_4:

View File

@@ -170,6 +170,7 @@ proc tl_key uses ebx ecx edi, tlist:dword
cmp tl_on_press,0
je @f
call tl_on_press
jmp .no_edit
@@:
cmp ah,byte[ecx+1] ;Space
jne @f

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2020. All rights reserved. ;;
;; Copyright (C) KolibriOS team 2004-2025. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;; HTTP library for KolibriOS ;;
@@ -2021,15 +2021,15 @@ str_head db 'HEAD ', 0
str_post db 'POST ', 0
bits_must_escape:
dd 0xffffffff ; 00-1F
dd 1 shl 0 + 1 shl 2 + 1 shl 3 + 1 shl 5 + 1 shl 28 + 1 shl 30 ; "#%<>
dd 1 shl 27 + 1 shl 28 + 1 shl 29 + 1 shl 30 ;[\]^
dd 1 shl 0 + 1 shl 27 + 1 shl 28 + 1 shl 29 + 1 shl 31 ;`{|} DEL
dd 0xffffffff
dd 0xffffffff
dd 0xffffffff
dd 0xffffffff
; bit 31 <======== ========> bit 0 ; bit 0 ===> bit 31
dd 0xffffffff ;00-1F
dd 11111100_00000000_10011111_11111111b ; !"#$%&'()*+,/:;<=>?
dd 01111000_00000000_00000000_00000001b ;@[\]^
dd 10111000_00000000_00000000_00000001b ;`{|} DEL
dd 0xffffffff ;80-9F
dd 0xffffffff ;A0-BF
dd 0xffffffff ;C0-DF
dd 0xffffffff ;E0-FF
str_hex:
db '0123456789ABCDEF'

View File

@@ -13,7 +13,7 @@ sz app_board ,'/sys/develop/board',0
sz app_tinypad ,'/sys/tinypad',0
sz app_docpak ,'/sys/docpack',0
sz sysfuncs_param,'f',0
sz sysfuncs_param,'e',0
include 'tp-tables.inc'
include 'tp-locale.inc'

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
tup.rule("PrMK.asm", FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "PrMK")

View File

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Some files were not shown because too many files have changed in this diff Show More