Skip to content

Instantly share code, notes, and snippets.

View BeRo1985's full-sized avatar

Benjamin Rosseaux BeRo1985

View GitHub Profile
@BeRo1985
BeRo1985 / octahedralmap_catmullrom.glsl
Created December 3, 2023 12:27
GLSL Octahedral Texture Mapping with Edge Mirroring and Catmull-Rom Interpolation
View octahedralmap_catmullrom.glsl
// GLSL Octahedral Texture Mapping with Edge Mirroring and Catmull-Rom Interpolation (by Benjamin 'BeRo' Rosseaux)
ivec2 wrapOctahedralTexelCoordinates(const in ivec2 texel, const in ivec2 texSize) {
ivec2 wrapped = ((texel % texSize) + texSize) % texSize;
return ((((abs(texel.x / texSize.x) + int(texel.x < 0)) ^ (abs(texel.y / texSize.y) + int(texel.y < 0))) & 1) != 0) ? (texSize - (wrapped + ivec2(1))) : wrapped;
}
vec4 textureCatmullRomCoefficents(const in float v){
float t = v, tt = t * t, ttt = tt * t;
return vec4((tt - (ttt * 0.5)) - (0.5 * t), ((ttt * 1.5) - (tt * 2.5)) + 1.0, ((tt * 2.0) - (ttt * 1.5)) + (t * 0.5), (ttt * 0.5) - (tt * 0.5));
@BeRo1985
BeRo1985 / octahedralmap.glsl
Last active December 3, 2023 05:01
GLSL Octahedral Texture Mapping with Edge Mirroring and Bilinear Interpolation
View octahedralmap.glsl
// GLSL Octahedral Texture Mapping with Edge Mirroring and Bilinear Interpolation (by Benjamin 'BeRo' Rosseaux)
ivec2 wrapOctahedralTexelCoordinates(const in ivec2 texel, const in ivec2 texSize) {
ivec2 wrapped = ((texel % texSize) + texSize) % texSize;
return ((((abs(texel.x / texSize.x) + int(texel.x < 0)) ^ (abs(texel.y / texSize.y) + int(texel.y < 0))) & 1) != 0) ? (texSize - (wrapped + ivec2(1))) : wrapped;
}
vec4 textureOctahedralMap(const in sampler2D tex, vec3 direction) {
direction = normalize(direction); // just for to make sure that it is normalized
vec2 uv = direction.xy / (abs(direction.x) + abs(direction.y) + abs(direction.z));
@BeRo1985
BeRo1985 / PasFastDateUtils.pas
Created October 11, 2023 07:40
PasFastDateUtils - fast date functions for FreePascal and Delphi
View PasFastDateUtils.pas
// Fast date functions for FreePascal and Delphi - Pascal implementation by Benjamin Rosseaux - benjamin@rosseaux.com - Public Domain
// Based on: https://www.youtube.com/watch?v=J9KijLyP-yg - Implementing Fast Calendar Algorithms: Speeding Date - Cassio Neri - C++ on Sea 2023
unit PasFastDateUtils;
{$ifdef fpc}
{$mode delphi}
{$endif}
interface
uses SysUtils,Math;
@BeRo1985
BeRo1985 / multisampled_font_sdf.glsl
Last active December 19, 2022 14:08
Multisampled SDF for text rendering (4x AA with single texture lookup, 16x with four lookups)
View multisampled_font_sdf.glsl
// Multisampled SDF for text rendering (4x AA with single texture lookup, 16x with four lookups)
// It is for SDF text rendering with 16x antialiasing with only four texture lookups, where an
// SDF texture texel in turn also has four individual SDF values in the RGBA color channels in
// a 4-Rook/RGSS sampling pattern.
// Copyright (C) 2022, Benjamin 'BeRo' Rosseaux - License: Unlicense ( http://unlicense.org/ )
const float SQRT_0_DOT_5 = sqrt(0.5);
#if FILLTYPE == FILLTYPE_ATLAS_TEXTURE
@BeRo1985
BeRo1985 / attach_vhd_at_startup_windows_10.md
Created November 11, 2022 23:47 — forked from ianfabs/attach_vhd_at_startup_windows_10.md
How to Automount VHD on windows 10
View attach_vhd_at_startup_windows_10.md

So here's a pretty neat thing, I use VHD's to organize the space on my computer. You can too!

  • Click Start

  • Type in the search bar "Disk par" =>

  • Click first result =>

  • In the program, click "Action" =>

@BeRo1985
BeRo1985 / MIDIEventIntervalSearch.pas
Created September 3, 2020 10:30
Interval-tree-less interval search on sorted array of linked MIDI events
View MIDIEventIntervalSearch.pas
procedure TEngineMIDIEventList.FindInterval(const aResultList:TEngineMIDIEventDynamicArrayList;const aFromTime,aToTime:TEngineTime);
var Lower,Upper,Mid,Index,StartIndex,MinIndex,MaxIndex,
EventFromIndex,EventToIndex,NextStartIndex,TryIndex:SizeInt;
Event,TemporaryEvent:TEngineMIDIEvent;
FromTime,NextFromTime,EventFromTime,EventToTime,
MinEventTime,MaxEventTime:TEngineTime;
DoAdd:boolean;
begin
if fCount>0 then begin
@BeRo1985
BeRo1985 / BGCMM.pas
Created April 8, 2020 08:19
A very old experimental garbage collector memory manager project for Delphi and FreePascal
View BGCMM.pas
//////////////////////////////////////////////////////////////////////////////////////
//
// BeRo Garbage Collector Memory Manager - Copyright (C) 2011, Benjamin 'BeRo' Rosseaux
// Warning: CODED IN FEW HOURS ON A SINGLE DAY, SO USE IT ON YOUR OWN RISK!
//
//////////////////////////////////////////////////////////////////////////////////////
// Version: 2011.03.14.0013
//////////////////////////////////////////////////////////////////////////////////////
//
// Description:
@BeRo1985
BeRo1985 / index.html
Created May 15, 2019 08:13
JS Bin ecmascript string type wierdness fun // source https://jsbin.com/xinogin
View index.html
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="ecmascript string type wierdness fun">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
@BeRo1985
BeRo1985 / UnitScreenMainMenu.pas
Created October 31, 2018 17:20
PasVulkan Frame graph API code example
View UnitScreenMainMenu.pas
unit UnitScreenMainMenu;
{$ifdef fpc}
{$mode delphi}
{$ifdef cpu386}
{$asmmode intel}
{$endif}
{$ifdef cpuamd64}
{$asmmode intel}
{$endif}
{$else}
@BeRo1985
BeRo1985 / fragment.glsl
Last active August 20, 2018 15:32
Attribute-less-rendering-based cube map filitering GLSL shader code template
View fragment.glsl
// Copyright (C) 2018, Benjamin "BeRo" Rosseaux (benjamin@rosseaux.de) - License: CC0
#version 330
layout(location = 0) out vec4 oOutput;
in vec2 vTexCoord;
flat in int vFaceIndex;
vec3 getCubeMapDirection(in vec2 uv,
in int faceIndex){
vec3 zDir = vec3(ivec3((faceIndex <= 1) ? 1 : 0,
(faceIndex & 2) >> 1,