June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
|
|
@ -1,5 +1,6 @@
|
|||
#include <windows.h>
|
||||
#include <sstream>
|
||||
#include <tchar.h>
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
using namespace std;
|
||||
|
||||
|
|
|
|||
117
Task/Image-noise/Kotlin/image-noise.kotlin
Normal file
117
Task/Image-noise/Kotlin/image-noise.kotlin
Normal 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()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -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");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue