|
@@ -42,7 +42,6 @@ interface INativeEngine {
|
|
createVertexBuffer(data: ArrayBufferView, dynamic: boolean): any;
|
|
createVertexBuffer(data: ArrayBufferView, dynamic: boolean): any;
|
|
deleteVertexBuffer(buffer: any): void;
|
|
deleteVertexBuffer(buffer: any): void;
|
|
recordVertexBuffer(vertexArray: any, buffer: any, location: number, byteOffset: number, byteStride: number, numElements: number, type: number, normalized: boolean): void;
|
|
recordVertexBuffer(vertexArray: any, buffer: any, location: number, byteOffset: number, byteStride: number, numElements: number, type: number, normalized: boolean): void;
|
|
- bindBuffer(buffer: any, location: number, byteOffset: number, byteStride: number, numElements: number, type: number, normalized: boolean): void;
|
|
|
|
updateDynamicVertexBuffer(buffer: any, data: ArrayBufferView, byteOffset: number, byteLength: number): void;
|
|
updateDynamicVertexBuffer(buffer: any, data: ArrayBufferView, byteOffset: number, byteLength: number): void;
|
|
|
|
|
|
createProgram(vertexShader: string, fragmentShader: string): any;
|
|
createProgram(vertexShader: string, fragmentShader: string): any;
|
|
@@ -205,6 +204,7 @@ export class NativeEngine extends Engine {
|
|
private readonly _native: INativeEngine = new _native.Engine();
|
|
private readonly _native: INativeEngine = new _native.Engine();
|
|
/** Defines the invalid handle returned by bgfx when resource creation goes wrong */
|
|
/** Defines the invalid handle returned by bgfx when resource creation goes wrong */
|
|
private readonly INVALID_HANDLE = 65535;
|
|
private readonly INVALID_HANDLE = 65535;
|
|
|
|
+ private _boundBuffersVertexArray: any = null;
|
|
|
|
|
|
public getHardwareScalingLevel(): number {
|
|
public getHardwareScalingLevel(): number {
|
|
return 1.0;
|
|
return 1.0;
|
|
@@ -276,6 +276,9 @@ export class NativeEngine extends Engine {
|
|
|
|
|
|
public dispose(): void {
|
|
public dispose(): void {
|
|
super.dispose();
|
|
super.dispose();
|
|
|
|
+ if (this._boundBuffersVertexArray) {
|
|
|
|
+ this._native.deleteVertexArray(this._boundBuffersVertexArray);
|
|
|
|
+ }
|
|
this._native.dispose();
|
|
this._native.dispose();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -365,26 +368,7 @@ export class NativeEngine extends Engine {
|
|
return buffer;
|
|
return buffer;
|
|
}
|
|
}
|
|
|
|
|
|
- public bindBuffers(vertexBuffers: { [key: string]: VertexBuffer; }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): void {
|
|
|
|
- // TODO : support index buffer
|
|
|
|
- const attributes = effect.getAttributesNames();
|
|
|
|
- for (let index = 0; index < attributes.length; index++) {
|
|
|
|
- const location = effect.getAttributeLocation(index);
|
|
|
|
- if (location >= 0) {
|
|
|
|
- const kind = attributes[index];
|
|
|
|
- const vertexBuffer = vertexBuffers[kind];
|
|
|
|
- if (vertexBuffer) {
|
|
|
|
- const buffer = vertexBuffer.getBuffer() as Nullable<NativeDataBuffer>;
|
|
|
|
- if (buffer) {
|
|
|
|
- this._native.bindBuffer(buffer.nativeVertexBuffer, location, vertexBuffer.byteOffset, vertexBuffer.byteStride, vertexBuffer.getSize(), vertexBuffer.type, vertexBuffer.normalized);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- public recordVertexArrayObject(vertexBuffers: { [key: string]: VertexBuffer; }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): WebGLVertexArrayObject {
|
|
|
|
- const vertexArray = this._native.createVertexArray();
|
|
|
|
-
|
|
|
|
|
|
+ protected _recordVertexArrayObject(vertexArray: any, vertexBuffers: { [key: string]: VertexBuffer; }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): void {
|
|
if (indexBuffer) {
|
|
if (indexBuffer) {
|
|
this._native.recordIndexBuffer(vertexArray, indexBuffer.nativeIndexBuffer);
|
|
this._native.recordIndexBuffer(vertexArray, indexBuffer.nativeIndexBuffer);
|
|
}
|
|
}
|
|
@@ -411,7 +395,20 @@ export class NativeEngine extends Engine {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ public bindBuffers(vertexBuffers: { [key: string]: VertexBuffer; }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): void {
|
|
|
|
+ if (this._boundBuffersVertexArray) {
|
|
|
|
+ this._native.deleteVertexArray(this._boundBuffersVertexArray);
|
|
|
|
+ }
|
|
|
|
+ this._boundBuffersVertexArray = this._native.createVertexArray();
|
|
|
|
+ this._recordVertexArrayObject(this._boundBuffersVertexArray, vertexBuffers, indexBuffer, effect);
|
|
|
|
+ this._native.bindVertexArray(this._boundBuffersVertexArray);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public recordVertexArrayObject(vertexBuffers: { [key: string]: VertexBuffer; }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): WebGLVertexArrayObject {
|
|
|
|
+ const vertexArray = this._native.createVertexArray();
|
|
|
|
+ this._recordVertexArrayObject(vertexArray, vertexBuffers, indexBuffer, effect);
|
|
return vertexArray;
|
|
return vertexArray;
|
|
}
|
|
}
|
|
|
|
|