mirror of
https://github.com/MapMakersAndProgrammers/Alternativa3D.git
synced 2025-10-26 09:59:10 -07:00
TextureMaterial: Cache getVariableIndex()
This commit is contained in:
@@ -27,11 +27,6 @@ package alternativa.engine3d.materials {
|
||||
*/
|
||||
public class Material {
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
alternativa3d function get canDrawInShadowMap():Boolean {return true}
|
||||
|
||||
/**
|
||||
* Name of the material
|
||||
*/
|
||||
|
||||
@@ -42,13 +42,6 @@ package alternativa.engine3d.materials {
|
||||
*/
|
||||
public class TextureMaterial extends Material {
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
alternativa3d override function get canDrawInShadowMap():Boolean {
|
||||
return opaquePass && alphaThreshold == 0;
|
||||
}
|
||||
|
||||
private static var caches:Dictionary = new Dictionary(true);
|
||||
private var cachedContext3D:Context3D;
|
||||
private var programsCache:Dictionary;
|
||||
@@ -216,7 +209,7 @@ package alternativa.engine3d.materials {
|
||||
return program;
|
||||
}
|
||||
|
||||
private function getDrawUnit(program:ShaderProgram, camera:Camera3D, surface:Surface, geometry:Geometry, opacityMap:TextureResource):DrawUnit {
|
||||
private function getDrawUnit(program:TextureMaterialProgram, camera:Camera3D, surface:Surface, geometry:Geometry, opacityMap:TextureResource):DrawUnit {
|
||||
var positionBuffer:VertexBuffer3D = geometry.getVertexBuffer(VertexAttributes.POSITION);
|
||||
var uvBuffer:VertexBuffer3D = geometry.getVertexBuffer(VertexAttributes.TEXCOORDS[0]);
|
||||
|
||||
@@ -226,16 +219,16 @@ package alternativa.engine3d.materials {
|
||||
var drawUnit:DrawUnit = camera.renderer.createDrawUnit(object, program.program, geometry._indexBuffer, surface.indexBegin, surface.numTriangles, program);
|
||||
|
||||
// Streams
|
||||
drawUnit.setVertexBufferAt(program.vertexShader.getVariableIndex("aPosition"), positionBuffer, geometry._attributesOffsets[VertexAttributes.POSITION], VertexAttributes.FORMATS[VertexAttributes.POSITION]);
|
||||
drawUnit.setVertexBufferAt(program.vertexShader.getVariableIndex("aUV"), uvBuffer, geometry._attributesOffsets[VertexAttributes.TEXCOORDS[0]], VertexAttributes.FORMATS[VertexAttributes.TEXCOORDS[0]]);
|
||||
drawUnit.setVertexBufferAt(program.aPosition, positionBuffer, geometry._attributesOffsets[VertexAttributes.POSITION], VertexAttributes.FORMATS[VertexAttributes.POSITION]);
|
||||
drawUnit.setVertexBufferAt(program.aUV, uvBuffer, geometry._attributesOffsets[VertexAttributes.TEXCOORDS[0]], VertexAttributes.FORMATS[VertexAttributes.TEXCOORDS[0]]);
|
||||
//Constants
|
||||
object.setTransformConstants(drawUnit, surface, program.vertexShader, camera);
|
||||
drawUnit.setProjectionConstants(camera, program.vertexShader.getVariableIndex("cProjMatrix"), object.localToCameraTransform);
|
||||
drawUnit.setFragmentConstantsFromNumbers(program.fragmentShader.getVariableIndex("cThresholdAlpha"), alphaThreshold, 0, 0, alpha);
|
||||
drawUnit.setProjectionConstants(camera, program.cProjMatrix, object.localToCameraTransform);
|
||||
drawUnit.setFragmentConstantsFromNumbers(program.cThresholdAlpha, alphaThreshold, 0, 0, alpha);
|
||||
// Textures
|
||||
drawUnit.setTextureAt(program.fragmentShader.getVariableIndex("sDiffuse"), diffuseMap._texture);
|
||||
drawUnit.setTextureAt(program.sDiffuse, diffuseMap._texture);
|
||||
if (opacityMap != null) {
|
||||
drawUnit.setTextureAt(program.fragmentShader.getVariableIndex("sOpacity"), opacityMap._texture);
|
||||
drawUnit.setTextureAt(program.sOpacity, opacityMap._texture);
|
||||
}
|
||||
return drawUnit;
|
||||
}
|
||||
@@ -268,7 +261,7 @@ package alternativa.engine3d.materials {
|
||||
programsCache[object.transformProcedure] = optionsPrograms;
|
||||
}
|
||||
|
||||
var program:ShaderProgram;
|
||||
var program:TextureMaterialProgram;
|
||||
var drawUnit:DrawUnit;
|
||||
// Opaque pass
|
||||
if (opaquePass && alphaThreshold <= alpha) {
|
||||
|
||||
Reference in New Issue
Block a user