Compare commits

..

3 Commits

Author SHA1 Message Date
a519a9696c Added init struct (resource loading helpers) 2020-04-21 19:04:08 +02:00
7165f9ee89 Entity and sprite plan 2020-04-21 15:55:56 +02:00
7e679e3cc3 Class & id transfer when node swapping 2020-04-21 15:14:04 +02:00
16 changed files with 111 additions and 36 deletions

4
sunpy/__init__.js Normal file
View File

@ -0,0 +1,4 @@
// Map
import "./core/__init__.js";
import "./node/__init__.js";
import "./canvas/__init__.js";

10
sunpy/canvas/__init__.js Normal file
View File

@ -0,0 +1,10 @@
// Depends
import "../core/__init__.js";
import "../node/__init__.js";
// Map
import "./entity.js";
import "./helpers.js";
import "./renderer.js";
import "./gl/texture.js";

18
sunpy/canvas/entity.js Normal file
View File

@ -0,0 +1,18 @@
export class Entity {
constructor() {}
async render(renderNode) {}
async update(renderNode) {}
}
export class Sprite extends Entity {
constructor(image) {
if (!(image instanceof Image))
throw TypeError("Image has to be instance of `Image`");
this.image = image;
}
async render(renderNode) {
}
}

View File

@ -0,0 +1,9 @@
precision mediump float;
uniform sampler2D u_texture;
varying vec2 v_texcoord;
void main() {
gl_FragColor = texture2D(u_texture, v_texcoord);
}

View File

@ -0,0 +1,11 @@
attribute vec4 position;
attribute vec2 texcoord;
uniform mat4 u_matrix;
varying vec2 v_texcoord;
void main() {
gl_Position = u_matrix * position;
v_texcoord = texcoord;
}

View File

@ -0,0 +1,23 @@
//const fs = await (await fetch("./shaders/texture.fs")).text();
export async function compile() {
/*
const fs = await (await fetch("./shaders/texture.fs")).text();
const vs = await (await fetch("./shaders/texture.vs")).text();
*/
const fs = import("./shaders/texture.fs");
const vs = import("./shaders/texture.vs");
window.fs = fs;
window.vs = vs;
console.log("done");
}
export function drawImage(gl, tex, texWidth, texHeight, dstX, dstY) {
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.useProgram(program); // TODO
}

0
sunpy/canvas/helpers.js Normal file
View File

View File

@ -3,6 +3,7 @@ import { PropertyNode } from "../node/nodes/propertynode.js";
import { PropertyReader, Property } from "../node/propertyreader.js"; import { PropertyReader, Property } from "../node/propertyreader.js";
import { sleep } from "../core/utils.js"; import { sleep } from "../core/utils.js";
import { Vector } from "../core/vector.js"; import { Vector } from "../core/vector.js";
import { Entity } from "./entity.js";
register("canvas", initRenderNode); register("canvas", initRenderNode);
@ -31,7 +32,7 @@ export class RenderNode extends PropertyNode {
this.gl.depthFunc(this.gl.LEQUAL); this.gl.depthFunc(this.gl.LEQUAL);
this.fps = 0; this.fps = 0;
this.objects = []; this.entities = [];
this.running = false; this.running = false;
} }
@ -52,11 +53,11 @@ export class RenderNode extends PropertyNode {
this.running = false; this.running = false;
} }
add(object) { add(entity) {
if (!(object instanceof Renderable)) if (!(entity instanceof Entity))
throw TypeError("Object must be instance of Renderable"); throw TypeError("entity must be instance of `Entity`");
this.objects.push(object); this.entities.push(entity);
} }
async loop() { // TODO: Fix all variables async loop() { // TODO: Fix all variables
@ -83,22 +84,11 @@ export class RenderNode extends PropertyNode {
} }
async render() { async render() {
this.gl.clearColor(0.0, 0.0, 0.0, 1.0); this.gl.clearColor(0.0, 0.0, 0.0, 1.0);
this.gl.clear(this.gl.COLOR_BUFFER_BIT | this.gl.DEPTH_BUFFER_BIT); this.gl.clear(this.gl.COLOR_BUFFER_BIT | this.gl.DEPTH_BUFFER_BIT);
for (const object of this.objects) { for (const entity of this.entities) {
await object.render(this); await entity.render(this);
} }
} }
}
export class Renderable {
constructor() {
}
async render(renderNode) {
}
} }

