Merge pull request #54 from bitfeed-project/v2.3.4

Clean up graphics scaling
This commit is contained in:
Mononaut 2022-06-13 03:06:50 +01:00 committed by GitHub
commit d2272e720c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 18 additions and 66 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "bitfeed-client", "name": "bitfeed-client",
"version": "2.3.3", "version": "2.3.4",
"scripts": { "scripts": {
"build": "rollup -c", "build": "rollup -c",
"dev": "rollup -c -w", "dev": "rollup -c -w",

View File

@ -2,7 +2,7 @@
import config from '../config.js' import config from '../config.js'
import analytics from '../utils/analytics.js' import analytics from '../utils/analytics.js'
import SidebarMenuItem from '../components/SidebarMenuItem.svelte' import SidebarMenuItem from '../components/SidebarMenuItem.svelte'
import { settings, nativeAntialias, exchangeRates, haveMessages } from '../stores.js' import { settings, exchangeRates, haveMessages } from '../stores.js'
import { currencies } from '../utils/fx.js' import { currencies } from '../utils/fx.js'
function toggle(setting) { function toggle(setting) {
@ -59,14 +59,6 @@ let settingConfig = {
} }
} }
$: { $: {
if ($nativeAntialias) {
settingConfig.fancyGraphics = false
} else {
settingConfig.fancyGraphics = {
label: 'Fancy Graphics',
valueType: 'bool'
}
}
if (config.messagesEnabled && $haveMessages) { if (config.messagesEnabled && $haveMessages) {
settingConfig.showMessages = { settingConfig.showMessages = {
label: 'Message Bar', label: 'Message Bar',

View File

@ -4,16 +4,16 @@
import fragShaderSrc from '../shaders/tx.frag' import fragShaderSrc from '../shaders/tx.frag'
import TxSprite from '../models/TxSprite.js' import TxSprite from '../models/TxSprite.js'
import { color, hcl } from 'd3-color' import { color, hcl } from 'd3-color'
import { darkMode, frameRate, avgFrameRate, nativeAntialias, settings, devSettings, freezeResize } from '../stores.js' import { darkMode, settings, devSettings, freezeResize } from '../stores.js'
import config from '../config.js' import config from '../config.js'
let canvas let canvas
let gl let gl
let animationFrameRequest let animationFrameRequest
let simulateAntialiasing = false
let autoSetGraphicsMode = false
let displayWidth let displayWidth
let displayHeight let displayHeight
let cssWidth
let cssHeight
let shaderProgram let shaderProgram
let aspectRatio let aspectRatio
let sceneScale = [1.0, 1.0] let sceneScale = [1.0, 1.0]
@ -21,10 +21,6 @@
let debugPointArray let debugPointArray
let lastTime = performance.now() let lastTime = performance.now()
let rawFrameRate = 0
const frameRateSamples = Array(60).fill(60)
const frameRateReducer = (acc, rate) => { return acc + rate }
let frameRateSampleIndex = 0
const nullPointArray = new Float32Array() const nullPointArray = new Float32Array()
@ -68,11 +64,6 @@
if (running) run() if (running) run()
} }
$: {
simulateAntialiasing = !$nativeAntialias && $settings.fancyGraphics
resizeCanvas()
}
function windowReady () { function windowReady () {
resizeCanvas() resizeCanvas()
} }
@ -83,16 +74,13 @@
resizeTimer = null resizeTimer = null
// var rect = canvas.parentNode.getBoundingClientRect() // var rect = canvas.parentNode.getBoundingClientRect()
if (canvas && !sizeFrozen) { if (canvas && !sizeFrozen) {
displayWidth = window.innerWidth cssWidth = window.innerWidth
displayHeight = window.innerHeight cssHeight = window.innerHeight
if (simulateAntialiasing) { displayWidth = cssWidth * window.devicePixelRatio
canvas.width = displayWidth * 2 displayHeight = cssHeight * window.devicePixelRatio
canvas.height = displayHeight * 2 canvas.width = displayWidth
} else { canvas.height = displayHeight
canvas.width = displayWidth if (gl) gl.viewport(0, 0, displayWidth, displayHeight)
canvas.height = displayHeight
}
if (gl) gl.viewport(0, 0, canvas.width, canvas.height)
} else { } else {
resizeTimer = setTimeout(resizeCanvas, 500) resizeTimer = setTimeout(resizeCanvas, 500)
} }
@ -167,7 +155,7 @@
/* SET UP SHADER UNIFORMS */ /* SET UP SHADER UNIFORMS */
// screen dimensions // screen dimensions
gl.uniform2f(gl.getUniformLocation(shaderProgram, 'screenSize'), displayWidth, displayHeight) gl.uniform2f(gl.getUniformLocation(shaderProgram, 'screenSize'), cssWidth, cssHeight)
// frame timestamp // frame timestamp
gl.uniform1f(gl.getUniformLocation(shaderProgram, 'now'), now) gl.uniform1f(gl.getUniformLocation(shaderProgram, 'now'), now)
gl.uniform1i(gl.getUniformLocation(shaderProgram, 'colorTexture'), 0); gl.uniform1i(gl.getUniformLocation(shaderProgram, 'colorTexture'), 0);
@ -187,25 +175,8 @@
gl.drawArrays(gl.TRIANGLES, 0, pointArray.length / TxSprite.vertexSize) gl.drawArrays(gl.TRIANGLES, 0, pointArray.length / TxSprite.vertexSize)
} }
const rawFrameRate = (1000 / (now - lastTime)) + 0.075
frameRateSamples[frameRateSampleIndex++] = rawFrameRate
if (frameRateSampleIndex >= frameRateSamples.length) frameRateSampleIndex = 0
const rawAvgFrameRate = frameRateSamples.reduce(frameRateReducer, 0) / frameRateSamples.length
// rawFrameRate = Math.max(1, (rawFrameRate * 0.8) + (0.2 * (1 / (frameTime / 1000))))
if (rawAvgFrameRate < 45 && !autoSetGraphicsMode) {
autoSetGraphicsMode = true
$settings.fancyGraphics = false
}
frameRate.set(rawFrameRate)
avgFrameRate.set(rawAvgFrameRate)
lastTime = now
/* LOOP */ /* LOOP */
if (running) { if (running) {
// if (animationFrameRequest) {
// cancelAnimationFrame(animationFrameRequest)
// animationFrameRequest = null
// }
animationFrameRequest = requestAnimationFrame(run) animationFrameRequest = requestAnimationFrame(run)
} }
} }
@ -253,8 +224,6 @@
} }
function initCanvas () { function initCanvas () {
$nativeAntialias = gl.getContextAttributes().antialias
gl.clearColor(0.0, 0.0, 0.0, 0.0) gl.clearColor(0.0, 0.0, 0.0, 0.0)
gl.clear(gl.COLOR_BUFFER_BIT) gl.clear(gl.COLOR_BUFFER_BIT)
@ -327,11 +296,6 @@
bottom: 0; bottom: 0;
/* pointer-events: none; */ /* pointer-events: none; */
overflow: hidden; overflow: hidden;
&.sim-antialias {
transform: scale(0.5);
transform-origin: top left;
}
} }
</style> </style>
@ -339,6 +303,8 @@
<canvas <canvas
class="tx-scene" class="tx-scene"
class:sim-antialias={simulateAntialiasing} width={displayWidth}
height={displayHeight}
style="width: {cssWidth}px; height: {cssHeight}px;"
bind:this={canvas} bind:this={canvas}
></canvas> ></canvas>

