#Vulpengine (Antho's Weird Graphical Club)

904 messages · Page 1 of 1 (latest)

bright pivot
#

I don't current have much to show for this atm since its being rebuilt from the ground up. The older codebase dates back years ago and was broken in many ways. Main thing this code rework is the improve abstractions and make apis more consistant and powerful.

main latch
#

third

bright pivot
#

third?

main latch
#

fifth

bright pivot
#

Finally got an abstraction for buffers, vertex arrays and meshes

drifting roost
#

I'm not really abstracting those myself

#

there's definitely value in it though

bright pivot
#

I'm revisiting vulkan atm since if I'm going to redo a codebase may as well give it another shot

nimble onyx
#

No screenshots?

bright pivot
#

all i got is code sceenies

#

heres the current code for making the buffers and all that

struct Vec3f32 final {
    float x, y;
};

struct Vertex final {
    Vec3f32 position;
};

Vertex positions[] = {
    { -0.5f, -0.5f },
    {  0.5f, -0.5f },
    {  0.0f,  0.5f }
};

unsigned int indices[] = { 0, 1, 2 };

vulpengine::experimental::Buffer vertexBuffer = {{
    .content = std::as_bytes(std::span(positions)),
    .flags = GL_NONE,
    .label = "Test vertex buffer"
}};

vulpengine::experimental::Buffer indexBuffer = {{
    .content = std::as_bytes(std::span(indices)),
    .flags = GL_NONE,
    .label = "Test index buffer"
}};

vulpengine::experimental::VertexArray vertexArray = {{
    .buffers = std::array {
        vulpengine::experimental::VertexArray::BufferInfo {
            .buffer = vertexBuffer,
            .offset = 0,
            .stride = sizeof(Vertex),
            .divisor = 0
        }
    },
    .attributes = std::array {
        vulpengine::experimental::VertexArray::AttributeInfo {
            .size = 2,
            .type = GL_FLOAT,
            .relativeoffset = offsetof(Vertex, position),
            .bindingindex = 0,
        }
    },
    .indexBuffer = vulpengine::experimental::wrap_cref(indexBuffer),
    .label = "Test vertex array"
}};

