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" =>
// Copyright 2024, Benjamin 'BeRo' Rosseaux - zlib licensed | |
//////////////////////////// | |
// QTangent based variant // | |
//////////////////////////// | |
// The qtangent based variant has a better precision than the octahedron/diamond based variant below. | |
// 10bit 10bit 9bit for the 3 smaller components of the quaternion and 1bit for the sign of the bitangent and 2bit for the | |
// largest component index for the reconstruction of the largest component of the quaternion. |
// Code (C) by Benjamin 'BeRo' Rosseaux - zlib licensed | |
// ... | |
#extension GL_EXT_control_flow_attributes : enable | |
// ... | |
uint resolution = pushConstants.resolution; | |
uint squaredResolution = pushConstants.resolution * pushConstants.resolution; |
// Code (C) by Benjamin 'BeRo' Rosseaux - zlib licensed | |
// Based on the ideas from Stephen Cameron's https://scaryreasoner.wordpress.com/2016/01/23/thoughts-on-tesselating-a-sphere/ blog post. | |
// ... | |
void getCubeSphereNormals(const in int face, in vec4 uv0011, out vec3 vectors[4]){ | |
const float deltaAngle = 1.5707963267948966; // radians(90.0); | |
const float startAngle = 0.7853981633974483; // radians(45.0); | |
const vec3 normals[6] = vec3[6]( |
// 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)); |
// 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)); |
// Fast date functions for FreePascal and Delphi - Pascal implementation by Benjamin Rosseaux - [email protected] - 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; |
// 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 |
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" =>
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 |
////////////////////////////////////////////////////////////////////////////////////// | |
// | |
// 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: |