June 2018 Update

This commit is contained in:
Ingy döt Net 2018-06-22 20:57:24 +00:00
parent ba8067c3b7
commit 22f33d4004
5278 changed files with 84726 additions and 14379 deletions

View file

@ -1,5 +1,6 @@
#include <windows.h>
#include <sstream>
#include <tchar.h>
//--------------------------------------------------------------------------------------------------
using namespace std;

View file

@ -0,0 +1,117 @@
// version 1.2.10
import java.awt.*
import java.awt.event.*
import java.awt.image.*
import java.util.Random
import javax.swing.*
class ImageNoise {
var framecount = 0
var fps = 0
lateinit var image: BufferedImage
val kernel: Kernel
lateinit var cop: ConvolveOp
val frame = JFrame("Java Image Noise")
val panel = object : JPanel() {
private var showFps = 0 // 0 = blur + FPS; 1 = FPS only; 2 = neither
private val ma = object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
showFps = (showFps + 1) % 3
}
}
init {
addMouseListener(ma)
preferredSize = Dimension(320, 240)
}
override fun paintComponent(g1: Graphics) {
val g = g1 as Graphics2D
drawNoise()
g.drawImage(image, 0, 0, null)
if (showFps == 0) {
// add blur behind FPS
val xblur = width - 130
val yblur = height - 32
val bc = image.getSubimage(xblur, yblur, 115, 32)
val bs = BufferedImage(
bc.width, bc.height, BufferedImage.TYPE_BYTE_GRAY
)
cop.filter(bc, bs)
g.drawImage(bs, xblur, yblur, null)
}
if (showFps <= 1) {
// add FPS text
g.color = Color.RED
g.font = Font("Monospaced", Font.BOLD, 20)
g.drawString("FPS: $fps", width - 120, height - 10)
}
framecount++
}
}
// Timer to trigger update display, with 1 ms delay
val repainter = Timer(1, object: ActionListener {
override fun actionPerformed(e: ActionEvent) = panel.repaint()
})
// Timer to check FPS, once per second
val framerateChecker = Timer(1000, object : ActionListener {
override fun actionPerformed(e: ActionEvent) {
fps = framecount
framecount = 0
}
})
init {
// Intitalize kernel describing blur, and convolve operation based on this
val vals = FloatArray(121) { 1.0f / 121.0f }
kernel = Kernel(11, 11, vals)
cop = ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null)
// Initialize frame and timers
with (frame) {
add(panel)
defaultCloseOperation = JFrame.EXIT_ON_CLOSE
pack()
isVisible = true
}
repainter.start()
framerateChecker.start()
}
fun drawNoise() {
val w = panel.width
val h = panel.height
// Check if our image is initialized or window has been resized,
// requiring new image
if (!this::image.isInitialized || image.width != w || image.height != h) {
image = BufferedImage(w, h, BufferedImage.TYPE_BYTE_GRAY)
}
val rand = Random()
val data = IntArray(w * h)
// Each int has 32 bits so we can use each bit for a different pixel
// - much faster
for (x in 0 until w * h / 32) {
var r = rand.nextInt()
for (i in 0..31) {
data[x * 32 + i] = (r and 1) * Int.MAX_VALUE
r = r ushr 1
}
}
// Copy raw data to the image's raster
image.raster.setPixels(0, 0, w, h, data)
}
}
fun main(args: Array<String>) {
// Invoke GUI on the Event Dispatching Thread
SwingUtilities.invokeLater(object: Runnable {
override fun run() {
ImageNoise()
}
})
}

View file

