rapid-render 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,29 +1,35 @@
1
- # 🚀 Rapid.js
1
+ <p align="center">
2
+ <img src="./screenshot/logo.png" alt="Rapid.js Logo" width="100" style="image-rendering: pixelated;">
3
+ </p>
2
4
 
3
- A highly efficient and lightweight WebGL renderer
5
+ <a href="https://nightre.github.io/Rapid.js/docs/index.html"><h1 align="center">Rapid.js</h1></a>
4
6
 
5
- ## [API Docs](https://nightre.github.io/Rapid.js/docs/)
7
+ A highly efficient ([stress-test](./docs/examples.html)) and lightweight WebGL-based 2D rendering engine focused on rendering capabilities. Rapid.js provides a simple and intuitive API for developers to quickly build high-performance 2D
8
+ games, while staying completely independent from your game's architecture and logic.
6
9
 
7
- [stress test demo](https://nightre.github.io/Rapid.js/demo/) ( [source code](./demo/index.js) )
8
10
 
9
- [render demo](https://nightre.github.io/Rapid.js/demo/matrix_stack.html) ( [source code](./demo/matrix_stack.js) )
11
+ ### [Website](https://nightre.github.io/Rapid.js/docs/index.html)
10
12
 
11
- [custom shader demo](https://nightre.github.io/Rapid.js/demo/custom-shader.html) ( [source code](./demo/custom-shader.js) )
13
+ #### [Document](https://nightre.github.io/Rapid.js/docs/docs.html)
12
14
 
13
- [mask demo](https://nightre.github.io/Rapid.js/demo/mask.html) ( [source code](./demo/mask.js) )
15
+ #### [API Docs](https://nightre.github.io/Rapid.js/docs/api/index.html)
14
16
 
17
+ #### [Examples](https://nightre.github.io/Rapid.js/demo/)
15
18
 
16
19
  # Features
17
- * **Fast Rendering**: Render 10,000 sprites at 60fps
18
- * **Multi-Texture Support**: Batch rendering using GPU's maximum texture units
20
+
21
+ * **Fast Rendering**
22
+ * **TileMap** - YSort, isometric
19
23
  * **Graphics Drawing**
20
- * **Matrix Stack**
21
24
  * **Text Rendering**
22
25
  * **Line Drawing**
23
26
  * **Custom Shaders**
24
- * **Texture Clipping**
25
27
  * **Mask**
26
28
 
29
+ > [!WARNING]
30
+ > This project is under active development! Please expect bugs, report any issues you find, and contributions are welcome.
31
+
32
+
27
33
  # Install
28
34
 
29
35
  ```
@@ -42,87 +48,69 @@ Or use unpkg
42
48
  import { Rapid } from "rapid-render"
43
49
  ```
44
50
 
45
- # Useage
51
+ # Usage
46
52
 
47
- ```js
48
- let rapid = new Rapid({
49
- canvas: document.getElementById("game"),
50
- backgroundColor: Color.fromHex("FFFFFF")
51
- });
53
+ Rapid.js is a focused WebGL-based 2D rendering engine that provides rendering capabilities only. It does not include any game architecture, state management, physics, or other game-related systems - it's purely a rendering engine. This intentional design choice means you have complete freedom to structure your game however you want.
52
54
 
53
- // Create texture
54
- const cat = await rapid.textures.textureFromUrl("./cat.png");
55
- // R G B A
56
- const color = new Color(255, 255, 255, 255); // Or use Color.fromHex
55
+ Here's a simple example showing how to use Rapid.js to create a bouncing box:
57
56
 
58
- // Call before rendering
59
- rapid.startRender();
57
+ First, create a canvas element in your HTML:
60
58
 
61
- // Render here...
62
-
63
- // Call after rendering
64
- rapid.endRender();
65
-
66
- // Set canvas size
67
- rapid.resize(100, 100);
59
+ ```html
60
+ <canvas id="gameCanvas" width="500" height="500"></canvas>
68
61
  ```
69
62
 
70
- # Render
63
+ Then, add the following JavaScript code:
71
64
 
72
65
  ```js
73
- const text = rapid.textures.createText({ text: "Hello!", fontSize: 30 })
74
-
75
- rapid.save() // Save state
76
- rapid.matrixStack.translate(0,0)
77
- rapid.matrixStack.scale(1)
78
- rapid.matrixStack.rotate(0)
79
-
80
- // Render Sprit
81
- rapid.renderSprite(cat, 0, 0, color) // or rapid.renderSprite(cat, 0, 0, { color })
82
-
83
- // Rendr Graphic
84
- const path = Vec2.FormArray([[0, 0], [100, 0], [100, 100]])
85
- rapid.renderGraphic(0,0,{points:path, color:green})
86
- // or
87
- // rapid.startGraphicDraw()
88
- // rapid.addGraphicVertex(0, 0, color)
89
- // rapid.endGraphicDraw()
90
-
91
- // Render Text
92
- rapid.renderSprite(text, 200, 0)
93
- text.setText("time:" + Math.round(time))
94
-
95
- rapid.restore() // back to the previous saved state
66
+ import { Rapid, Color, Vec2 } from "rapid-render"
67
+
68
+ // Initialize Rapid
69
+ const rapid = new Rapid({
70
+ canvas: document.getElementById("gameCanvas"),
71
+ backgroundColor: Color.fromHex("E6F0FF")
72
+ })
73
+
74
+ // Position and velocity
75
+ let position = new Vec2(100, 100)
76
+ let velocity = new Vec2(2, 2)
77
+
78
+ function gameLoop() {
79
+ // Update position
80
+ position.x += velocity.x
81
+ position.y += velocity.y
82
+
83
+ // Simple collision with boundaries
84
+ if (position.x < 0 || position.x > 400) velocity.x *= -1
85
+ if (position.y < 0 || position.y > 400) velocity.y *= -1
86
+
87
+ // Render using the recommended render callback method
88
+ rapid.render(() => {
89
+ rapid.renderRect({
90
+ offset: position,
91
+ width: 50,
92
+ height: 50,
93
+ color: Color.Red
94
+ })
95
+ })
96
+ // rapid.startRender();
97
+ // ...
98
+ // rapid.endRender();
99
+ requestAnimationFrame(gameLoop);
100
+ }
101
+
102
+ gameLoop()
96
103
  ```
97
104
 
98
- # Custom Shader
105
+ This will create a red square that bounces around the canvas, demonstrating basic animation and collision detection.
99
106
 
100
- View demo and watch detailed shader code [custom shader demo](https://nightre.github.io/Rapid.js/demo/custom-shader.html) ( [source code](./demo/custom-shader.js) )
107
+ Note: All rendering operations must be performed within a render context, either:
108
+ - Inside a `rapid.render(() => { ... })` callback (Recommended), or
109
+ - Between `rapid.startRender()` and `rapid.endRender()` calls
101
110
 
102
- ```js
103
- const vertexShaderSource = `...`
104
- const fragmentShaderSource = `...`
105
-
106
- const customShader = new GLShader(rapid, vertexShaderSource, fragmentShaderSource)
107
- rapid.startRender()
108
-
109
- rapid.renderSprite(plane, 100, 100, {
110
- shader: customShader, // shader
111
- uniforms: {
112
- // Set custom uniform (You can set mat3, vec2, and so on here)
113
- uCustomUniform: Number(costumUniformValue)
114
- // uVec2Uniform: [0,2] // recognized as vec2
115
- // uMat3Uniform: [
116
- // [0,0,0],
117
- // [0,0,0],
118
- // [0,0,0],
119
- // ]
120
- // recognized as mat3
121
- }
122
- });
123
-
124
- rapid.endRender()
125
- ```
126
- # Screen Shot
111
+ # Road Map
127
112
 
128
- ![screen](./screenshot/screen.png)
113
+ * Frame Buffer Object (allows rendering to a texture instead of screen) [Under development]
114
+ * Light system
115
+ * Line Texture
116
+ * Particle system
@@ -0,0 +1,8 @@
1
+ declare class DepthScaler {
2
+ private max;
3
+ private min;
4
+ constructor();
5
+ getDepth(depth?: number): number | undefined;
6
+ }
7
+ declare const _default: DepthScaler;
8
+ export default _default;
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { graphicAttributes } from "./regions/graphic_region";
2
- import { spriteAttributes } from "./regions/sprite_region";
3
1
  import Rapid from "./render";
4
2
  import GLShader from "./webgl/glshader";
5
3
  import { Text } from "./texture";
6
- export { Text, Rapid, GLShader, spriteAttributes, graphicAttributes, };
4
+ import { TileMapRender, TileSet } from "./tilemap";
5
+ import { Uniform } from "./webgl/uniform";
6
+ import { spriteAttributes, graphicAttributes } from "./regions/attributes";
7
+ export { Text, Rapid, GLShader, TileMapRender, TileSet, Uniform, graphicAttributes, spriteAttributes, };
7
8
  export * from "./math";
8
9
  export * from "./interface";
9
10
  export * from "./texture";
@@ -1,13 +1,26 @@
1
1
  import { Color, Vec2 } from "./math";
2
2
  import { Texture } from "./texture";
3
+ import { TileSet } from "./tilemap";
3
4
  import GLShader from "./webgl/glshader";
5
+ import { Uniform } from "./webgl/uniform";
6
+ /**
7
+ * @ignore
8
+ */
4
9
  export type WebGLContext = WebGL2RenderingContext | WebGLRenderingContext;
5
- export interface IRapiadOptions {
10
+ /**
11
+ * @ignore
12
+ */
13
+ export interface IMathStruct<T> {
14
+ clone(obj: T): T;
15
+ copy(obj: T): void;
16
+ equal(obj: T): boolean;
17
+ }
18
+ export interface IRapidOptions {
6
19
  canvas: HTMLCanvasElement;
7
- pixelDensity?: number;
8
20
  width?: number;
9
21
  height?: number;
10
22
  backgroundColor?: Color;
23
+ antialias?: boolean;
11
24
  }
12
25
  export interface IAttribute {
13
26
  name: string;
@@ -17,16 +30,33 @@ export interface IAttribute {
17
30
  stride: number;
18
31
  offset?: number;
19
32
  }
20
- export interface IRenderSpriteOptions {
33
+ export interface ITransform {
34
+ position?: Vec2;
35
+ scale?: Vec2 | number;
36
+ rotation?: number;
37
+ flipX?: boolean;
38
+ flipY?: boolean;
39
+ offset?: Vec2;
40
+ x?: number;
41
+ y?: number;
42
+ offsetX?: number;
43
+ offsetY?: number;
44
+ origin?: Vec2 | number;
45
+ restoreTransform?: boolean;
46
+ saveTransform?: boolean;
47
+ afterSave?(): unknown;
48
+ beforRestore?(): unknown;
49
+ }
50
+ export interface IRenderSpriteOptions extends ITransform, IShader {
21
51
  color?: Color;
22
- shader?: GLShader;
23
- uniforms?: UniformType;
52
+ texture?: Texture;
53
+ offset?: Vec2;
24
54
  }
25
55
  export interface ITextOptions {
26
56
  /**
27
57
  * The text string to be rendered.
28
58
  */
29
- text: string;
59
+ text?: string;
30
60
  /**
31
61
  * The font size for the text.
32
62
  * Default is 16.
@@ -54,47 +84,66 @@ export interface ITextOptions {
54
84
  * Default is 'top'.
55
85
  */
56
86
  textBaseline?: CanvasTextBaseline;
57
- /**
58
- * Whether to apply antialiasing to the texture.
59
- * Default is `false`.
60
- */
61
- antialias?: boolean;
62
- }
63
- export declare enum JoinTyps {
64
- BEVEL = 0,
65
- ROUND = 1,
66
- MITER = 2
67
- }
68
- export declare enum CapTyps {
69
- BUTT = 0,
70
- ROUND = 1,
71
- SQUARE = 2
72
87
  }
73
88
  export interface ILineOptions {
74
- cap?: CapTyps;
75
- join?: JoinTyps;
76
89
  width?: number;
77
- miterLimit?: number;
78
- }
79
- export interface IRenderLineOptions extends ILineOptions {
90
+ closed?: boolean;
80
91
  points: Vec2[];
92
+ roundCap?: boolean;
81
93
  color?: Color;
82
94
  }
83
- export interface IGraphicOptions {
95
+ export interface IRenderLineOptions extends ILineOptions, ITransform {
96
+ }
97
+ export interface IGraphicOptions extends ITransform, IShader {
84
98
  points: Vec2[];
85
99
  color?: Color | Color[];
86
100
  drawType?: number;
87
101
  uv?: Vec2[];
88
102
  texture?: Texture;
89
- shader?: GLShader;
90
103
  }
91
- export declare enum RenderStatus {
92
- NORMAL = 0,
93
- MASK = 1
104
+ export interface ICircleOptions extends IGraphicOptions {
105
+ radius: number;
106
+ segments?: number;
107
+ }
108
+ export interface IRectOptions extends IGraphicOptions {
109
+ width: number;
110
+ height: number;
94
111
  }
95
112
  export declare enum MaskType {
96
- Normal = "normal",
97
- Inverse = "inverse"
113
+ Include = "normal",
114
+ Exclude = "inverse"
98
115
  }
99
- export type UniformType = Record<string, number | Array<any> | boolean>;
116
+ export type UniformType = Record<string, number | Array<any> | boolean | Texture>;
100
117
  export type Images = ImageBitmap | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | OffscreenCanvas;
118
+ export interface IRegisterTileOptions extends IRenderSpriteOptions {
119
+ texture: Texture;
120
+ offsetX?: number;
121
+ offsetY?: number;
122
+ ySortOffset?: number;
123
+ }
124
+ export interface YSortCallback {
125
+ ySort: number;
126
+ render?: () => void;
127
+ renderSprite?: IRenderSpriteOptions;
128
+ }
129
+ export interface ILayerRender extends ITransform {
130
+ error?: number | Vec2;
131
+ errorX?: number;
132
+ errorY?: number;
133
+ ySortCallback?: Array<YSortCallback>;
134
+ shape?: TilemapShape;
135
+ tileSet: TileSet;
136
+ eachTile?: (tileId: string | number, mapX: number, mapY: number) => IRenderSpriteOptions | undefined | void;
137
+ }
138
+ export interface IShader {
139
+ shader?: GLShader;
140
+ uniforms?: Uniform;
141
+ }
142
+ export declare enum TilemapShape {
143
+ SQUARE = "square",
144
+ ISOMETRIC = "isometric"
145
+ }
146
+ export declare enum ShaderType {
147
+ SPRITE = "sprite",
148
+ GRAPHIC = "graphic"
149
+ }
package/dist/line.d.ts CHANGED
@@ -1,3 +1,10 @@
1
1
  import { ILineOptions } from "./interface";
2
2
  import { Vec2 } from "./math";
3
- export declare const getStrokeGeometry: (points: Vec2[], attrs: ILineOptions) => Vec2[];
3
+ /**
4
+ * @ignore
5
+ */
6
+ export declare const getLineNormal: (points: Vec2[], closed?: boolean) => {
7
+ normal: Vec2;
8
+ miters: number;
9
+ }[];
10
+ export declare const getLineGeometry: (options: ILineOptions) => Vec2[];
package/dist/log.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ declare const warn: (text: string) => void;
2
+ export default warn;