|
@@ -2,6 +2,21 @@ THREE.WebGLProgram = ( function () {
|
|
|
|
|
|
var programIdCount = 0;
|
|
|
|
|
|
+ function generateExtensions( extensions, parameters, rendererExtensions ) {
|
|
|
+
|
|
|
+ extensions = extensions || {};
|
|
|
+
|
|
|
+ var chunks = [
|
|
|
+ ( parameters.logarithmicDepthBuffer || extensions.derivatives ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
|
|
|
+ ( extensions.fragDepth ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',
|
|
|
+ ( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : enable' : '',
|
|
|
+ ( parameters.envMap || extensions.shaderTextureLOD ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : '',
|
|
|
+ ];
|
|
|
+
|
|
|
+ return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
function generateDefines( defines ) {
|
|
|
|
|
|
var chunks = [];
|
|
@@ -80,6 +95,7 @@ THREE.WebGLProgram = ( function () {
|
|
|
|
|
|
var gl = renderer.context;
|
|
|
|
|
|
+ var extensions = material.extensions;
|
|
|
var defines = material.defines;
|
|
|
|
|
|
var vertexShader = material.__webglShader.vertexShader;
|
|
@@ -154,6 +170,8 @@ THREE.WebGLProgram = ( function () {
|
|
|
|
|
|
//
|
|
|
|
|
|
+ var customExtensions = generateExtensions( extensions, parameters, renderer.extensions );
|
|
|
+
|
|
|
var customDefines = generateDefines( defines );
|
|
|
|
|
|
//
|
|
@@ -283,14 +301,10 @@ THREE.WebGLProgram = ( function () {
|
|
|
|
|
|
].filter( filterEmptyLine ).join( '\n' );
|
|
|
|
|
|
- prefixFragment = [
|
|
|
|
|
|
- parameters.bumpMap || parameters.normalMap || parameters.flatShading || material.derivatives ? '#extension GL_OES_standard_derivatives : enable' : '',
|
|
|
- ( parameters.logarithmicDepthBuffer || material.fragDepth ) && renderer.extensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',
|
|
|
-
|
|
|
- material.drawBuffers && renderer.extensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : enable' : '',
|
|
|
+ prefixFragment = [
|
|
|
|
|
|
- ( parameters.envMap || material.shaderTextureLOD ) && renderer.extensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : '',
|
|
|
+ customExtensions,
|
|
|
|
|
|
'precision ' + parameters.precision + ' float;',
|
|
|
'precision ' + parameters.precision + ' int;',
|