@ -1,50 +1,78 @@
use NativeCall;
use SDL2::Raw;
use nqp;
class SDL_Window is repr('CStruct') {}
class SDL_Renderer is repr('CStruct') {}
my ($w, $h) = 320, 240;
my int ($w, $h) = 320, 240;
my SDL_Window $window;
my SDL_Renderer $renderer;
constant $sdl-lib = 'libSDL2';
constant SDL_INIT_VIDEO = 0x00000020;
constant SDL_WINDOWPOS_UNDEFINED_MASK = 0x1FFF0000;
constant SDL_WINDOW_SHOWN = 0x00000004;
constant $sdl-lib = 'SDL2';
sub SDL_Init(int32 $flag) returns int32 is native($sdl-lib) {*}
sub SDL_Quit() is native($sdl-lib) {*}
sub SDL_RenderDrawPoints( SDL_Renderer $, CArray[int32] $points, int32 $count ) returns int32 is native($sdl-lib) {*}
sub SDL_CreateWindow(Str $title, int $x, int $y, int $w, int $h, int32 $flag) returns SDL_Window is native($sdl-lib) {*}
sub SDL_CreateRenderer(SDL_Window $, int $, int $) returns SDL_Renderer is native($sdl-lib) {*}
sub SDL_SetRenderDrawColor(SDL_Renderer $, int $r, int $g, int $b, int $a) returns Int is native($sdl-lib) {*}
sub SDL_RenderClear(SDL_Renderer $) returns Int is native($sdl-lib) {*}
sub SDL_RenderDrawPoint( SDL_Renderer $, int $x, int $y ) returns Int is native($sdl-lib) {*}
sub SDL_RenderPresent(SDL_Renderer $) is native($sdl-lib) {*}
SDL_Init(VIDEO);
$window = SDL_CreateWindow(
"some white noise",
SDL_WINDOWPOS_CENTERED_MASK, SDL_WINDOWPOS_CENTERED_MASK,
$w, $h,
SHOWN
);
$renderer = SDL_CreateRenderer( $window, -1, ACCELERATED +| TARGETTEXTURE );
SDL_ClearError();
my $noise_texture = SDL_CreateTexture($renderer, %PIXELFORMAT<RGB332>, STREAMING, $w, $h);
my $pixdatabuf = CArray[int64].new(0, 1234, 1234, 1234);
sub render {
SDL_SetRenderDrawColor($renderer, 0, 0, 0, 0);
SDL_RenderClear($renderer);
SDL_SetRenderDrawColor($renderer, 255, 255, 255, 0);
loop (my int $i; $i < $w; $i = $i + 1) {
loop (my int $j; $j < $h; $j = $j + 1) {
SDL_RenderDrawPoint( $renderer, $i, $j ) if Bool.pick
my int $pitch;
my int $cursor;
# work-around to pass the pointer-pointer.
my $pixdata = nativecast(Pointer[int64], $pixdatabuf);
SDL_LockTexture($noise_texture, SDL_Rect, $pixdata, $pitch);
$pixdata = nativecast(CArray[int8], Pointer.new($pixdatabuf[0]));
loop (my int $row; $row < $h; $row = $row + 1) {
loop (my int $col; $col < $w; $col = $col + 1) {
$pixdata[$cursor + $col] = Bool.roll ?? 0xff !! 0x0;
}
$cursor = $cursor + $pitch;
}
SDL_UnlockTexture($noise_texture);
SDL_RenderCopy($renderer, $noise_texture, SDL_Rect, SDL_Rect);
SDL_RenderPresent($renderer);
}
SDL_Init(SDL_INIT_VIDEO);
$window = SDL_CreateWindow(
"some white noise",
SDL_WINDOWPOS_UNDEFINED_MASK, SDL_WINDOWPOS_UNDEFINED_MASK,
$w, $h,
SDL_WINDOW_SHOWN
);
$renderer = SDL_CreateRenderer( $window, -1, 1 );
loop {
my $then = now;
my $event = SDL_Event.new;
my @times;
main: loop {
my $start = nqp::time_n();
while SDL_PollEvent($event) {
my $casted_event = SDL_CastEvent($event);
given $casted_event {
when *.type == QUIT {
last main;
}
}
}
render();
note "{1 / (now - $then)} fps";
@times.push: nqp::time_n() - $start;
}
END { SDL_Quit() }
@times .= sort;
my @timings = (@times[* div 50], @times[* div 4], @times[* div 2], @times[* * 3 div 4], @times[* - * div 100]);
say "frames per second:";
say (1 X/ @timings).fmt("%3.4f");