View File

@ -4,7 +4,7 @@
import TxRender from './TxRender.svelte' import TxRender from './TxRender.svelte'
import getTxStream from '../controllers/TxStream.js' import getTxStream from '../controllers/TxStream.js'
import { settings, overlay, serverConnected, serverDelay, txCount, mempoolCount, import { settings, overlay, serverConnected, serverDelay, txCount, mempoolCount,
mempoolScreenHeight, frameRate, avgFrameRate, blockVisible, tinyScreen, mempoolScreenHeight, blockVisible, tinyScreen,
compactScreen, currentBlock, latestBlockHeight, selectedTx, blockAreaSize, compactScreen, currentBlock, latestBlockHeight, selectedTx, blockAreaSize,
devEvents, devSettings, pageWidth, pageHeight, loading, freezeResize } from '../stores.js' devEvents, devSettings, pageWidth, pageHeight, loading, freezeResize } from '../stores.js'
import BlockInfo from '../components/BlockInfo.svelte' import BlockInfo from '../components/BlockInfo.svelte'
@ -30,7 +30,6 @@
let running = false let running = false
let lastFrameUpdate = 0 let lastFrameUpdate = 0
let frameRateLabel = ''
let txStream let txStream
if (!config.noTxFeed || !config.noBlockFeed) txStream = getTxStream() if (!config.noTxFeed || !config.noBlockFeed) txStream = getTxStream()

View File

@ -87,8 +87,6 @@ export const txCount = createCounter()
export const lastBlockId = writable(null) export const lastBlockId = writable(null)
export const mempoolCount = tweened(0) export const mempoolCount = tweened(0)
export const mempoolScreenHeight = writable(0) export const mempoolScreenHeight = writable(0)
export const frameRate = writable(null)
export const avgFrameRate = writable(null)
export const blockVisible = writable(false) export const blockVisible = writable(false)
export const currentBlock = writable(null) export const currentBlock = writable(null)
export const selectedTx = writable(null) export const selectedTx = writable(null)
@ -107,7 +105,6 @@ const defaultSettings = {
showFX: true, showFX: true,
vbytes: false, vbytes: false,
colorByFee: false, colorByFee: false,
fancyGraphics: true,
showMessages: true, showMessages: true,
showSearch: true, showSearch: true,
noTrack: false, noTrack: false,
@ -140,8 +137,6 @@ export const devSettings = (config.dev && config.debug) ? createCachedDict('dev-
export const sidebarToggle = writable(null) export const sidebarToggle = writable(null)
export const nativeAntialias = writable(false)
const newVisitor = !localStorage.getItem('seen-welcome-msg') const newVisitor = !localStorage.getItem('seen-welcome-msg')
// export const overlay = writable(newVisitor ? 'about' : null) // export const overlay = writable(newVisitor ? 'about' : null)
export const overlay = writable(null) export const overlay = writable(null)

View File

@ -4,7 +4,7 @@ defmodule BitcoinStream.MixProject do
def project do def project do
[ [
app: :bitcoin_stream, app: :bitcoin_stream,
version: "2.3.3", version: "2.3.4",
elixir: "~> 1.10", elixir: "~> 1.10",
start_permanent: Mix.env() == :prod, start_permanent: Mix.env() == :prod,
deps: deps(), deps: deps(),