3
sunpy/core/__init__.js Normal file
View File

@ -0,0 +1,3 @@
// Map
import "./utils.js"
import "./vector.js";

7
sunpy/node/__init__.js Normal file
View File

@ -0,0 +1,7 @@
// Map
import "./node.js";
import "./propertyreader.js";
import "./nodes/basenode.js";
import "./nodes/swapnode.js";
import "./nodes/propertynode.js";

View File

@ -6,7 +6,7 @@ export class PropertyNode extends SwapNode {
super(node, swapNode); super(node, swapNode);
if (!(propertyReader instanceof PropertyReader)) if (!(propertyReader instanceof PropertyReader))
throw TypeError("propertyReader must be an instance of PropertyReader"); throw TypeError("propertyReader must be an instance of `PropertyReader`");
this.propertyReader = propertyReader; this.propertyReader = propertyReader;

View File

@ -5,7 +5,7 @@ export class SwapNode extends BaseNode {
super(node); super(node);
if (!(swapNode instanceof Node)) if (!(swapNode instanceof Node))
throw TypeError("swapNode must be instance of Node"); throw TypeError("swapNode must be instance of `Node`");
this.swapNode = swapNode; this.swapNode = swapNode;
@ -16,6 +16,12 @@ export class SwapNode extends BaseNode {
if (this.hasReplaceNodes) if (this.hasReplaceNodes)
return false; return false;
// Copy id and classes to new node
if (this.node.id)
this.swapNode.id = this.node.id;
if (this.node.classList.length)
this.swapNode.classList = this.node.classList;
this.linker(this.node, this.swapNode); this.linker(this.node, this.swapNode);
this.node.parentNode.replaceChild(this.swapNode, this.node); this.node.parentNode.replaceChild(this.swapNode, this.node);

2
sunpy/orep/__init__.js Normal file
View File

@ -0,0 +1,2 @@
// Map
import "./orep.js";

View File

@ -1,13 +1,3 @@
import { RenderNode } from "../canvas/renderer.js"; import { RenderNode } from "../canvas/renderer.js";
import { compile } from "../canvas/gl/texture.js";
/* window.compile = compile;
var onloadOld = onload || (() => {});
onload = () => {
onloadOld();
init();
}
function init() {
}
*/

View File

@ -11,7 +11,7 @@
console.log("TEST - onload defined before module load"); console.log("TEST - onload defined before module load");
} }
</script> </script>
<script type="module" src="/sunpy/orep/orep.js" async></script> <script type="module" src="/sunpy/__init__.js" async></script>
<script> <script>
var onloadPost = onload || (() => {}); var onloadPost = onload || (() => {});
onload = () => { onload = () => {
@ -21,10 +21,10 @@
</script> </script>
</head> </head>
<body> <body>
<script type="orep/canvas"> <script type="orep/canvas" class="test" id="render">
size = 400x300 size = 400x300
</script> </script>
<script type="orep/canvas"> <script type="orep/canvas" class="test abc" id="stats">
size = 600x450 size = 600x450
</script> </script>
</body> </body>

View File

@ -4,7 +4,9 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tests - render</title> <title>Tests - render</title>
<script type="module" src="/sunpy/orep/orep.js" async></script> <script type="module" async>
import "../sunpy/__init__.js";
</script>
</head> </head>
<body> <body>
<script type="orep/canvas"> <script type="orep/canvas">