mMesh = {{
    .vertexArray = std::move(vertexArray),
    .buffers = std::array {
        vulpengine::experimental::wrap_rvref(vertexBuffer),
        vulpengine::experimental::wrap_rvref(indexBuffer),
    },
    .mode = GL_TRIANGLES,
    .count = 3,
    .type = GL_UNSIGNED_INT
}};```
#

some things i had to use weird wrappers which is annoying but this works nicely so far

#

the next thing i to get shaders abstracted in a nice way

#

but since we going 4.6 i may introduce runtime compilation or something

drifting roost
bright pivot
#

nothing exciting

drifting roost
#

It has begun

bright pivot
#

but next up we toss in the shader stuff and get a mesh in there

bright pivot
#

beautiful my 30 second blender mesh be drawin

#

we dont talk about it XD

bright pivot
#

and some simple diffuse light, so now we go and implement the new stuff!

#

also yes im injecting the renderdoc dll into the app at start up, i aint doing shit without renderdoc on hand

bright pivot
#

custom renderdoc ui, this is so helpful to have

#

you can even control what shows in the renderdoc overlay

#

i belive you can do this with directx and vulkan capturing too

bright pivot
#

im also documenting the engine as i go, its very helpful

drifting roost
#

how did you do a custom renderdoc UI?

#

is that documented?

#

ooh

#

neat

bright pivot
#

made a SUPER basic chunk, obvously from the overdraw, we gotta do that internal culling

main latch
#

white is good right? KEKW

bright pivot
#

uhh nooooo

#

purple is good

main latch
#

(I know I was pulling your leg)

bright pivot
main latch
#

so you want to make minecraft huh

#

name every block

bright pivot
#

easy

#

minecraft:.+

main latch
#

nbt

#

banned

bright pivot
#

lmao

#

not too hard to improve

main latch
#

now do cross chunk mesh generation

bright pivot
#

theres only one chunk lmao

#

plus i broke a few things while implementing the camera

main latch
#

do more

#

"4 trillion blocks"

bright pivot
#

let me fix the input code lmao

main latch
#

Minecraft "IGoByLotsOfNames" develops a game prioritizing game optimization while preserving game graphics. The result is gaming.

0:00 Intro
0:49 Basic Rendering
1:25 Optimization & Culling
3:06 Compiler optimization
4:05 Level of detail (LOD) system
4:36 Greedy meshing
5:11 Using multithreading
5:47 Terrain generation
6:38 Adding gameplay
7:23...

▶ Play video
#

(funniest shit I've ever seen)

bright pivot
#

willing to bet it shows all the techiques for optimising voxels ive already seen

main latch
#

it actually shows nothing it's just memes

bright pivot
#

:0

main latch
#

it's zoomer editing so beware

bright pivot
#

jonnny test editing x.x

main latch
#

more like max0r editing

bright pivot
#

good video

#

informative but memed

#

i like it

bright pivot
#

fixed the input problems, some weird event ordering issues but took that as a good opportunity to get an event system

bright pivot
#

a lil something together

#

chunk borders are already handled, just gotta look into directional face culling

bright pivot
#

some simple little guis to help, cleaned up the input handing so its feels pretty nice to handle cursor locks and unlocks

#

Basically the handing on cursor lock atm is like this:

  • If the cursor is locked then the guis cannot be interacted with and the camera can be moved
  • Left clicking on a on non gui element will lock the cursor
  • Pressing escape will unlock the cursor
  • Holding alt will temporarily unlock the cursor but relock it after releasing the key
  • Cursor is unlocked when the window loses focus
main latch
#

how do you prevent imgui from registering events with cursor locked

bright pivot
#

yes

#

theres config flags for it

#
// Use this to prevent cursor lock if interacting with guis
ImGui::GetIO().WantCaptureMouse

// Disable imgui inputs when locking the cursor
ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_NoMouse;
ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_NoKeyboard;

// Enable imgui inputs when unlocking the cursor
ImGui::GetIO().ConfigFlags &= ~ImGuiConfigFlags_NoMouse;
ImGui::GetIO().ConfigFlags &= ~ImGuiConfigFlags_NoKeyboard;
main latch
#

is WantCaptureMouse an input variable as well?

bright pivot
#

this lets me keep the uis open but allow the in game camera to work as expected without interacting with them

#

plus binding it to the alt key makes handling alt+tab very graceful

bright pivot
#

Got multithreading and chunk generation to work across boundaries vertical slices, we have frustum culling working and culling between chunks, next step is getting stuff ready to generate as you move around, may work on getting threaded work queues and that going too

#

also had to disable some iterator checks cause otherwise debug in msvc is slow asf (brought launch time from 20s to about 3s)

nimble onyx
#

get yourself a develop config

#

#engine-dev message

#

it's very useful

#

I've been using it since then and never had to go back to debug and was able to use breakpoints just fine

bright pivot
#

thats stuff i do most of already, its just that in debug mode in msvc theres very time consuming iterator checks

nimble onyx
#

very strange that they would take place even with those settings

bright pivot
#

main issue atm is that its generating everything upfront so you have to wait for it to finish

nimble onyx
#

since they're basically taken from release

#

(more or less kinda)

bright pivot
#

i specifically stay on debug early on plus changing a single define to fix the slow debug std::vector is plenty fix for me

nimble onyx
#

hmm your call

#

I don't really want to go back to a debug build ever unless for some reason breakpoints aren't helping at all and printf isn't an option

bright pivot
#

i already have 3 configs for stuff like this, im just in debug still since im working around threads which easily get very mad

#

but once i get all that verified to work as it should yeah, getting out of full debug

#

i never really considered to call the config develop tho, i just added another based on release and called it dist which fully goes for speed and no debug and i modified release to allow some debugging when needed

#

im really not looking forward to getting condition variables working though

#

Generally im not too sure how to go about the work queues, ive just always went on my existing knowlege for it
So my assumption is to spawn a number of threads equal to your cpu thread count. (12 in my case)
And you have a queue of work that the threads pull work off of, and when theres no work available youll use a condition variable to allow the thread to sleep without maxing a core

bright pivot
#

somehow i managed to get the threading to work correctly

bright pivot
#

casually having massive render distances

#

10k renderable chunks, 4k being drawn

main latch
#

now do caves

bright pivot
#

Bigger problem is that there's only 1 block type lmao

main latch
#

you only need two

#

grass and stone

bright pivot
#

I have true and false

#

True is grass and not true is air xD

main latch
#

ah you doin that strat

bright pivot
#

It worked for a bit

main latch
#

so multiple block types are going to be a pain if you want to keep the binary thingy

#

which if you want to greedy mesh you probably should

bright pivot
#

Oh I'm ditching it anyhow

#

It was just do I had something to work with

#

Nit entirely sure how block data will be stored in thr end but now it'll just be an offset into a block list

bright pivot
#

So we gonna pivot away from voxels for a bit and work on loading meshes in a more complete way

#

Vulpengine (Antho's Weird Graphical Club)

#

much better

bright pivot
#

been busy, just doing lots of little things

#

i also have some neat gifs for here too

#

demonstrating fitting the shadowbox to a frustum

#

and just overly funny physics demo

bright pivot
#

Also looking into ways to improve the shadow maps. If anyone had good resources on that I'd happily use them. Plus I want to clean them up before implementing pcss

#

All I've done at this point is implement csm and pcf with poisson saples

bright pivot
#

thank you visual studio, very helpful

bright pivot
#

took a small break, but added multiple block types, and yes im aware of the weird filtering issue

#

not very good caves but its a start

drifting roost
#

how big are your chunks?

bright pivot
#

Textures are 16x16

drifting roost
#

you have greedy meshing?

#

looks really cool

bright pivot
#

I havnt implemented greedy meshing yet

drifting roost
#

sorry to be so nosy, do you use a sparse datastructure for your chunks? or flat arrays?

bright pivot
#

It's a flat array

#

Literally std::array<block type, 32*32*32>

#

Along thr lines of this

drifting roost
#

yeah that's what I had

#

only mine were 64x64x64 😅

#

how are you able to draw so much? mdi? instancing? just render surfaces with your mesh?

bright pivot
#

Except the chunk size is a constexpr so it isn't exactly hard coded

#

I'm not doing anything too fancy rn. Just simple face chunk face culling and frustum culling

drifting roost
#

nice

#

I had frustum culling

#

I didn't do chunk face culling

#

I was working on occlusion culling when I stopped working on my voxel engine

bright pivot
#

I'm not sure when I'll bother with occlusion culling tbh

drifting roost
#

maybe you don't need it

bright pivot
#

Atm I definitely don't need it

#

But once there's more stuff underground and that. It would ne nice to have

drifting roost
#

what are you planning to do with lighting?

bright pivot
#

The sun/moon will have real-time lighting. And static light sources will just bake light information into the meshes

drifting roost
#

nice

#

I had that

bright pivot
#

And I may have it so held light sources are also real-time but that part is to be determined

drifting roost
#

I had light information in meshes, not real time

bright pivot
#

I do plan to have voxels be able to be cut down to the individual pixel

drifting roost
#

wow

#

as an effect?

bright pivot
#

As an actual thing. A mechanic in the game

drifting roost
#

you're going to keep all that information?

bright pivot
#

Why not. I can easily fit the position data in 6 bytes

#

And if memory bandwidth is still a problem i can render them separatly

drifting roost
#

so if I have a flat area of 64x64 and I add idk a thousand little 1pixel dimension structures all over that area, how do you draw that in a performant way?

bright pivot
#

There's not a great to do that. Plus it's a real unrealistic use case for it

#

But generally the same rules of greedy meshing and face culling can still apply

drifting roost
#

you have a really cool project, good luck with it

bright pivot
#

I'll need it lmao

drifting roost
#

I know kekkedsadge

bright pivot
#

next step im doing is to dynamically load the block types so i dont have to manually create the atlas and data for it

#

plans to have this basically entirely modular so the new directory structure will be like this (for now)

game root
+-- executable
+-- mods
    +-- textures
    |   +-- dirt.png
    +-- blocks
        +-- dirt.yaml
#

gotta make sure utf8 filenames work cause i dont want those crashes

bright pivot
#

very good, its all working so its easy asf to add new blocks, i dont gotta manually stitch atlases or manually enter texture offsets anymore

bright pivot
#

so looking into rock types, im not going to have a generic stone type

#

specifically rock strata, and having different rock types and rock layers

#

some examples being sandstone, shale, limestone, slate, granite, andesite etc, etc

bright pivot
#

alrighty its time to port the shadows over to my voxel stuff

bright pivot
#

first iteration of shadows

#

lots of stuff to clean up before even trying to smooth em our

iron cove
#

Hey this is like my implementation of shadow mapping but probably better for performance KEKW

bright pivot
#

its the bare basics of csm

#

just some simple tweaking got it looking okayish

#

looks pretty neat (shadow maps for the view below)

#

i might use more than 4 cascades but i think this will be plenty usable for now

drifting roost
# bright pivot

I just block diffuse and specular, but leave some ambient in shadow areas with attenuation

#

Well attenuation for point lights

#

I guess that doesn’t apply to your directional light

bright pivot
#

ambient occlusion will be the thing that improves the look much better

#

i do plan to have some lights be realtime so itll still apply at times

bright pivot
drifting roost
#

yeah the ambient occlusion will make a difference

bright pivot
#

the unfortunate part is that since i plan to have some complex voxel stuff, i dont see it worth putting into the mesh data, so ill likely just go with ssao

iron cove
bright pivot
#

im not gonna spend more time on shadows rn, its something ill revisit but ill look into that when i go back

#

also from the quick stuff im looking at it doesnt seem hugely applicable to the scenes im doing

bright pivot
#

we're back

#

just got simple point lights to function

bright pivot
#

doing just some basic work, gamma correction, and that sorta stuff, nothing visual to really show for it

bright pivot
bright pivot
#

using this for a simple fxaa effect

bright pivot
#

ill have to implment the algorithm to fix the whole selecting through corner problem but thats easy enough to do

bright pivot
#

we can build now, primitve asf sundial lmao

iron cove
#

even responds to the actual position of the mouse on screen, nice

#

bleaker_kekw that logic always wastes a lot of my time every time I do it

bright pivot
#

its pretty easy to do, its a very nice qol feature

iron cove
#

I always get my order of operations wrong and end up spending like hours debugging it bleaker_kekw

bright pivot
#
glm::vec4 clipSpace = glm::vec4(cursor, -1.0f, 1.0f);
glm::vec4 viewSpace = glm::inverse(proj) * clipSpace;
glm::vec4 worldSpace = glm::inverse(view) * glm::vec4(viewSpace.x, viewSpace.y, -1.0f, 0.0f);
return glm::normalize(glm::vec3(worldSpace));
#

not too hard to do

iron cove
#

glm::vec4(viewSpace.x, viewSpace.y, -1.0f, 0.0f);
h

bright pivot
#

tldr, we dont care where it projected to in the viewspace z axis, just point it forward lmao

#

oh yeah this snippit assumes cursor is already in the -1 to 1 range

bright pivot
#

bedrock layer

bright pivot
#

transparency and leaves

drifting roost
#

You’re getting so much done so quickly

bright pivot
#

I'm just getting started baby

bright pivot
#

some basic world editing features

drifting roost
#

is your world infinite or bounded?

bright pivot
#

its gonna be large but not "infinite" making it infinite will pose a lot of challenges with what i want to do with the world building

#

and a lot of the types of map generation i want to do will require a decent but of pregenerating stuff, unique structures and the like

#

the final size of the map isnt fixed yet but will likely be 64kx64k or 128kx128k

drifting roost
#

have you seen vblanco's Project Ascendant thread?

#

seems like similar goals, only his doesn't have any block/world editing

bright pivot
#

im putting it in my feed now

#

tbh ill likely generate the entire map on world creation

#

but who knows if ill be able to pull that off lmao

#

but using estimates if the map is 128kx128k the entire map will be 8 TiB which we cannot do

#

im sure compression will do a ton to help it but im undecided on how exactly worldgen will work

drifting roost
#

on my voxel engine initially stored all my chunks in sqlite uncompressed, my sql file was 2GB and it was just like 8x8x2 for 64^3 chunks

#

then I pulled them out and stored them as gzip and they compressed to like 10KiB

bright pivot
#

i can make a decent amount of guarentees with my data so i could go into specifically on some of it

#

if i take into account some of the guarentees i know itll have, its like 2 TiB uncompressed

#

and im sure it can easily get > 50% compression ratio

drifting roost
#

what size integers are you using for your voxel data?

bright pivot
#

and thats assuming i make the work that big

#

atm its just pointers, but i can easily just use a 16bit int for them

drifting roost
#

I was using uin64s

#

I stored block type, and lighting data and orientation in that and some extra space

bright pivot
#

with a 32x32x32 chunk size its guarenteed that if voxels have no special data with them, its impossible to have over 2^16 unique voxels

#

but taking a more typical case, a chunk is likely to have less than 256 unique voxel types

drifting roost
#

oh that's interesting, having a chunk map for voxel types

#

instead of a global voxel map, that's brilliant

#

so you can have unlimited voxel types basically

bright pivot
#

in my case it reads in the mod files, stores it in a map, and after it goes through a read only interface

#

so my block types just look like Block const*

#

for obvious reasons this isnt great for when writting to files and not great on memory overall

drifting roost
#

I am unlikely to attempt another voxel engine, as much as I really enjoyed it, I personally don't think it's well suited to me working on my own, it takes a year to build even something remotely playable by someone else, at least at my progression speed

bright pivot
#

yeah im currently fighting with race conditions, its fun

#

im not very sure how far ill take this since i hop between projects a lot, but we shall see

drifting roost
#

you're making really amazing progress in a short time

bright pivot
#
if (!id.contains(':')) {
    // unqualified name, auto qualify
    id = std::format("{}:{}", modid, id);
}```
#

