wip: draw rect

This commit is contained in:
AzazelN28
2024-10-03 16:39:53 +02:00
parent dc014bd4eb
commit 81680cffe9
9 changed files with 4404 additions and 538 deletions

View File

@@ -25,7 +25,7 @@ RUN cd /tmp \
RUN cd /tmp \
&& git clone 'https://skia.googlesource.com/skia' \
&& cd skia \
&& git checkout 'chrome/m127'
&& git checkout 'chrome/m129'
ENV PATH=${PATH}:/tmp/depot_tools
ENV PATH=${PATH}:/tmp/gn

View File

@@ -31,7 +31,6 @@ all:
-DSK_FORCE_AAA \
-DSK_FORCE_8_BYTE_ALIGNMENT \
-DSK_SHAPER_HARFBUZZ_AVAILABLE \
-DCK_INCLUDE_PARAGRAPH \
-DCK_SERIALIZE_SKP \
-DSK_GANESH \
-DSK_DISABLE_LEGACY_SHADERCONTEXT \

View File

@@ -1,9 +1,13 @@
// Adds compile-time JS functions to augment Renderer interface.
(function (Renderer) {
console.log("preamble", Renderer);
//
let gr;
let surface;
Renderer.setCanvas = function setCanvas(canvas, attrs) {
console.log("GL", GL);
debugger
const context = GL.createContext(canvas, attrs);
if (!context) {
throw new Error('Could not create a new WebGL context')
@@ -15,6 +19,77 @@
GL.currentContext.GLctx.getExtension('WEBGL_debug_renderer_info');
console.log("setCanvas", canvas, attrs);
const gr = this._MakeGrContext();
gr = this._MakeGrContext();
console.log("gr", gr);
surface = this._MakeOnScreenGLSurface(gr, canvas.width, canvas.height);
console.log("surface", surface);
if (!surface) {
throw new Error('Cannot initialize surface')
}
};
function wasMalloced(obj) {
return obj && obj['_ck'];
}
function copy1dArray(arr, dest, ptr) {
if (!arr || !arr.length) return null;
if (wasMalloced(arr)) {
return arr.byteOffset;
}
const bytesPerElement = Renderer[dest].BYTES_PER_ELEMENT;
if (!ptr) {
ptr = Renderer._malloc(arr.length * bytesPerElement);
}
Renderer[dest].set(arr, ptr / bytesPerElement);
return ptr;
}
function copyRectToWasm(fourFloats, ptr) {
return copy1dArray(fourFloats, 'HEAPF32', ptr || null);
}
function copyColorToWasm(color4f, ptr) {
return copy1dArray(color4f, 'HEAPF32', ptr || null);
}
Renderer.drawCanvas = function drawCanvas(vbox, zoom, objects) {
console.log("vbox", vbox);
console.log("zoom", zoom);
if (!surface) {
throw new Error('Surface uninitialized');
}
console.log("renderer", Renderer);
console.log("surface", surface);
// Esto es una ÑAPA terrible, no me gusta.
if (!Renderer.Paint.prototype.setColor) {
Renderer.Paint.prototype.setColor = function(color4f, colorSpace = null) {
const cPtr = copyColorToWasm(color4f);
this._setColor(cPtr, colorSpace);
}
}
const paint = new Renderer.Paint();
paint.setColor(Float32Array.of(1.0, 0, 0, 1.0));
paint.setStyle(Renderer.PaintStyle.Fill);
paint.setAntiAlias(true);
console.log("paint", paint);
const canvas = surface._getCanvas();
console.log("canvas", canvas);
const cPtr = copyColorToWasm(Float32Array.of(0.0, 0.0, 0.0, 1.0))
canvas._clear(cPtr);
console.log("canvas cleared");
for (const { val: object } of objects) {
console.log("object", object);
const rr = Float32Array.of(object.selrect.x, object.selrect.y, object.selrect.width, object.selrect.height);
const rPtr = copyRectToWasm(rr);
canvas._drawRect(rPtr, paint);
}
};

View File

@@ -1,11 +1,11 @@
#!/bin/bash
mkdir -p ../../resources/public/js/render-v2/cpp
mkdir -p ../../src/app/render-v2/
mkdir -p ../../resources/public/js/render_v2/cpp
mkdir -p ../../src/app/render_v2/
# FIXME: This is a VERY HACKY way to set the correct `scriptDirectory` but
# I didn't find a better way yet.
PREAMBLE_LINES=`wc -l js/preamble.js | egrep -o [0-9]+`
POSTAMBLE_LINES=`wc -l js/postamble.js | egrep -o [0-9]+`
LINE_NUMBER=`echo "200 + ${PREAMBLE_LINES} + ${POSTAMBLE_LINES}" | bc | egrep -o [0-9]+`
sed "${LINE_NUMBER} i \ \ scriptDirectory += 'render-v2/cpp/';" out/render-v2.js > ../../src/app/render-v2/cpp.js
cp out/render-v2.wasm ../../resources/public/js/render-v2/cpp
sed "${LINE_NUMBER} i \ \ scriptDirectory += 'js/render_v2/cpp/';" out/renderer.js > ../../src/app/render_v2/cpp.js
cp out/renderer.wasm ../../resources/public/js/render_v2/cpp

File diff suppressed because it is too large Load Diff