2
0
Эх сурвалжийг харах

Fix for #19959. Add 'glslVersion' property to ShaderMaterial and prepend the version string when it's value is non-null.

Jose Rojas 5 жил өмнө
parent
commit
425019be67

+ 2 - 0
src/materials/ShaderMaterial.d.ts

@@ -29,6 +29,7 @@ export interface ShaderMaterialParameters extends MaterialParameters {
 		drawBuffers?: boolean;
 		shaderTextureLOD?: boolean;
 	};
+	glslVersion?: string;
 }
 
 export class ShaderMaterial extends Material {
@@ -59,6 +60,7 @@ export class ShaderMaterial extends Material {
 	defaultAttributeValues: any;
 	index0AttributeName: string | undefined;
 	uniformsNeedUpdate: boolean;
+	glslVersion: string;
 
 	setValues( parameters: ShaderMaterialParameters ): void;
 	toJSON( meta: any ): any;

+ 6 - 1
src/materials/ShaderMaterial.js

@@ -66,6 +66,8 @@ function ShaderMaterial( parameters ) {
 	this.index0AttributeName = undefined;
 	this.uniformsNeedUpdate = false;
 
+	this.glslVersion = null;
+
 	if ( parameters !== undefined ) {
 
 		if ( parameters.attributes !== undefined ) {
@@ -109,6 +111,8 @@ ShaderMaterial.prototype.copy = function ( source ) {
 
 	this.extensions = Object.assign( {}, source.extensions );
 
+	this.glslVersion = source.glslVersion
+
 	return this;
 
 };
@@ -117,8 +121,9 @@ ShaderMaterial.prototype.toJSON = function ( meta ) {
 
 	const data = Material.prototype.toJSON.call( this, meta );
 
+	data.glslVersion = this.glslVersion
 	data.uniforms = {};
-
+	
 	for ( const name in this.uniforms ) {
 
 		const uniform = this.uniforms[ name ];

+ 3 - 0
src/renderers/webgl/WebGLProgram.js

@@ -405,11 +405,13 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 	const program = gl.createProgram();
 
 	let prefixVertex, prefixFragment;
+	let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion : ''
 
 	if ( parameters.isRawShaderMaterial ) {
 
 		prefixVertex = [
 
+			versionString,
 			customDefines
 
 		].filter( filterEmptyLine ).join( '\n' );
@@ -422,6 +424,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 
 		prefixFragment = [
 
+			versionString,
 			customExtensions,
 			customDefines
 

+ 3 - 1
src/renderers/webgl/WebGLPrograms.js

@@ -270,7 +270,9 @@ function WebGLPrograms( renderer, extensions, capabilities, bindingStates ) {
 			rendererExtensionDrawBuffers: isWebGL2 || extensions.get( 'WEBGL_draw_buffers' ) !== null,
 			rendererExtensionShaderTextureLod: isWebGL2 || extensions.get( 'EXT_shader_texture_lod' ) !== null,
 
-			customProgramCacheKey: material.customProgramCacheKey()
+			customProgramCacheKey: material.customProgramCacheKey(),
+
+			glslVersion: material.glslVersion
 
 		};