and the modding api kinda wacky

#

but it does function

#

but the next goals rn is basically to get schematics workingt

#

the foundations for it are ready to go

bright pivot
#

looking into ways to help revent data racing in future, i think this is okay?

class ChunkData final {
public:
    static constexpr size_t index(glm::ivec3 const& position) {
        return position.z * kChunkSize * kChunkSize + position.y * kChunkSize + position.x;
    }

    Block const* get_block(glm::ivec3 const& position) {
        std::shared_lock lck{ mMtx };
        return mData[index(position)];
    }

    void set_block(glm::ivec3 const& position, Block const* block) {
        std::unique_lock lck{ mMtx };
        mData[index(position)] = block;
    }
private:
    std::array<Block const*, kChunkSize * kChunkSize * kChunkSize> mData{};
    std::shared_mutex mMtx;
};
#

this should at least protect me from myself lmao

#

i need to work on how the worker threads do things cause it still can break stuff there

drifting roost
#

The Game Engine Architecture book covers concurrency strategies in great detail, it's a complex topic and it depends on the nature of your data and goals

#

a mutex lock may prevent the races but might also result in performance about as good as a single thread

#

this is a picture from that book that I like

#

what I did in my voxel engine is lock only to memset the chunk data to copy it for reading or writing and not for the full operation

#

I was able to spam block edits pretty effectively

bright pivot
#

Supposedly shared mutex is pretty good about performance

#

Since you can have shared ownership

#

Specifically this is to catch the case where I edit data while threads are trying to read data from then

#

Which is already rare as it is but it's possible to break

#

But I may consider just copying the block data into the worker threads and remove the shared access

drifting roost
#

I had a problem where I would miss edits, and the data and what was drawn were no longer aligned and there would be an invisible block

bright pivot
#

I have a solution to that already but if the edits are too close in the queue there's another race condition that's likely to crash

drifting roost
#

yeah it only really happened if I spam edited a complex chunk that took longer to mesh than normal

#

it wouldn't ever happen in a fast release, just on a debug build

#

I fixed it

bright pivot
#

The basics of this is if a chunk is edited and it's queued already then ignore it. But the issue comes up if it's already built the data and waiting for upload. The vertex cache has no thread peotection

#

So if you're uploading as the same chunk begins updating its mesh. Yeah not great things happen

#

So either I prevent rebuild while it uploads or I copy the vertex data into the upload queue

#

Another I was considering is using a few atomic booleans to flag the chunks as busy but i don't quite like that option

drifting roost
#

I kind of like the idea from GEA where you start a job at the beginning of the frame and then before rendering assert that it's done

bright pivot
#

Only the upload part is single threaded too

#

And that's by far not the slow part. Is fast enough it can swap stuff and you not notice it

#

I would love to mess about with context sharing and uploading data on another thread but I'm that's a rabbit hole I'm not wanting to touch rn

#

and maybe using an atomic GLuint and swapping that or something, but im unsure if this is even worth it in ogl land

bright pivot
#

So we can take a selection and export the data!

#

the yaml uncompressed is 1.28KiB and compresses 137 bytes, about a 10% compression ratio which is really good

bright pivot
#

oh also this is being done so i can use schematics in the world gen instead of manually figuring out the blocks offsets and ids myself

#

but just so happens to be a very convient way to save and load your builds

bright pivot
#

ill work in integrating this into world gen and loading back up another time, im gonna start diving into the wonderful world of text rendering

#

if anyone got some epic fonts i should try it ill do so, for now ima roll with noto-sans

bright pivot
bright pivot
#

and simple multilang is working alright

bright pivot
#

"help.ttf"

#

HMMM

iron cove
bright pivot
#

lovely

#

something must be a bit wacky with how that ttf is written cause it REALLY does all it can to use any other glyph for those codepoints

#

cool to see that working tho

bright pivot
#

aight we now respecting the os content scaling

#

added a little vector graphic for your crosshair, inverts the colors behind it

bright pivot
#

working on a simple debug panel thing, tldr, this new vector rendering system will be used for the in game stuff, imgui will stick around for prototyping and the more debugging related activities

drifting roost
#

are your crosshair a shader

#

or geometry

