Commit Graph

639 Commits

Author SHA1 Message Date
Christopher Cooper f542f75202 fix bounds check 2017-07-05 18:15:53 -04:00
Christopher Cooper 6dd3a9a643 mremove prints 2017-07-05 18:11:26 -04:00
Christopher Cooper 538d42f9a6 add initial speaker implementation 2017-07-05 18:10:03 -04:00
Christopher Cooper e7a7b16be2 Merge pull request #1 from faiface/audio
Audio
2017-07-05 18:05:50 -04:00
Michal Štrba c91a8fd6e9 Merge pull request #43 from aerth/audio
add libasound2-dev travis dependency
2017-07-05 22:04:44 +02:00
aerth 777c7f1717 add libasound2-dev dependency 2017-07-05 12:24:26 -07:00
faiface e64d97efb1 fix Rect.Intersect 2017-07-05 20:36:25 +02:00
faiface da52aa25ec clarify Rect.Intersect doc 2017-07-05 19:58:09 +02:00
faiface 69d4a37e5e add Rect.Intersect 2017-07-05 19:54:30 +02:00
faiface 2b9b4d07c4 add Rect.Area 2017-07-05 19:54:18 +02:00
faiface d41492df91 add Rect.Intersect 2017-07-05 19:51:54 +02:00
faiface 72a4dd03e7 add Rect.Area 2017-07-05 19:35:11 +02:00
faiface 5723022b5a add Take decorator function 2017-07-05 18:14:18 +02:00
faiface f3e2b915bd add Seq compositor 2017-07-05 17:59:43 +02:00
faiface c142c3eb0a add StreamerFunc helper type 2017-07-03 19:07:30 +02:00
faiface a1542703d5 change SampleRate to float64 2017-07-03 18:55:27 +02:00
faiface 019c0f83e1 fix grammar in Streamer doc 2017-07-03 17:37:55 +02:00
faiface ada24fe35c minor stylistic corrections in Streamer doc 2017-07-03 17:28:54 +02:00
faiface c3ce0517f1 audio: add Streamer interface 2017-07-03 14:05:08 +02:00
faiface be247e49f5 optimize ToRGBA (weird one) 2017-07-03 00:23:07 +02:00
faiface dd1ddd15b3 improve sprite.Draw(batch) benchmark 2017-07-03 00:22:45 +02:00
faiface 96f9ed3622 fix bug in text benchmark 2017-07-02 23:26:26 +02:00
faiface e41c8b585b optimize Drawer (reduce map access) 2017-07-02 23:23:27 +02:00
faiface 2c9c36ba28 add text benchmarks 2017-07-02 19:35:56 +02:00
faiface 03f6b2d854 remove unnecessary reassign in color benchmarks 2017-07-02 19:26:43 +02:00
faiface 95f90d3b0d add imdraw benchmarks 2017-07-02 19:22:40 +02:00
faiface 7f4bc89dc4 add ToRGBA, sprite.Draw(batch) and Matrix benchmarks 2017-07-02 19:04:20 +02:00
Michal Štrba 578db5e284 Merge pull request #40 from aerth/master
Use travis-ci
2017-06-16 01:14:23 +02:00
aerth ad2b94bfbc move button 2017-06-15 23:05:00 +00:00
aerth 983146ea91 Link to travis build 2017-06-15 22:52:47 +00:00
aerth 19b10859ad add travis config 2017-06-15 22:40:37 +00:00
faiface 886e7fa22a another minor code style change 2017-06-11 14:14:02 +02:00
faiface 99a43ec1a9 minor code style change 2017-06-11 14:06:45 +02:00
faiface 12df203229 Merge branch 'dev' 2017-06-11 01:19:57 +02:00
faiface d4cd1c33e2 one more tiny doc change 2017-06-11 01:18:23 +02:00
faiface 51cd0314d5 minor doc changes 2017-06-11 01:17:37 +02:00
Michal Štrba 6a9211310a Merge pull request #38 from seebs/master
more performance tweaks
2017-06-11 01:12:03 +02:00
Seebs ee5d49dbd3 Push: Don't convert pixel.RGBA to pixel.RGBA
Because that's expensive, even in the case where the conversion
is trivial. Use type assertion first. Reduces runtime cost of
imdraw.Push from ~15.3% to 8.4%, so not-quite-50% of runtime
cost of pushing points.

