Skip to content

Instantly share code, notes, and snippets.

@Zoxc
Zoxc / gist:5566293
Last active December 17, 2015 06:29
Syntax for variable and field declarations
Trivial:
Type trailing with colon
global, other_global: int
yet_another_global: () -> string
func()
a, c: int
b := 4
Type trailing and var keyword
@Zoxc
Zoxc / gist:5270635
Created March 29, 2013 12:51
OpenGL font rendering
#include <stdio.h>
#include <math.h>
#include <swl.h>
#include "gles.hpp"
#include <ft2build.h>
#include FT_FREETYPE_H
FT_Library library;
@Zoxc
Zoxc / gist:5153662
Created March 13, 2013 16:13
Named constructors with new and delete as functions
# class is Scala or Haskell like traits or type classes
class Constructor[*Args] # Args is variadic
{
type Constructed
static construct(obj: *Constructed, args: Args): unit
}
class Destructable # All types have instance of this
{
@Zoxc
Zoxc / gist:3681678
Created September 9, 2012 00:47
Wayland Color Management
- Reads from client buffers in weston must be converted to linear gamma. Client buffers can be presented to weston with sRGB or linear gamma.
The server-side wl_drm will use sRGB formats to convert it for weston if that's available.
Should the existing SHM/DRM formats be declared as having sRGB gamma? If so, should the premultiplied color format be linear_to_srgb(color * alpha) (the format OpenGL and pixman uses for sRGB)?
How should you pass on whether or not the compositor prefers linear gamma to wayland_drm_init in mesa? (This is needed to disable gamma correction for performance reasons)
Options:
- Replace the eglQueryWaylandBufferWL, eglCreateImageKHR sequence with:
EGLBoolean eglSetupWaylandBufferWL(EGLDisplay dpy, struct wl_buffer *buffer, const EGLint *attrib_list, EGLint *format, EGLint *planes, EGLImageKHR *images);
- Call an eglSetupWaylandBufferWL function before doing anything with a wl_buffer (but keep the eglQueryWaylandBufferWL, eglCreateImageKHR sequence)
- Add eglDisplayAt
@Zoxc
Zoxc / gist:2585797
Created May 3, 2012 13:54
Parsing error comparison
> ::hi()
mirb:
Parsing Error: Can only reference constants when leaving out the lookup expression (Use ::Object to access non-constants)
Input[1]: ::hi()
~~~~~~
mri:
SyntaxError: (irb):6: syntax error, unexpected tIDENTIFIER, expecting tCONSTANT
::hi()
^
@Zoxc
Zoxc / gist:2467851
Created April 23, 2012 00:47
Mirb Exception Reporting
> tap { raise "hi" }
RuntimeError: hi
in main.Kernel(Object)#raise("hi")
in main.#<Class:main>(Object)#main(main)
Input:1: tap { raise "hi" }
~~~~~~~~~~
in #<Proc:0x4c2048>.Proc#call(main)
in main.Object#tap()
in main.#<Class:main>(Object)#main()
unit BitClass;
interface
uses SysUtils;
type
Bit = 0..7;
BitByte = set of Bit;
#include <stdio.h>
#include <math.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include "swl.h"
#include "gles.hpp"
#include "OpenGL.Texture.hpp"
#include <ft2build.h>
#include FT_FREETYPE_H
#include <stdbool.h>
/*
* Dummy typedefs for types used.
*/
typedef int event_t;
typedef int message_t;
/*
* Prototype for event functions.
All code is shared between processes. Processes can not read or write to the code segment.
The global code segment is 2 TB. It is split into 1MB blocks, giving 2M blocks in total.
A module is a executable or shared library.
Each process has an bitmap where each bit represents a block of code of the code segment.
With 1 bit per block means the size of the array is 256KB.
If a bit is 0, the process does not have access to the block in the code segment.