bright pivot
#

well both cause yk, shaders required, but geometry, this is using the gui system im working on

drifting roost
#

mine were geometry but I realized I could just render a single triangle and draw fancy crosshairs on it, and even animate them in fancy ways

bright pivot
#

just a handful of points in a closed loop

drifting roost
#

I don't have any hud in my game atm

bright pivot
#

i have a little already but most of it is debug stuff

#

like this lil thingy

drifting roost
#

I guess I don't even have a game atm, just a engine with some learning scenes

#

it's gonna be a while too

bright pivot
#

i just hacked together some custom cursor support too

drifting roost
#

nice

bright pivot
#

its REALLY ugly rn too x.x

bright pivot
#

i found a REALLY neat bug lmao

#

also finally using texture arrays

#

and the nice bonus, i got an easy 16 byte data saving per block face

bright pivot
#
vec2(idx % 2, ((idx + 1) / 3) % 2)

yummy lmfao

#

used to generate my uv coords, so now my vertices only need the layer for the texture

bright pivot
#

Finally added mip maps and anisotropic filtering

iron cove
#

I have not had problems with this font

bright pivot
#

its very possible that i just have a weird bug too

bright pivot
#

i know this thread is stale, been jumping around a lot

#

In the near future I'm going to be looking into getting a linux dev environment working

#

the current state of the project(s), you clone recursivly, using premake5 you generate visual studio or makefiles, follow an extra gen step for linux (one time), and using those it'll cleanly build the platform executable. (yes i know premake5 is a bit dated considering it hasnt had an update in a while, may look into using cmake despite how much i dont like it)

Im used to using visual studio and tempted to get a vscode envieonment working but im not familar with how nice an environment that is.
Does code navigation work well, does it have debuggers etc, etc

livid spear
#

no worries

#

threads can always be

#

i use c++ and c# here on lunix

#

both can be run and debugged in vscode and rider/clion

#

i use all three tools depending on my mood

#

premake also works just fine here, just like cmake based projects

#

vscode has a neat plugin for the latter as well, makes running and debugging c++ projects even easier imho, no need to manually set any weird build scripts up

#

code navigation also works 99% of the time just with vs itself

#

after installing microsoft's c/c++ plugin for vscode

#

with regards to premake, go boop dragonslayer0351

#

if you want the bleeding edge 🙂

#

im sure they have nightly builds too or you just build it from source if you need to

bright pivot
#

Alright so vscode is perfectly viable for this then. That's good to hear.

#

I'm on premake5 beta2 or something. I'll look into building it my source. I already build my entire source tree by source anyhow

#

It's just that beta2 doesn't have an option to specify cpp23. And other weird stuff. I just assumed the project was abandoned. I looked on git and it's still worked on so yeah

#

So ill likely build myself and just ship it with the code or something but we'll see

livid spear
#

@solemn bone we have a complaint wrt premake

solemn bone
#

KEKW me too

livid spear
#

i know nothing about premake, but you do 😛 please help the frog

solemn bone
#

what's up?

livid spear
solemn bone
#

Yes, build from source for C++23 🙂

livid spear
#

ah lol hehe

bright pivot
#

Is master branch considered stable?

livid spear
#

are you still maintainer?

solemn bone
#

yeah, it's stable

#

and yes, i have merge privs 🙂

livid spear
#

time to create a new release then

solemn bone
#

it's a bit of a pita, tbh

bright pivot
#

It's been ages since beta2

solemn bone
#

but i probably should

#

may do that this weekend

bright pivot
#

But getting cpp23 would be nice to present passing around weird compiler specific flags. Which build tools are supposed to prevent

livid spear
#

!remindme 3d remind dargon about premake, he said this weekend

mystic fernBOT
#
New Reminder | ID:74130068

Alright deccer, I'll remind you in 3 days about:

remind dargon about premake, he said this weekend

bright pivot
#

I'll look into building from source.

#

I've just been working on refactoring

solemn bone
#

we do have downloadable artifacts there, if you don't want to build it

bright pivot
#

I don't mind building. I complete forgot about ci builds lmao

solemn bone
#

Sounds good. Feel free to ping me directly if you run into issues

bright pivot
#

Sick

solemn bone
#

I did ask if there is any opposition to cutting a release this weekend. May try to do some issue/PR combing this weekend to see if there are any low hanging fruit worth getting in

livid spear
#

kewl

bright pivot
#

I just like premake more than cmake so I wanna keep using it when I can

#

Also i use lua to script so it's like perfect

#

Unstable scripting api W

solemn bone
#

Yeah, I really hate DSLs. Premake feels nice to use

livid spear
#

i need to give it a serious try one day as well, but im kinda spoiled by the cmake plugin in vscode and cmake support tiself in clion, even vs does support it somewhat decently

bright pivot
#

The cmake dsl and the fact it's just overly complicated for what needs to happen is what keeps me from using it on my own projects

livid spear
#

if you only do basic shit its quite tame and rather simple, and when writing an engine and a sandbox to use the engine, its shrimple

solemn bone
#

There are a few issues that need to get closed before beta3 will be ready, but I'm keeping an eye on those and they are all being worked 🙂

bright pivot
#

Oh maybe I'll wait on that then

#

Just ealier my 6k main file finally got the refactor it been deserving

solemn bone
bright pivot
#

I'm hoping to get it public soon but I have to get the copyrighted assets outta there

bright pivot
#

Putting this here :>
My favorite bday gifts I've ever gotten

bright pivot
#

SOOO beta3 hasn't happened (been over 2 years since an update) AND I cannot find the build artifacts (Looks like the appveyor builds are 4+ years old and I cannot find anything recent), tried building from source, undefined external symbols(registerModules and builtin_scripts) assume this comes from bootstrap, the ./bootstrap.bat fails with error The system cannot find the batch label specified - VsWhereVisualBootstrap file doesn't work so I cannot follow the build instructions.

livid spear
#

i thought you do c#?

bright pivot
livid spear
#

ah

#

you are using premake then neh?

#

aaaaah

#

you are talking about premake : >

bright pivot
#

id like premake beta3 but hasnt released and id like to stop hacking support for c++23

livid spear
#

boop @solemn bone

#

or build it from sources for the time being

bright pivot
#

the build build fails cause i cant run the bootstrap file fails to run

#

I assume running this file generates a c file which defines the missing symbols

#

im building from master, currently at the 1a80408 commit

livid spear
#

dargon mention nightly builds too

#

i assume the pipeline will spit out builds, premake.exe etc

bright pivot
#

so atm either master is unstable, the build instructions are wrong or im just missing something

#

im stuggling to find any recent ci artifacts is the thing

#

its all the beta2 builds

#

ohhh wait a second

#

okay to the readme ci links are basically dead and unused now, so that mislead me, theres ci in the github actions but im not familiar with it so im digging

#

talk about the lastest successful build being buried

#

sooo why is the github action working but my same build steps locally dont berubeUgh

livid spear
#

different environment

#

different os with different libs and versions?

bright pivot
#

i read the logs, i did the same steps

#

its just some reason maybe the current master may have a broken bootstrap bat file????

livid spear
#

beta2 is 2 years old : >

#

crazy

bright pivot
#

yeah i know! why is the release cycle like this mannn

livid spear
#

dargon got some homework for tomorrow

bright pivot
#

this is so weird, the website repo has updated information but the wiki itself doesnt like, seem to reflect it

#

cloning the wiki locally babbyyy

#