If you were setting imd.Color to Color objects that aren't RGBA
every single point, not much help. But if you set it and then
draw a bunch of points, this will be a big win.
2017-06-10 17:56:15 -05:00
Seebs daedc45ea9 Improve normal calculations
Soooo. It turns out that the bunch of smallish (~4-5% of runtime)
loads associated with Len(), Unit(), Rotated(), and so on... Were
actually more like 15% or more of computational effort. I first
figured this out by creating:

	func (u Vec) Normal(v Vec) Vec

which gives you a vector normal to u->v. That consumed a lot
of CPU time, and was followed by .Unit().Scaled(imd.thickness / 2),
which consumed a bit more CPU time.

After some poking, and in the interests of avoiding UI cruft,
the final selection is
	func (u Vec) Normal() Vec

This returns the vector rotated 90 degrees, which turns out to
be the most common problem.
2017-06-10 17:55:16 -05:00
Seebs 678da34fc3 Slightly clean up normal calculations
We never actually need the "normal" value; it's an extra calculation
we didn't need, because ijNormal is the same value early on. It's
totally possible that we could further simplify this; there's a lot
of time going into the normal computations.
2017-06-10 10:47:22 -05:00
Seebs f68301dcd8 don't call Len() when it can't change
updateData()'s loops checking gt.Len() turns out to have been costing
significant computation, not least because each call then in turn
called gt.vs.Stride().
2017-06-10 10:47:18 -05:00
faiface cfdc8beb81 switch back to OpenGL 3.3 (OS X issues) 2017-06-10 15:11:45 +02:00
faiface 1fd110ce4c optimize GLTriangles SetLen and Update 2017-06-10 01:10:59 +02:00
faiface 3665eaf702 Merge branch 'master' into gl2.1 2017-06-09 19:26:14 +02:00
faiface c0766504e3 minor, mostly stylistic, changes 2017-06-09 18:13:05 +02:00
Michal Štrba 5f2ced88ee Merge pull request #36 from seebs/master
revised performance tuning pull request
2017-06-09 18:04:25 +02:00
Seebs ce8687b80f Don't duplicate computations in gltriangles.go
The computation including a call to Stride() can't be optimized away
safely because the compiler can't tell that Stride() is effectively
constant, but we know it won't change so we can make a slice pointing
at that part of the array.

CPU time for updateData goes from 26.35% to 18.65% in my test case.
2017-06-09 10:37:47 -05:00
Seebs c6e7a83467 Reduce copying in fillPolygon
A slice of points means copying every point into the slice, then
copying every point's data from the slice to TrianglesData. An
array of indicies lets the compiler make better choices.
2017-06-09 10:37:47 -05:00
Seebs b6533006e7 smaller imdraw optimizations
For polyline, don't compute each normal twice; when we're going through a line,
the "next" normal for segment N is always the "previous" normal for segment
N+1, and we can compute fewer of them.
2017-06-09 10:37:47 -05:00
Seebs 9d1fc5bd1f use point pool
For internal operations (anything using getAndClearPoints), there's a
pretty good chance that the operation will repeatedly invoke something
like fillPolygon(), meaning that it needs to push "a few" points
and then invoke something that uses those points.

So, we add a slice for containing spare slices of points, and on the
way out of each such function, shove the current imd.points (as used
inside that function) onto a stack, and set imd.points to [0:0] of
the thing it was called with.

Performance goes from 11-13fps to 17-18fps on my test case.
2017-06-09 10:37:47 -05:00