Go to file
Simon Anciaux 52124edcd8 Avoid rendering rectangles (and characters) that are outside the window bounds.
While debugging an issue with the dx11 backend, I noticed that 4coder only clipped rectangles that are outside the screen vertically. Another potential issue (it might be the intended behavior) causes some things to not work with line wrapping, which means that we could have very long horizontal lines, causing a lot of vertices being sent through the render pipeline that will just be clipped after the vertex shader. This causes higher than necessary GPU memory usage, and low performance for things that aren't rendered in the end.

An example of problematic is:
```c
u8 data[ ] = {0,0,0,0,...,0}; // With a lot of zero, and no space between them.
```

This fix just checks that at least one vertex of each rectangle we try to draw is in the screen. It would be better to use the current clip rect, but it's not available at that point in the pipeline. If we want we can modify the API a little to pass it down, as a parameter to those functions.

Using RenderDoc, I saw the vertex count going from over 500K to 13K with this change, and the performance were from 57ms to 25ms. So perfs are not great (but still an improvement), but testing the bounds of 500K vertices is not free. Fixing the line wrapping issue would probably help getting back to reasonable frame rate.
2025-07-07 13:05:06 -07:00
build_new Cleaning up build-config.sh 2025-07-07 09:37:12 -07:00
code Avoid rendering rectangles (and characters) that are outside the window bounds. 2025-07-07 13:05:06 -07:00
non-source Adding freetype.lib for x64 windows dependencies 2024-03-27 13:49:16 -07:00
triage Implement new build system 2025-07-06 12:44:54 -07:00
.gitignore Implement new build system 2025-07-06 12:44:54 -07:00
4ed.rdbg Implemented custom modal bindings 2024-02-10 15:38:37 -08:00
README.md Update Readme 2023-10-28 13:14:22 +01:00
TODO.md Added scope highlight colors 2024-05-13 17:24:33 -07:00
project.4coder set NSApp activateIgnoringOtherApps to YES 2025-04-24 16:18:01 -07:00

README.md

4Coder Community

Welcome to the 4coder community repository.

Building

Windows

  1. Setup the MSVC toolchain in your environment, this can be done with the code/custom/bin/setup_cl_x64.bat script
  2. call the package.bat script from the code directory
    1. $ cd 4cc\code
    2. .\bin\package.bat
  3. You can also use the build.bat script if you want just build the binaries, this does not copy the default config, fonts and bindings
    1. $ cd 4cc\code
    2. $ .\bin\build.bat

Linux

tested on Ubuntu 22.04:

  1. Get required libraries (apt names):

    • $ sudo apt install build-essential libx11-dev libxfixes-dev libglx-dev mesa-common-dev libasound2-dev libfreetype-dev libfontconfig-dev
  2. Use the package-linux.sh script to build and package an application

    1. $ cd 4cc/code
    2. $ ./bin/package-linux.sh
  3. You can also use the build-linux.sh script if you want just build the binaries, this does not copy the default config, fonts and bindings

    1. $ cd 4cc/code
    2. $ ./bin/build-linux.sh

Mac (Untested)

  1. The steps should be the same as linux but replace the *-linux.sh with their *-mac.sh equivalents.