|
@@ -26,6 +26,57 @@ import { ShaderCodeInliner } from "./Processors/shaderCodeInliner";
|
|
import { WebGL2ShaderProcessor } from '../Engines/WebGL/webGL2ShaderProcessors';
|
|
import { WebGL2ShaderProcessor } from '../Engines/WebGL/webGL2ShaderProcessors';
|
|
|
|
|
|
interface INativeEngine {
|
|
interface INativeEngine {
|
|
|
|
+
|
|
|
|
+ readonly SAMPLER_NEAREST: number;
|
|
|
|
+ readonly SAMPLER_BILINEAR: number;
|
|
|
|
+ readonly SAMPLER_TRILINEAR: number;
|
|
|
|
+ readonly SAMPLER_ANISOTROPIC: number;
|
|
|
|
+ readonly SAMPLER_POINT_COMPARE: number;
|
|
|
|
+ readonly SAMPLER_TRILINEAR_COMPARE: number;
|
|
|
|
+ readonly SAMPLER_MINBILINEAR_MAGPOINT: number;
|
|
|
|
+ readonly SAMPLER_MINPOINT_MAGPOINT_MIPLINEAR: number;
|
|
|
|
+ readonly SAMPLER_MINPOINT_MAGLINEAR_MIPPOINT: number;
|
|
|
|
+ readonly SAMPLER_MINPOINT_MAGLINEAR_MIPLINEAR: number;
|
|
|
|
+ readonly SAMPLER_MINLINEAR_MAGPOINT_MIPPOINT: number;
|
|
|
|
+
|
|
|
|
+ readonly DEPTH_TEST_LESS: number;
|
|
|
|
+ readonly DEPTH_TEST_LEQUAL: number;
|
|
|
|
+ readonly DEPTH_TEST_EQUAL: number;
|
|
|
|
+ readonly DEPTH_TEST_GEQUAL: number;
|
|
|
|
+ readonly DEPTH_TEST_GREATER: number;
|
|
|
|
+ readonly DEPTH_TEST_NOTEQUAL: number;
|
|
|
|
+ readonly DEPTH_TEST_NEVER: number;
|
|
|
|
+ readonly DEPTH_TEST_ALWAYS: number;
|
|
|
|
+
|
|
|
|
+ readonly CLEAR_FLAG_COLOR: number;
|
|
|
|
+ readonly CLEAR_FLAG_DEPTH: number;
|
|
|
|
+ readonly CLEAR_FLAG_STENCIL: number;
|
|
|
|
+
|
|
|
|
+ readonly ADDRESS_MODE_WRAP: number;
|
|
|
|
+ readonly ADDRESS_MODE_MIRROR: number;
|
|
|
|
+ readonly ADDRESS_MODE_CLAMP: number;
|
|
|
|
+ readonly ADDRESS_MODE_BORDER: number;
|
|
|
|
+ readonly ADDRESS_MODE_MIRROR_ONCE: number;
|
|
|
|
+
|
|
|
|
+ readonly TEXTURE_FORMAT_RGBA8: number;
|
|
|
|
+ readonly TEXTURE_FORMAT_RGBA32F: number;
|
|
|
|
+
|
|
|
|
+ readonly ATTRIB_TYPE_UINT8: number;
|
|
|
|
+ readonly ATTRIB_TYPE_INT16: number;
|
|
|
|
+ readonly ATTRIB_TYPE_FLOAT: number;
|
|
|
|
+
|
|
|
|
+ readonly ALPHA_DISABLE: number;
|
|
|
|
+ readonly ALPHA_ADD: number;
|
|
|
|
+ readonly ALPHA_COMBINE: number;
|
|
|
|
+ readonly ALPHA_SUBTRACT: number;
|
|
|
|
+ readonly ALPHA_MULTIPLY: number;
|
|
|
|
+ readonly ALPHA_MAXIMIZED: number;
|
|
|
|
+ readonly ALPHA_ONEONE: number;
|
|
|
|
+ readonly ALPHA_PREMULTIPLIED: number;
|
|
|
|
+ readonly ALPHA_PREMULTIPLIED_PORTERDUFF: number;
|
|
|
|
+ readonly ALPHA_INTERPOLATE: number;
|
|
|
|
+ readonly ALPHA_SCREENMODE: number;
|
|
|
|
+
|
|
dispose(): void;
|
|
dispose(): void;
|
|
|
|
|
|
requestAnimationFrame(callback: () => void): void;
|
|
requestAnimationFrame(callback: () => void): void;
|
|
@@ -143,61 +194,6 @@ class NativeDataBuffer extends DataBuffer {
|
|
public nativeVertexBuffer?: any;
|
|
public nativeVertexBuffer?: any;
|
|
}
|
|
}
|
|
|
|
|
|
-// TODO: change this to match bgfx.
|
|
|
|
-// Must match Filter enum in SpectreEngine.h.
|
|
|
|
-class NativeFilter {
|
|
|
|
- public static readonly POINT = 0;
|
|
|
|
- public static readonly MINPOINT_MAGPOINT_MIPPOINT = NativeFilter.POINT;
|
|
|
|
- public static readonly BILINEAR = 1;
|
|
|
|
- public static readonly MINLINEAR_MAGLINEAR_MIPPOINT = NativeFilter.BILINEAR;
|
|
|
|
- public static readonly TRILINEAR = 2;
|
|
|
|
- public static readonly MINLINEAR_MAGLINEAR_MIPLINEAR = NativeFilter.TRILINEAR;
|
|
|
|
- public static readonly ANISOTROPIC = 3;
|
|
|
|
- public static readonly POINT_COMPARE = 4;
|
|
|
|
- public static readonly TRILINEAR_COMPARE = 5;
|
|
|
|
- public static readonly MINBILINEAR_MAGPOINT = 6;
|
|
|
|
- public static readonly MINLINEAR_MAGPOINT_MIPLINEAR = NativeFilter.MINBILINEAR_MAGPOINT;
|
|
|
|
- public static readonly MINPOINT_MAGPOINT_MIPLINEAR = 7;
|
|
|
|
- public static readonly MINPOINT_MAGLINEAR_MIPPOINT = 8;
|
|
|
|
- public static readonly MINPOINT_MAGLINEAR_MIPLINEAR = 9;
|
|
|
|
- public static readonly MINLINEAR_MAGPOINT_MIPPOINT = 10;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// depth test values
|
|
|
|
-// Values match bgfx defines
|
|
|
|
-class DepthTest {
|
|
|
|
- public static readonly DEPTH_TEST_LESS = 16;
|
|
|
|
- public static readonly DEPTH_TEST_LEQUAL = 32;
|
|
|
|
- public static readonly DEPTH_TEST_EQUAL = 48;
|
|
|
|
- public static readonly DEPTH_TEST_GEQUAL = 64;
|
|
|
|
- public static readonly DEPTH_TEST_GREATER = 80;
|
|
|
|
- public static readonly DEPTH_TEST_NOTEQUAL = 96;
|
|
|
|
- public static readonly DEPTH_TEST_NEVER = 112;
|
|
|
|
- public static readonly DEPTH_TEST_ALWAYS = 128;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// these flags match bgfx.
|
|
|
|
-class NativeClearFlags
|
|
|
|
-{
|
|
|
|
- public static readonly CLEAR_COLOR = 1;
|
|
|
|
- public static readonly CLEAR_DEPTH = 2;
|
|
|
|
- public static readonly CLEAR_STENCIL = 4;
|
|
|
|
-}
|
|
|
|
-// TODO: change this to match bgfx.
|
|
|
|
-// Must match AddressMode enum in SpectreEngine.h.
|
|
|
|
-class NativeAddressMode {
|
|
|
|
- public static readonly WRAP = 0;
|
|
|
|
- public static readonly MIRROR = 1;
|
|
|
|
- public static readonly CLAMP = 2;
|
|
|
|
- public static readonly BORDER = 3;
|
|
|
|
- public static readonly MIRROR_ONCE = 4;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-class NativeTextureFormat {
|
|
|
|
- public static readonly RGBA8 = 0;
|
|
|
|
- public static readonly RGBA32F = 1;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/** @hidden */
|
|
/** @hidden */
|
|
class NativeTexture extends InternalTexture {
|
|
class NativeTexture extends InternalTexture {
|
|
public getInternalTexture(): InternalTexture {
|
|
public getInternalTexture(): InternalTexture {
|
|
@@ -218,7 +214,7 @@ export class NativeEngine extends 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;
|
|
private _boundBuffersVertexArray: any = null;
|
|
- private _currentDepthTest: number = DepthTest.DEPTH_TEST_LEQUAL;
|
|
|
|
|
|
+ private _currentDepthTest: number = this._native.DEPTH_TEST_LEQUAL;
|
|
|
|
|
|
public getHardwareScalingLevel(): number {
|
|
public getHardwareScalingLevel(): number {
|
|
return 1.0;
|
|
return 1.0;
|
|
@@ -358,15 +354,15 @@ export class NativeEngine extends Engine {
|
|
var mode = 0;
|
|
var mode = 0;
|
|
if (backBuffer && color) {
|
|
if (backBuffer && color) {
|
|
this._native.clearColor(color.r, color.g, color.b, color.a !== undefined ? color.a : 1.0);
|
|
this._native.clearColor(color.r, color.g, color.b, color.a !== undefined ? color.a : 1.0);
|
|
- mode |= NativeClearFlags.CLEAR_COLOR;
|
|
|
|
|
|
+ mode |= this._native.CLEAR_FLAG_COLOR;
|
|
}
|
|
}
|
|
if (depth) {
|
|
if (depth) {
|
|
this._native.clearDepth(1.0);
|
|
this._native.clearDepth(1.0);
|
|
- mode |= NativeClearFlags.CLEAR_DEPTH;
|
|
|
|
|
|
+ mode |= this._native.CLEAR_FLAG_DEPTH;
|
|
}
|
|
}
|
|
if (stencil) {
|
|
if (stencil) {
|
|
this._native.clearStencil(0);
|
|
this._native.clearStencil(0);
|
|
- mode |= NativeClearFlags.CLEAR_STENCIL;
|
|
|
|
|
|
+ mode |= this._native.CLEAR_FLAG_STENCIL;
|
|
}
|
|
}
|
|
this._native.clear(mode);
|
|
this._native.clear(mode);
|
|
}
|
|
}
|
|
@@ -418,7 +414,7 @@ export class NativeEngine extends Engine {
|
|
vertexBuffer.byteOffset,
|
|
vertexBuffer.byteOffset,
|
|
vertexBuffer.byteStride,
|
|
vertexBuffer.byteStride,
|
|
vertexBuffer.getSize(),
|
|
vertexBuffer.getSize(),
|
|
- vertexBuffer.type,
|
|
|
|
|
|
+ this._getNativeAttribType(vertexBuffer.type),
|
|
vertexBuffer.normalized);
|
|
vertexBuffer.normalized);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -643,7 +639,7 @@ export class NativeEngine extends Engine {
|
|
* @param enable defines the state to set
|
|
* @param enable defines the state to set
|
|
*/
|
|
*/
|
|
public setDepthBuffer(enable: boolean): void {
|
|
public setDepthBuffer(enable: boolean): void {
|
|
- this._native.setDepthTest(enable ? this._currentDepthTest : DepthTest.DEPTH_TEST_ALWAYS);
|
|
|
|
|
|
+ this._native.setDepthTest(enable ? this._currentDepthTest : this._native.DEPTH_TEST_ALWAYS);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -655,22 +651,22 @@ export class NativeEngine extends Engine {
|
|
}
|
|
}
|
|
|
|
|
|
public setDepthFunctionToGreater(): void {
|
|
public setDepthFunctionToGreater(): void {
|
|
- this._currentDepthTest = DepthTest.DEPTH_TEST_GREATER;
|
|
|
|
|
|
+ this._currentDepthTest = this._native.DEPTH_TEST_GREATER;
|
|
this._native.setDepthTest(this._currentDepthTest);
|
|
this._native.setDepthTest(this._currentDepthTest);
|
|
}
|
|
}
|
|
|
|
|
|
public setDepthFunctionToGreaterOrEqual(): void {
|
|
public setDepthFunctionToGreaterOrEqual(): void {
|
|
- this._currentDepthTest = DepthTest.DEPTH_TEST_GEQUAL;
|
|
|
|
|
|
+ this._currentDepthTest = this._native.DEPTH_TEST_GEQUAL;
|
|
this._native.setDepthTest(this._currentDepthTest);
|
|
this._native.setDepthTest(this._currentDepthTest);
|
|
}
|
|
}
|
|
|
|
|
|
public setDepthFunctionToLess(): void {
|
|
public setDepthFunctionToLess(): void {
|
|
- this._currentDepthTest = DepthTest.DEPTH_TEST_LESS;
|
|
|
|
|
|
+ this._currentDepthTest = this._native.DEPTH_TEST_LESS;
|
|
this._native.setDepthTest(this._currentDepthTest);
|
|
this._native.setDepthTest(this._currentDepthTest);
|
|
}
|
|
}
|
|
|
|
|
|
public setDepthFunctionToLessOrEqual(): void {
|
|
public setDepthFunctionToLessOrEqual(): void {
|
|
- this._currentDepthTest = DepthTest.DEPTH_TEST_LEQUAL;
|
|
|
|
|
|
+ this._currentDepthTest = this._native.DEPTH_TEST_LEQUAL;
|
|
this._native.setDepthTest(this._currentDepthTest);
|
|
this._native.setDepthTest(this._currentDepthTest);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -721,6 +717,8 @@ export class NativeEngine extends Engine {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ mode = this._getNativeAlphaMode(mode);
|
|
|
|
+
|
|
this._native.setBlendMode(mode);
|
|
this._native.setBlendMode(mode);
|
|
|
|
|
|
if (!noDepthWriteChange) {
|
|
if (!noDepthWriteChange) {
|
|
@@ -1080,7 +1078,7 @@ export class NativeEngine extends Engine {
|
|
texture.height = texture.baseHeight;
|
|
texture.height = texture.baseHeight;
|
|
texture.isReady = true;
|
|
texture.isReady = true;
|
|
|
|
|
|
- var filter = this._getSamplingFilter(samplingMode);
|
|
|
|
|
|
+ var filter = this._getNativeSamplingMode(samplingMode);
|
|
this._native.setTextureSampling(webGLTexture, filter);
|
|
this._native.setTextureSampling(webGLTexture, filter);
|
|
|
|
|
|
if (scene) {
|
|
if (scene) {
|
|
@@ -1244,54 +1242,6 @@ export class NativeEngine extends Engine {
|
|
return texture;
|
|
return texture;
|
|
}
|
|
}
|
|
|
|
|
|
- // Returns a NativeFilter.XXXX value.
|
|
|
|
- private _getSamplingFilter(samplingMode: number): number {
|
|
|
|
- switch (samplingMode) {
|
|
|
|
- case Constants.TEXTURE_BILINEAR_SAMPLINGMODE:
|
|
|
|
- return NativeFilter.MINLINEAR_MAGLINEAR_MIPPOINT;
|
|
|
|
- case Constants.TEXTURE_TRILINEAR_SAMPLINGMODE:
|
|
|
|
- return NativeFilter.MINLINEAR_MAGLINEAR_MIPLINEAR;
|
|
|
|
- case Constants.TEXTURE_NEAREST_SAMPLINGMODE:
|
|
|
|
- return NativeFilter.MINPOINT_MAGPOINT_MIPLINEAR;
|
|
|
|
- case Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST:
|
|
|
|
- return NativeFilter.MINPOINT_MAGPOINT_MIPPOINT;
|
|
|
|
- case Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST:
|
|
|
|
- return NativeFilter.MINLINEAR_MAGPOINT_MIPPOINT;
|
|
|
|
- case Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR:
|
|
|
|
- return NativeFilter.MINLINEAR_MAGPOINT_MIPLINEAR;
|
|
|
|
- case Constants.TEXTURE_NEAREST_LINEAR:
|
|
|
|
- return NativeFilter.MINLINEAR_MAGPOINT_MIPLINEAR;
|
|
|
|
- case Constants.TEXTURE_NEAREST_NEAREST:
|
|
|
|
- return NativeFilter.MINPOINT_MAGPOINT_MIPPOINT;
|
|
|
|
- case Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST:
|
|
|
|
- return NativeFilter.MINPOINT_MAGLINEAR_MIPPOINT;
|
|
|
|
- case Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR:
|
|
|
|
- return NativeFilter.MINPOINT_MAGLINEAR_MIPLINEAR;
|
|
|
|
- case Constants.TEXTURE_LINEAR_LINEAR:
|
|
|
|
- return NativeFilter.MINLINEAR_MAGLINEAR_MIPLINEAR;
|
|
|
|
- case Constants.TEXTURE_LINEAR_NEAREST:
|
|
|
|
- return NativeFilter.MINPOINT_MAGLINEAR_MIPLINEAR;
|
|
|
|
- case Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR:
|
|
|
|
- return NativeFilter.MINPOINT_MAGPOINT_MIPLINEAR;
|
|
|
|
- case Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST:
|
|
|
|
- return NativeFilter.MINLINEAR_MAGLINEAR_MIPLINEAR;
|
|
|
|
- default:
|
|
|
|
- throw new Error("Unexpected sampling mode: " + samplingMode + ".");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static _GetNativeTextureFormat(format: number, type: number): number {
|
|
|
|
- if (format == Constants.TEXTUREFORMAT_RGBA && type == Constants.TEXTURETYPE_UNSIGNED_INT) {
|
|
|
|
- return NativeTextureFormat.RGBA8;
|
|
|
|
- }
|
|
|
|
- else if (format == Constants.TEXTUREFORMAT_RGBA && type == Constants.TEXTURETYPE_FLOAT) {
|
|
|
|
- return NativeTextureFormat.RGBA32F;
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- throw new Error("Unexpected texture format or type: format " + format + ", type " + type + ".");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public createRenderTargetTexture(size: number | { width: number, height: number }, options: boolean | RenderTargetCreationOptions): NativeTexture {
|
|
public createRenderTargetTexture(size: number | { width: number, height: number }, options: boolean | RenderTargetCreationOptions): NativeTexture {
|
|
let fullOptions = new RenderTargetCreationOptions();
|
|
let fullOptions = new RenderTargetCreationOptions();
|
|
|
|
|
|
@@ -1333,7 +1283,7 @@ export class NativeEngine extends Engine {
|
|
texture._webGLTexture!,
|
|
texture._webGLTexture!,
|
|
width,
|
|
width,
|
|
height,
|
|
height,
|
|
- NativeEngine._GetNativeTextureFormat(fullOptions.format, fullOptions.type),
|
|
|
|
|
|
+ this._getNativeTextureFormat(fullOptions.format, fullOptions.type),
|
|
fullOptions.samplingMode!,
|
|
fullOptions.samplingMode!,
|
|
fullOptions.generateStencilBuffer ? true : false,
|
|
fullOptions.generateStencilBuffer ? true : false,
|
|
fullOptions.generateDepthBuffer,
|
|
fullOptions.generateDepthBuffer,
|
|
@@ -1360,7 +1310,7 @@ export class NativeEngine extends Engine {
|
|
|
|
|
|
public updateTextureSamplingMode(samplingMode: number, texture: InternalTexture): void {
|
|
public updateTextureSamplingMode(samplingMode: number, texture: InternalTexture): void {
|
|
if (texture._webGLTexture) {
|
|
if (texture._webGLTexture) {
|
|
- var filter = this._getSamplingFilter(samplingMode);
|
|
|
|
|
|
+ var filter = this._getNativeSamplingMode(samplingMode);
|
|
this._native.setTextureSampling(texture._webGLTexture, filter);
|
|
this._native.setTextureSampling(texture._webGLTexture, filter);
|
|
}
|
|
}
|
|
texture.samplingMode = samplingMode;
|
|
texture.samplingMode = samplingMode;
|
|
@@ -1501,11 +1451,11 @@ export class NativeEngine extends Engine {
|
|
private _getAddressMode(wrapMode: number): number {
|
|
private _getAddressMode(wrapMode: number): number {
|
|
switch (wrapMode) {
|
|
switch (wrapMode) {
|
|
case Constants.TEXTURE_WRAP_ADDRESSMODE:
|
|
case Constants.TEXTURE_WRAP_ADDRESSMODE:
|
|
- return NativeAddressMode.WRAP;
|
|
|
|
|
|
+ return this._native.ADDRESS_MODE_WRAP;
|
|
case Constants.TEXTURE_CLAMP_ADDRESSMODE:
|
|
case Constants.TEXTURE_CLAMP_ADDRESSMODE:
|
|
- return NativeAddressMode.CLAMP;
|
|
|
|
|
|
+ return this._native.ADDRESS_MODE_CLAMP;
|
|
case Constants.TEXTURE_MIRROR_ADDRESSMODE:
|
|
case Constants.TEXTURE_MIRROR_ADDRESSMODE:
|
|
- return NativeAddressMode.MIRROR;
|
|
|
|
|
|
+ return this._native.ADDRESS_MODE_MIRROR;
|
|
default:
|
|
default:
|
|
throw new Error("Unexpected wrap mode: " + wrapMode + ".");
|
|
throw new Error("Unexpected wrap mode: " + wrapMode + ".");
|
|
}
|
|
}
|
|
@@ -1551,4 +1501,95 @@ export class NativeEngine extends Engine {
|
|
public _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement, faceIndex: number = 0, lod: number = 0) {
|
|
public _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement, faceIndex: number = 0, lod: number = 0) {
|
|
throw new Error("_uploadArrayBufferViewToTexture not implemented.");
|
|
throw new Error("_uploadArrayBufferViewToTexture not implemented.");
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // JavaScript-to-Native conversion helper functions.
|
|
|
|
+
|
|
|
|
+ private _getNativeSamplingMode(samplingMode: number): number {
|
|
|
|
+ switch (samplingMode) {
|
|
|
|
+ case Constants.TEXTURE_BILINEAR_SAMPLINGMODE:
|
|
|
|
+ return this._native.SAMPLER_BILINEAR;
|
|
|
|
+ case Constants.TEXTURE_TRILINEAR_SAMPLINGMODE:
|
|
|
|
+ return this._native.SAMPLER_TRILINEAR;
|
|
|
|
+ case Constants.TEXTURE_NEAREST_SAMPLINGMODE:
|
|
|
|
+ return this._native.SAMPLER_MINPOINT_MAGPOINT_MIPLINEAR;
|
|
|
|
+ case Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST:
|
|
|
|
+ return this._native.SAMPLER_NEAREST;
|
|
|
|
+ case Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST:
|
|
|
|
+ return this._native.SAMPLER_MINLINEAR_MAGPOINT_MIPPOINT;
|
|
|
|
+ case Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR:
|
|
|
|
+ return this._native.SAMPLER_MINBILINEAR_MAGPOINT;
|
|
|
|
+ case Constants.TEXTURE_NEAREST_LINEAR:
|
|
|
|
+ return this._native.SAMPLER_MINBILINEAR_MAGPOINT;
|
|
|
|
+ case Constants.TEXTURE_NEAREST_NEAREST:
|
|
|
|
+ return this._native.SAMPLER_NEAREST;
|
|
|
|
+ case Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST:
|
|
|
|
+ return this._native.SAMPLER_MINPOINT_MAGLINEAR_MIPPOINT;
|
|
|
|
+ case Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR:
|
|
|
|
+ return this._native.SAMPLER_MINPOINT_MAGLINEAR_MIPLINEAR;
|
|
|
|
+ case Constants.TEXTURE_LINEAR_LINEAR:
|
|
|
|
+ return this._native.SAMPLER_TRILINEAR;
|
|
|
|
+ case Constants.TEXTURE_LINEAR_NEAREST:
|
|
|
|
+ return this._native.SAMPLER_MINPOINT_MAGLINEAR_MIPLINEAR;
|
|
|
|
+ case Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR:
|
|
|
|
+ return this._native.SAMPLER_MINPOINT_MAGPOINT_MIPLINEAR;
|
|
|
|
+ case Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST:
|
|
|
|
+ return this._native.SAMPLER_TRILINEAR;
|
|
|
|
+ default:
|
|
|
|
+ throw new Error(`Unsupported sampling mode: ${samplingMode}.`);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private _getNativeTextureFormat(format: number, type: number): number {
|
|
|
|
+ if (format == Constants.TEXTUREFORMAT_RGBA && type == Constants.TEXTURETYPE_UNSIGNED_INT) {
|
|
|
|
+ return this._native.TEXTURE_FORMAT_RGBA8;
|
|
|
|
+ }
|
|
|
|
+ else if (format == Constants.TEXTUREFORMAT_RGBA && type == Constants.TEXTURETYPE_FLOAT) {
|
|
|
|
+ return this._native.TEXTURE_FORMAT_RGBA32F;
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ throw new Error(`Unsupported texture format or type: format ${format}, type ${type}.`);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private _getNativeAlphaMode(mode: number): number {
|
|
|
|
+ switch (mode) {
|
|
|
|
+ case Constants.ALPHA_DISABLE:
|
|
|
|
+ return this._native.ALPHA_DISABLE;
|
|
|
|
+ case Constants.ALPHA_ADD:
|
|
|
|
+ return this._native.ALPHA_ADD;
|
|
|
|
+ case Constants.ALPHA_COMBINE:
|
|
|
|
+ return this._native.ALPHA_COMBINE;
|
|
|
|
+ case Constants.ALPHA_SUBTRACT:
|
|
|
|
+ return this._native.ALPHA_SUBTRACT;
|
|
|
|
+ case Constants.ALPHA_MULTIPLY:
|
|
|
|
+ return this._native.ALPHA_MULTIPLY;
|
|
|
|
+ case Constants.ALPHA_MAXIMIZED:
|
|
|
|
+ return this._native.ALPHA_MAXIMIZED;
|
|
|
|
+ case Constants.ALPHA_ONEONE:
|
|
|
|
+ return this._native.ALPHA_ONEONE;
|
|
|
|
+ case Constants.ALPHA_PREMULTIPLIED:
|
|
|
|
+ return this._native.ALPHA_PREMULTIPLIED;
|
|
|
|
+ case Constants.ALPHA_PREMULTIPLIED_PORTERDUFF:
|
|
|
|
+ return this._native.ALPHA_PREMULTIPLIED_PORTERDUFF;
|
|
|
|
+ case Constants.ALPHA_INTERPOLATE:
|
|
|
|
+ return this._native.ALPHA_INTERPOLATE;
|
|
|
|
+ case Constants.ALPHA_SCREENMODE:
|
|
|
|
+ return this._native.ALPHA_SCREENMODE;
|
|
|
|
+ default:
|
|
|
|
+ throw new Error(`Unsupported alpha mode: ${mode}.`);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private _getNativeAttribType(type: number): number {
|
|
|
|
+ switch (type) {
|
|
|
|
+ case VertexBuffer.UNSIGNED_BYTE:
|
|
|
|
+ return this._native.ATTRIB_TYPE_UINT8;
|
|
|
|
+ case VertexBuffer.SHORT:
|
|
|
|
+ return this._native.ATTRIB_TYPE_INT16;
|
|
|
|
+ case VertexBuffer.FLOAT:
|
|
|
|
+ return this._native.ATTRIB_TYPE_FLOAT;
|
|
|
|
+ default:
|
|
|
|
+ throw new Error(`Unsupported attribute type: ${type}.`);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|