oh sick, i have these tools installed, i can fix this up real fast locally

livid spear
#

: )

bright pivot
#

im getting myself so confused rn for real

#

so the website is updated

#

mayhaps that was on of the things needed before for beta3 dropped

bright pivot
#

dude this setup is so weird i swear

#

premake-core contains the doc source which makes sense, but the generated files end up in another repo which i guess only exists to host the website itself

#

all this confusion is gonna end up making me contribute documentation of my own to premake

#

like how stb_vorbis took literal years to fix a tiny bug that annoyed me so i just did it myself

livid spear
#

mayhaps you can contribute

bright pivot
#

okkay lets see if this nightly build correctly does this thing i wanna do

#

dude a ton of the website just has stubs that just say needs documentation

#

actually this explains a lot

#

they edited the bootstrap file recently and it broke (for me at least

#

maybe this is the failed latest action i saw on the github

#

the current issue is beta2 cppdialect "C++latest" selects the lastest on visual studio which just works, but in gcc it'll select up to C++17, beta2 doesn't have cpp23 as an option so for gcc i have to specifically pass the compiler flag, looks like this works on newer builds

#

i dont recon theres a function in premake that tells gives a version number to use a filter on or sometihng to conditionally include premake options

solemn bone
#

I am still waiting on a few outstanding issues for beta3

#

Actually, only a single outstanding PR for this. Depending on when we get that in, should be a branch cut for release in the next week or so

bright pivot
solemn bone
#

It is fixing a relatively large break in the functionality that got introduced, so this is something that has to come in before the next "stable" release

#

And sounds good

bright pivot
#

thats fair enough, is there a sort of plan for a release cycle at somepoint, or even a roadmap?

solemn bone
#

Not sure what the 5.0 (non beta) is, but I just merged in the last PR I needed for 5.0-beta3, so I'll be getting a build out within the next day or so

solemn bone
#

@bright pivot just wanted to let you know that I'm working on the release now

solemn bone
#

Will take probably a day to get someone to give approval for the commit, but I've got all the PRs I need closed

solemn bone
livid spear
#

@solemn bone thanks for taking care of this 🙂

#

maybe Release 5.0.0 could be a thing for january first (or whenever you guys are back from xmas holidays) : >

solemn bone
#

There are two major blocking issues before 5.0 that need to be taken care of first

solemn bone
#

That's the plan. One of the issues will require community feedback (we will be yeeting our old gnu makefile exporter for the new one)

#

But, we need to ensure there are no minor things people are using in the older, legacy exporter that need to be ported to the new one

bright pivot
#

I've been using the gmake2 one for ages and never had problems with it

solemn bone
#

Yeah, gmake is our legacy gnu makefile exporter. gmake2 is what people should be using, but there's a handful of users still on gmake

bright pivot
#

Oooh that make sense

bright pivot
#

So im preping to migrate from windows to linux as a dev environment soon and would like to get a vscode setup going, i already use premake and it generates makefiles, the code itself is already fully supports linux

Does anyone know of some good guides i can follow to get this working nicely, in a way where you slone the repo, and the vscode stuff will be there

Being able to debug is a must, as in stepping through, breakpoints etc

#

the most i know about this is a .vscode directory gets created and you need a couple extensions

#

im doing my basic google and stack overflow searches but any resources on this would be great

drifting roost
#

you can sync vscode

bright pivot
#

Specifically building can be as simple as running make, the specifics about getting vscode to run as a debugger is where i need help

drifting roost
#

the sync is so good I hate it and turn it off because I don't want my work stuff synced to my home vs code

bright pivot
drifting roost
#

vs code has sync

#

you can sync everything

#

extensions, settings all of it

bright pivot
#

this tells be nothing on how to get started

drifting roost
#

oh you aren't using vs code already

#

sorry

#

I misunderstood

bright pivot
#

i understand the extensions and all that, but configuring launch and tasks is where im stuck

drifting roost
#

what are you using now?

bright pivot
#

premake which generates visual studio files or makefiles, so building the project on linux is as simple as running make which is easy enough to make a task for, im just unaware of how to get vscode to run the binary and attach as a debugger

drifting roost
#

you know about launch.json?

bright pivot
#

all i know is that its a file that exists

drifting roost
#

cntrl + P add configuration

#

this is really well documented

#

it works really well imo, but if you're used to Visual Studio 2022, VS code is not an ide, it is a text editor

bright pivot
#

for vscode on linux all i really need is basic debugging features and a decent intellesense

drifting roost
#

yeah it does all that

bright pivot
#

i dont even use a ton of visual studios debugging features

drifting roost
#

I write zig, but I use the C++ setup

bright pivot
#

the most in depth i ever used on there are the process memory dumps

drifting roost
#

and I can debug and step through in vs code

#

for memory you're going to have to use valgrind or something else

#

I don't know

#

why are you switching?

bright pivot
#

it wasnt anything crazy, its was that rare occasional thing that came in handy

#

well i plan to get off windows when win10 hits eol

#

but its also good to be able to build and debug nativilly on linux

#

building is more or less handled already

drifting roost
#

I think you can probably set up debugging in minutes if you're already building

bright pivot
#

its just having trouble finding the binaries and symbols and garbage

drifting roost
#

ah I'm not sure, maybe someone can help you in #questions

#

I think though the documentation is pretty good if you haven't read it yet

bright pivot
#

the main issue i have with the docs i see is that is just assumed you have a one file project which just isnt the case

#

like this wasnt too hard to get to work

#

problem matcher!?

#

ooh the os specific override feature is very nice

#

okay so this is working, just intelisense doesnt seem to know what the include paths are

#

so the basics are working on windows at least

#

oh thats a very weird issue

#

so the setup isnt great rn but its at least usable

solemn bone
bright pivot
#

The 21st century is real :o

bright pivot
#

Having some trouble, im just playing around and im trying to draw a volume as a post fx, theres a quad that covers the screen, and the depth testing is weird. Basically my sdf produces a euclidean distance whereas the depth buffer sample isnt. Even after normalizing it, its still just distance to clip plane vs distance to camera origin,

and i cannot figure out for the life of me how to account for this difference

#

in the vertex shader, i calculate the view vector and the view origin which work fine, i use these in the fragment shader to test against an sdx box which also works, but i want it to respect depth testing

so i sample from the depth buffer and compare which works when directly looking at the object, but as you turn the camera you see the depth values not being right

#

oh man i hate that

alternative for now, i take the object distance, run it through the pipline operations, perspective device, then use that z value for compare

bright pivot
#

i fixed all this stuff, just have a little test here

bright pivot
#

got something really basic going here

#

its also SLOW ASF

bright pivot
#

some optimising later things run much faster and generally look better too

iron cove
#

Where does this fox model come from?

bright pivot
drifting roost
#

I have seen it before

#

Although it could have just been a different fox model

#

It looks very similar though

bright pivot
#

Yeah idk lmao

#

I could look in thr file and see if it has some Meta info

bright pivot
bright pivot
bright pivot
bright pivot
#

added some params to make them a bit nicer

bright pivot
#

using blue noise for my random offsets look SO much better than pure random

#

comparison of the noise textures

bright pivot
#

got an in engine text editor working

bright pivot
#

i rewritten my #include stuff. stb_include is no longer a dependency and i have my own implementation

drifting roost
#

are you using an extension with your GLSL or have some of your preprocessing?

bright pivot
#

the preprocessing is just done in c++

#

the glsl extension for include isnt even core in any version so i chose to not bother with it

#

glsl DOES have a preprocessor, it just doesnt support #include which is what i had to manually do

drifting roost
#

I use glslangValidator.exe for that

#

it does support #include

bright pivot
#

it does not, not a core glsl feature

drifting roost
#

I use it

#

how do you mean it doesn't

bright pivot
#

cause you use a non standard shader preprocessor

drifting roost
#

it ships with the vulkan sdk

#

and works with opengl

#

it just outputs glsl

bright pivot
#

im talking the glsl compiler itself

#

plug shader source with #include into glCompileShader, it will fail unless you setup the glsl ext for it

drifting roost
#

right I'm saying I don't need to do any C++ to do that given the glslangValidator does that

#

but that wouldn't work for you I guess

#

given you want to edit it there

bright pivot
#

and i dont want to bother with that since theres no guarentee itll be installed and its one less thing to ship

drifting roost
#

I get it

#

yeah

#

that makes sense

bright pivot
#

to be fair my #include preprocessor is only like 20ish lines long

drifting roost
#

nice

bright pivot
#

the performance is horrible but shader compilation isnt fast anyways so idc

#

but the idea now is with this i can associate file paths with the source numbers generated in code, so if an error happens i can have my in engine tooling display the actual glsl file it happened in

#

its 45 lines oop

#

also the way i write shaders glslang wouldnt be able to figure out the shader types anyhow

#

so in most my shaders they begin like this

#version 450 core
#inject
#include "common.glsl
drifting roost
#

do you use a glsl linter

bright pivot
#

obviously the version thing is nothing new, the #inject gives the engine the opportunity to throw in whatever defines it wants which it does, and include is obvious enough

bright pivot
drifting roost
#

I have so many problems with typos in my GLSL

#

linter saves me from so much self-inflicted pain, but it's a skill issue on my side

bright pivot
#

in my case with the new workflow, the engine will try loading, error happens, and the in engine tooling will highlight the error and you can edit it and hotswap it in

drifting roost
#

nice

bright pivot
#

but the same source is used for both vertex and fragment shaders a lot of validating tools have no idea how to handle it

#

and no tools i know of would know wtf to do with the #inject since thats a runtime generated source

drifting roost
#

yeah I had that issue in my foundations project since I did my own including also, and couldn't use a linter

#

I gave all that up just so I could lint and I switched to the offline thing

bright pivot
#

in some old project here the #inject would also have quality settings too

drifting roost
#

different use case than yours

bright pivot
#

so say you disable shadows or something, it can stright up delete it from the glsl source and would run better (after recompilation

drifting roost
#

nice

bright pivot
#

but this is all planned to come back, i need a more proper resource management solution to allow me to do this stuff

bright pivot
#

Idea I could just save the preprocessor output and lint that with validatir

bright pivot
#

Compilers are encouraged to detect ill-formed programs and issue diagnostic messages,
but are not required to do so for all cases

#

mann this would solve so many issues if this wasnt a thing in glsl

bright pivot
#

LETS GOOO

#

so i got this to work for nvidia and ati

drifting roost
#

this is your ingame editor? wow

bright pivot
#

yeah you can edit and save and itll hot swap

nimble onyx
#

what plugin are you using for text highlighting?

#

also in case it has problems you may want to not apply it immediately XD lower risk of crashing the driver that way

bright pivot
#

The driver isn't going to crash from anything I'm doing

#

The editor is my own fork of an ingui project

#

It's its all such a mess I'm likely to make my own from scratch

#

the text highlighting is all custom, just regex and a couple other things

#

tldr im very unhappy with the state of imgui code editors and i plan to make something easy to integrate and use

bright pivot
#

lil command pallet which i can start loading up with crap

drifting roost
#

nice

#

how do you search?

#

you wrote your own fuzzysearch?

#

or are you using something

bright pivot
#

im using something for that

#

i will be implementing my own for it so itll be all one thing

#

im working on improving the fuzzy search rn

bright pivot
#

improved fuzzy scoring

#

its a mix of token splitting, regex matching and whole word matching

bright pivot
#

theres a bug with a widget and i have to manually do this shit

bright pivot
#

Aight the command palette system now handles global keybinds and fills in the main menu bar for me

bright pivot
#

ive written the entire command pallete and im very happy with it, im likely gonna release it for use

bright pivot
#

i cleanup the code its avail in the dev branch for anyone who wants to try it out, only requires cpp23 and imgui

bright pivot
drifting roost
#

you should show this off in #showcase this is great stuff

bright pivot
drifting roost
#

I'm kind of liking hanging out and sharing stuff in #wip instead of having a thread. I still like looking at other people's threads though, I wish more people looked at threads

bright pivot
#

i just share here, keeps me more focused and those who arent interested just dont follow the thread and simple as that

bright pivot
#

these are growing rather quick aha aha

bright pivot
#

Hmmm what to work on today

bright pivot
#

working on abstracting a bit of a lua layer, gonna allow scripting to happen now, i already have plans on how to safely handle infinite loop cases from the scripting side

bright pivot
#

experimenting with audio and i have playback and everything working, but now im going about reading back the audio frames to calculate the ppm of the audio frame window,

i now have a LOT more respect for audio tools now

bright pivot
#

Managed to get this little ppm meter somewhat usable

#

This is the ppm of the left channel cause lazy

bright pivot
bright pivot
#

im going insane mannn, finally got an 8 order lpf working

bright pivot
#

Also custom mesh format is going really well. You can just memcpy the file contents into a buffer. Directly upload and read the metadata. I'm just at a point of deciding what attributes should be supported. How many uv channels? Color channels? Should I bother storing bitangents if normals and tangents are there. Etc etc

bright pivot
#

we're so back baby

#

so this is a wip of a little effect applied to in game monitors

#

im starting a new project and i have an actual goal in mind this time around and im actually very excited for it

#

im gonna keep the details of that under wraps since the project itself i dont think would cater to this community much but ill still be showing the technical stuff and neat things as they happen

#

along with this more off topic things will end up in wip as well just as a conversation

bright pivot
#

got distracted

#

but got this mapped to a cube with custom mesh formats

bright pivot
#

with the new mesh format stanford dragon takes ~8.3ms to load (same speed on debug and release), this includes all io operation and the cpu side upload calls

iron cove
bright pivot
#

renderdoc integration working like a charm

bright pivot
#

made this helper template function for using entt dispatcher

#

makes events pretty nice to hook into

solemn bone
#

Just wanted to let you know I'll be releasing 5.0-beta4 this weekend

bright pivot
solemn bone
#

Some flag deprecations (they all have replacements), symbolic link support, several new platforms are supported (as well as lots of new CI jobs for automated builds), updated a few dependencies, and fixed a handful of bugs

bright pivot
#

Awesome!

solemn bone
#

Will also be removing transparently removing gmake (and renaming gmake2 to gmake) in the next beta (probably mid february 2025)

bright pivot
#

Sick. I havnt used the old gmake so good

bright pivot
#

im pretty happy with my little function traits stuff, unusually helpful

solemn bone
#

@bright pivot beta4 binaries have been released

bright pivot
#

Bet!

bright pivot
#

been messing about with basic multilang support and im very happy with progress so far

#

i was originally worried about speed of constantly accessing the lua script to read these, but this takes <1us so its a non issue right now

bright pivot
#

We now taking advantage of renderdoc 1.5 api features

drifting roost
#

what's happening in that video?

bright pivot
#

I have a language file open on the right and it's responding to file changes and fmt changes

#

The idea being you csn easily swap this file and have all the important strings change without recompiling. Multilingual support alresdy is partially working

#

Itll happily display korean

drifting roost
#

wow

bright pivot
#

All configurations data etc will be read and written with lua

#

It's very nice. I've already put I the security checks to prevent scripts from doing crazy shit

bright pivot
drifting roost
#

really cool, should make for a fast dev loop

bright pivot
bright pivot
#

so obviously lua is like the most popular scripting language out there, but ive heard webassembly could be good as well

bright pivot
#

just showing some stuff dont mind me

bright pivot
#

theres lots of features to get working early, onegreedy meshing gotta come back along with allowing different textures to be used in different locations for the same block

bright pivot
#

Forgot to mention this is custom text rendering. I'm going to be writing my own gui lib on top of everything here

drifting roost
#

I need to do that also :/

bright pivot
#

What part.

#

There's just some stuff with imgui that'a really annoying and text rendering generally being one of them. Lack of content scale awareness to name a few

drifting roost
#

I want non-debug ui that's my own

#

I don't want to use imgui for the game's UI

#

for debugging imgui is fine

#

in a hypothetical release if I ever have one I don't even want to include imgui in the executable

#

I manually manage content scale for imgui fwiw

#

like for fonts

bright pivot
#

thats more or less exactly what im working on terms of gui

#

hence youre already seeing multilang support happen

#

I also don't like how the glfw imgui backend stright up takes full control of certain things

bright pivot
#

ayo apparently ive implmented greedy meshing before in an old codebase, TIME TO STEAL FROM MY PAST SELF

#

who apparently was smarter than me now

drifting roost
#

that's just cheating

#

jk

bright pivot
#

seems like it still works

#

nvm it has bugs lmao

drifting roost
#

are you using barycentric coordinates for your triangle lines?

#

interesting, usually I just change polygon mode from file to line

bright pivot
#

it basically does that but just draws an extra time

drifting roost
#

ah

bright pivot
#

REALLY old project, not ideal

drifting roost
#

you can do some shader business with barycentric coordinates to do lines I did that once

#

adds control flow to the shader though so idk

bright pivot
#

can easily be guarded with an ifdef though

drifting roost
#

true

bright pivot
#

not a bad idea though

#

ill have to try that sometime

drifting roost
#

this looks great though

#

even if it is a bug

bright pivot
#

well its like sometimes it just like doesnt greedy mesh anything

#

and looks like the easy cull method

#

also the code behind it is AWFUL so erm

#

honestly may be better to do that from scratch again

#

oh this shit is fucked up

#

fixed the bug

bright pivot
#

managed to port the code over, gotta do a lot of cleanup

bright pivot
#

looks like this can be entirely done in shader without the attrbutes

#

huh thats wild

drifting roost
#

this is like 2 or 3 months into learning opengl

bright pivot
#

wasnt too hard to make it look alright

drifting roost
#

probably not a good example

#

yeah

bright pivot
#

yeah cause i can easily just not use vertex attributes and waste tons of data on it

#

pure shader edit which is very nice

#

so you could just put it in a uniform and call it a day

drifting roost
#

nice

#

I miss uniforms sometimes

bright pivot
#
vBC = vec3(0.0);
vBC[gl_VertexID % 3] = 1.0;

my dumb af way to skip out on vertex attribs

drifting roost
#

yeah I used attributes

#

that's better

#

I didn't even know what gl_VertexID was then

bright pivot
#

having 3 extra floats per vertex to only sometimes draw triangles seems like a huge waste

drifting roost
#

barycentric coordinates have a lot of nice uses

bright pivot
#

i used to use it way back to manually do collision on a heightmap

#

its actually really nice to not have that z fighting for this

#

so ill just stick this behind an ifdef and thatll be all i need for it

#

oh and you can easily change the opacity of the wireframe

#

always forget how big a difference greedy meshing can made whew

bright pivot
#

got my multiple fanned stones working, 4 different textures but lil tricks

#

this screenie can show that better

drifting roost
#

did your frame time decrease?

bright pivot
#

its on vsync so i have no idea

#

ill time this rq, the triangle count went down ~95% so it probaby will be lower frametime

drifting roost
#

lol nice

bright pivot
#

Did some measuring, theres no significant impact on frametime

#

likely cause theres only one chunk here

#

im very sure there will be bigger impact once i decide to expand the scene here

#

ive been wanting to make a little built in profiler though so this may be a good place to begin

#

i feel like i dont really have much worth profiling though

bright pivot
#

rewriting and updating the greedy mesher to support multiple blocks

bright pivot
bright pivot
#

bingo, code is readable this time, just gotta refactor so i can put this into a proper loop

drifting roost
#

looks amazing

bright pivot
#

tdlr its generic and iterates for each 6 faces, you just need to specify the direction, base mesh and swizzle mask

#

14855us in debug
1025us in release

#

not horrible

bright pivot
#

super basic lighting

#

the greedy meshing did introduce the small little gaps cause floating point math is perfect, so looking at ways to improve that

#

either removing t junctions which make generation WAYYY more complex, i could use a simple post fx to check for values like this, or even some antialiasing of some sort could hide this, either way not a super high priority, also looking into method of shadowing and occlusion, mesh based occlusion is more or less out the window since greedy meshing doesnt work nicely with that and will likely use a screenspace solution

bright pivot
#

new profiler graph started

bright pivot
viscid karma
#

Well this is very cool!

iron cove
#

Advice: ALWAYS test chunk render code on negative values

#

Very easy to end up with incorrect offsets or off by ones with that

bright pivot
bright pivot
#

Gonna work more on profiling today. When showing percentages of frame times. Should I show the times for last frame or an average over like 30 frames?

drifting roost
#

I would like to show an average, I haven't gotten to that yet, I just show the last frame times. I want to have a implot too

bright pivot
#

the stuff is all there to easily show averages, im just not super sure what would be super helpful ykyk

drifting roost
#

I just like averages because it makes the fps readable instead of updating every frame

solemn bone
#

Just a heads up that premake v5.0-beta5 is going to release this weekend @bright pivot

bright pivot
bright pivot
solemn bone
#

Scripts using gmake are automatically transitioned to use gmake2 now

bright pivot
#

ooh right, ive been using gmake2 for ages but thats a nice change

solemn bone
#

gmake2 is actually renamed to gmake under the hood, but we have an alias pointing gmake2 at gmake so existing scripts will continue to work with warnings to use gmake in your filters and actions 🙂

#

trying to keep to a roughly ~6 week release cycle

bright pivot
#

excitment!

drifting roost
bright pivot
#

also a mechanic im still disapointed about that isnt in any 3d block game is the terraria style painting mechanic

drifting roost
#

a 3d block version of terraria

#

although not sure what you mean by block painting

#

I guess you were talking about something more specific

bright pivot
#

atm im just using a block style for fun, gives me something to mess about with

bright pivot
#

a lil more work here, red now represents unspecified/unknown time, green is gui draw time, yellow is the buffer swap

#

a way to group stuff and subdivide the stats are wip

viscid karma
#

I was gonna suggest showing %lows too for stuttering reasons but the graph kinda takes care of that

bright pivot
#

Low high and average would probably be good to have

bright pivot
#

im fucking around with world gen lmao, yes theres simple distance fog

drifting roost
#

I like distance fog, I may add a really small one to mine that won't fully obscure, just adds some minor distance effect

bright pivot
#

i only want mine to fully obscure at the far clipping plane

#

which a simple exp-pow fog plus smoothstep would do perfectly

#

i do plan to color the fog based on the view vector and sun direction too, makes it nicer imo

#

also implmented some win32 priority code which helps the frametimes a bit

bright pivot
#

May look more into the mesh data compression but it isn't a huge slowdown rn so I'm pushing it off as long as I can

bright pivot
#

Also experimenting with structure gen. I'm unsure if I want infinite world sizes though

bright pivot
#

looking into multiple rock layers

drifting roost
#

do you have a Character.cpp?

bright pivot
#

havnt bothered with that yet, but i could easily throw together some phyics and a character controller within a few hours

#

all the nessesary peices to do so are in place

#

i have over 10 rock types planned but figuring out how to generate them in the world is the hard part

#

theres not going to be a generic stone type, but the rock types suitable for certain things will be tagged as such thus making recipes easier to do

bright pivot
bright pivot
#

isnt amazing but its a start

#

gonna leave this here for now, im gonna look into better ways to handle this sorta generation

drifting roost
#

Do you rasterize with freetype?

#

And that generates something you can draw with OpenGL?

bright pivot
#

I do plan to pull all of this into a standalone gui library but I'll get there

solemn bone
#

premake5 beta5 is out

bright pivot
#

also more about the text rendering it rasterizes a glyph cache at runtime and i manually pack a texture atlas with the data

drifting roost
#

I see

bright pivot
#

yeeeee

bright pivot
#

working on some new graphical text rendering effects (will need accesability options to turn off tho

bright pivot
#

updating the profiling tools a lot, will now show locks, threads, zones etc

bright pivot
#

Looking into separating out my text and gui rendering along with feature requests. Besides imgui there's no real nice alternatives to rendering ui with an easy to setup library.

What sorta features would we wanna see?

solemn bone
#

imo, nuklear is also pretty good

bright pivot
#

Which imgui is intrusive with default backends

solemn bone
#

oh yeah. i modified the "default" backends intentionally

#

(which is probably what you should be doing)

bright pivot
#

Thing is if I'm going to modify the backends. I may as well use a better suited library for closer to final rendering anyways

#

Esp since imgui has some thread safety issues as well

solemn bone
#

likely so

bright pivot
#

Which I did modify thr backends for some time and I couldn't keep up

solemn bone
#

really, you should only be using imgui for tooling like things. nothing that's exposed to the end "user"

bright pivot
#

Right. But I'd love to be able to have a debug ui library that's also capable to render the main ui

#

Like in all honesty is is pretty annoying thst imgui still isn't at all suited to nicer rendering thus you need another ui library anyways

#

From what I'm seeing nuklear might actuslly be a perfect middle ground

solemn bone
#

the thing is, it's "good enough" for a lot of use cases. any time you've got special requirements, you're going to need to build your own stuff. this is not an "imgui" only issue

#

I personally have really liked it in the past. Haven't used it in years, though

bright pivot
#

The main repo seems archives but there's a promoted active fork still so I'll give it a shot and see how I feel about it

solemn bone
#

It's not really a fork, they just moved dev to an org instead of a personal account

bright pivot
#

That's fair enough. Nice to see it's still active though

solemn bone
#

Definitely. I want to investigate moving back to using it over imgui

bright pivot
#

As much as I like imgui there's so many little annoyances that get to me

solemn bone
#

This one is pretty new

#

went "viral" on twitter a while back

bright pivot
#

I saw Clay and really disliked the heavy use of macros

solemn bone
#

agreed, but the arena based allocation is quite nice

bright pivot
#

Plus it doesn't seem to be suitable for debug uis

#

I'll give nuklear a shot. It is nice it more or less just gives you full of how input and rendering work which is very nice

solemn bone
#

👍

#

good luck. ping me if you have any useful info to share about your experience with it. i need to work on some ui stuff in my project at some point

bright pivot
#

I do have some existing stuff to nicely draw stroked shapes so I'll reimppment that for nuklear as well

#

Also if it's just a single header and it's as easy to build as it sounds. I'm gonna be in love lmao

solemn bone
#

Last time I used it was when I was working with LWJGL. The bindings there are quite nice

bright pivot
#

Lwjgl is like the gold standard for java bindings

#

I remeber when I used to work in java that I quite liked the bindings myself. I just never used nuckler

#

Except the opengl bindings were a bit weird but workable

bright pivot
#

aight time to try out nuklear

#

ill prob hang out in vc for a lil cause i can idk

bright pivot
drifting roost
#

Nice. I set up tracy in Rosy, but I haven’t configured any zones or anything beyond the framemark yet 😅

bright pivot
#

ive written some custom tracy code to automaically profile and instrument lua code with little developer intervention, no more need to manually instrument lua code (mostly)

bright pivot
bright pivot
#

Got Tracy to track the realloc/free calls lua uses. It's pretty neat

#

You can actuslly see in thr trace where the gc happens

bright pivot
#

This sorta stuff making me really wanna make my own allocators cause there's so many new delete calls

drifting roost
#

I want my own allocators too

bright pivot
#

I mean these technically are my own allocator cause they hook into tracy but they still got into malloc free

bright pivot
#

Even pmr would be a big improvement

bright pivot
#

I now appreciate apis that expose their allocation functions

bright pivot
#

i can control how the lua gc works :0 you can easily see how much is allocated from a basic lua call and control when and how gc happens

bright pivot
#

implemented some fxaa, super simple post fx but does the job alright

bright pivot
#

Ur boi has officially contributed to Tracy

bright pivot
#

finally took to implementing normal mapping

nimble onyx
#

Cool barrel, nice and wet just the way I like em

bright pivot
bright pivot
#

combining normal mapping with low poly lods is actually insane how well you can fake lighting

bright pivot
#

Original 200k tris

#

Low poly version 90% triangle reduction from 100k to 10k

#

Low poly version with normal map (2k x 2k)

iron cove
#

Yup

bright pivot
#

i have successfully make my terrain look like a crappy unity project 🧡

nimble onyx
#

More like a FF 8 FMV upscaled a bit forgefumbsup

bright pivot
#

Idk if that good or not lmfao

bright pivot
#

Been working on improving the allocation strategy being used for lua, it now makes 0 new/delete/alloc/free/realloc calls
The Lua memory span is now 182.24KiB vs the old 517.51MiB with realloc/free, lua now gets 1MiB of memory

bright pivot
#

been a hot minute, been look into parallax mapping and finally gotten it to work!

#

you can see it in action here

bright pivot
#

took a lil change of direction for a bit, working on reflection and equirectangular skybox support

bright pivot
#

things looking uppp

bright pivot
#

been implementing the steamworks api and been going very well

bright pivot
#

took a break to handle life and all, im back and have been working on a new terrain renderer

bright pivot
bright pivot
#

trying out some different ideas for sun/sky rendering

#

would love to do actual atmosphere rendering but i have other priorities rn

bright pivot
nimble onyx
#

shadow crawling and shimmering is kinda nice though it looks very game-y XD

bright pivot
#

Game-y yes. Nice though??? Hard disagree lmao

iron cove
#

What is shadow crawl?

bright pivot
#

When you move the camera around and the edges of shadows flicker

bright pivot
#

Here's an example I found on a forum since I'm away from PC rn

iron cove
#

alright

bright pivot
#

Oh hey my thread still here! I let it go stale