internal Shader(GraphicsDevice device, BinaryReader reader) { GraphicsDevice = device; var isVertexShader = reader.ReadBoolean(); Stage = isVertexShader ? ShaderStage.Vertex : ShaderStage.Pixel; var shaderLength = reader.ReadInt32(); var shaderBytecode = reader.ReadBytes(shaderLength); var samplerCount = (int)reader.ReadByte(); Samplers = new SamplerInfo[samplerCount]; for (var s = 0; s < samplerCount; s++) { Samplers[s].type = (SamplerType)reader.ReadByte(); Samplers[s].textureSlot = reader.ReadByte(); Samplers[s].samplerSlot = reader.ReadByte(); if (reader.ReadBoolean()) { Samplers[s].state = new SamplerState(); Samplers[s].state.AddressU = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressV = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressW = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.BorderColor = new Color( reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); Samplers[s].state.Filter = (TextureFilter)reader.ReadByte(); Samplers[s].state.MaxAnisotropy = reader.ReadInt32(); Samplers[s].state.MaxMipLevel = reader.ReadInt32(); Samplers[s].state.MipMapLevelOfDetailBias = reader.ReadSingle(); } #if OPENGL Samplers[s].name = reader.ReadString(); #else Samplers[s].name = null; #endif Samplers[s].parameter = reader.ReadByte(); } var cbufferCount = (int)reader.ReadByte(); CBuffers = new int[cbufferCount]; for (var c = 0; c < cbufferCount; c++) { CBuffers[c] = reader.ReadByte(); } PlatformConstruct(reader, isVertexShader, shaderBytecode); }
internal Shader(GraphicsDevice device, BinaryReader reader) { GraphicsDevice = device; var isVertexShader = reader.ReadBoolean(); Stage = isVertexShader ? ShaderStage.Vertex : ShaderStage.Pixel; var shaderLength = reader.ReadInt32(); var shaderBytecode = reader.ReadBytes(shaderLength); var samplerCount = (int)reader.ReadByte(); Samplers = new SamplerInfo[samplerCount]; for (var s = 0; s < samplerCount; s++) { Samplers[s].type = (SamplerType)reader.ReadByte(); Samplers[s].textureSlot = reader.ReadByte(); Samplers[s].samplerSlot = reader.ReadByte(); if (reader.ReadBoolean()) { Samplers[s].state = new SamplerState(); Samplers[s].state.AddressU = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressV = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressW = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.BorderColor = new Color( reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); Samplers[s].state.Filter = (TextureFilter)reader.ReadByte(); Samplers[s].state.MaxAnisotropy = reader.ReadInt32(); Samplers[s].state.MaxMipLevel = reader.ReadInt32(); Samplers[s].state.MipMapLevelOfDetailBias = reader.ReadSingle(); } #if OPENGL Samplers[s].name = reader.ReadString(); #else Samplers[s].name = null; #endif Samplers[s].parameter = reader.ReadByte(); } var cbufferCount = (int)reader.ReadByte(); CBuffers = new int[cbufferCount]; for (var c = 0; c < cbufferCount; c++) CBuffers[c] = reader.ReadByte(); PlatformConstruct(reader, isVertexShader, shaderBytecode); }
internal Shader(GraphicsDevice device, BinaryReader reader) { GraphicsDevice = device; var isVertexShader = reader.ReadBoolean(); Stage = isVertexShader ? ShaderStage.Vertex : ShaderStage.Pixel; var shaderLength = reader.ReadInt32(); var shaderBytecode = reader.ReadBytes(shaderLength); var samplerCount = (int)reader.ReadByte(); Samplers = new SamplerInfo[samplerCount]; for (var s = 0; s < samplerCount; s++) { Samplers[s].type = (SamplerType)reader.ReadByte(); Samplers[s].textureSlot = reader.ReadByte(); Samplers[s].samplerSlot = reader.ReadByte(); if (reader.ReadBoolean()) { Samplers[s].state = new SamplerState(); Samplers[s].state.AddressU = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressV = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressW = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.Filter = (TextureFilter)reader.ReadByte(); Samplers[s].state.MaxAnisotropy = reader.ReadInt32(); Samplers[s].state.MaxMipLevel = reader.ReadInt32(); Samplers[s].state.MipMapLevelOfDetailBias = reader.ReadSingle(); } #if OPENGL Samplers[s].name = reader.ReadString(); #else Samplers[s].name = null; #endif Samplers[s].parameter = reader.ReadByte(); } var cbufferCount = (int)reader.ReadByte(); CBuffers = new int[cbufferCount]; for (var c = 0; c < cbufferCount; c++) CBuffers[c] = reader.ReadByte(); #if DIRECTX _shaderBytecode = shaderBytecode; // We need the bytecode later for allocating the // input layout from the vertex declaration. Bytecode = shaderBytecode; HashKey = MonoGame.Utilities.Hash.ComputeHash(Bytecode); if (isVertexShader) CreateVertexShader(); else CreatePixelShader(); #endif // DIRECTX #if OPENGL _glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode); HashKey = MonoGame.Utilities.Hash.ComputeHash(shaderBytecode); var attributeCount = (int)reader.ReadByte(); _attributes = new Attribute[attributeCount]; for (var a = 0; a < attributeCount; a++) { _attributes[a].name = reader.ReadString(); _attributes[a].usage = (VertexElementUsage)reader.ReadByte(); _attributes[a].index = reader.ReadByte(); _attributes[a].format = reader.ReadInt16(); } #endif // OPENGL }
internal Shader(GraphicsDevice device, BinaryReader reader) { GraphicsDevice = device; var isVertexShader = reader.ReadBoolean(); Stage = isVertexShader ? ShaderStage.Vertex : ShaderStage.Pixel; var shaderLength = reader.ReadInt32(); var shaderBytecode = reader.ReadBytes(shaderLength); var samplerCount = (int)reader.ReadByte(); Samplers = new SamplerInfo[samplerCount]; for (var s = 0; s < samplerCount; s++) { Samplers[s].type = (SamplerType)reader.ReadByte(); Samplers[s].textureSlot = reader.ReadByte(); Samplers[s].samplerSlot = reader.ReadByte(); if (reader.ReadBoolean()) { Samplers[s].state = new SamplerState(); Samplers[s].state.AddressU = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressV = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressW = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.BorderColor = new Color( reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); Samplers[s].state.Filter = (TextureFilter)reader.ReadByte(); Samplers[s].state.MaxAnisotropy = reader.ReadInt32(); Samplers[s].state.MaxMipLevel = reader.ReadInt32(); Samplers[s].state.MipMapLevelOfDetailBias = reader.ReadSingle(); } Samplers[s].name = reader.ReadString(); Samplers[s].parameter = reader.ReadByte(); } var cbufferCount = (int)reader.ReadByte(); CBuffers = new int[cbufferCount]; for (var c = 0; c < cbufferCount; c++) { CBuffers[c] = reader.ReadByte(); } var attributeCount = (int)reader.ReadByte(); Attributes = new VertexAttribute[attributeCount]; for (var a = 0; a < attributeCount; a++) { Attributes[a].name = reader.ReadString(); Attributes[a].usage = (VertexElementUsage)reader.ReadByte(); Attributes[a].index = reader.ReadByte(); Attributes[a].location = reader.ReadInt16(); } PlatformConstruct(isVertexShader, shaderBytecode); }
internal Shader(GraphicsDevice device, BinaryReader reader) { GraphicsDevice = device; var isVertexShader = reader.ReadBoolean(); Stage = isVertexShader ? ShaderStage.Vertex : ShaderStage.Pixel; var shaderLength = reader.ReadInt32(); var shaderBytecode = reader.ReadBytes(shaderLength); var samplerCount = (int)reader.ReadByte(); Samplers = new SamplerInfo[samplerCount]; for (var s = 0; s < samplerCount; s++) { Samplers[s].type = (SamplerType)reader.ReadByte(); Samplers[s].textureSlot = reader.ReadByte(); Samplers[s].samplerSlot = reader.ReadByte(); if (reader.ReadBoolean()) { Samplers[s].state = new SamplerState(); Samplers[s].state.AddressU = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressV = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.AddressW = (TextureAddressMode)reader.ReadByte(); Samplers[s].state.Filter = (TextureFilter)reader.ReadByte(); Samplers[s].state.MaxAnisotropy = reader.ReadInt32(); Samplers[s].state.MaxMipLevel = reader.ReadInt32(); Samplers[s].state.MipMapLevelOfDetailBias = reader.ReadSingle(); } #if OPENGL Samplers[s].name = reader.ReadString(); #endif Samplers[s].parameter = reader.ReadByte(); } var cbufferCount = (int)reader.ReadByte(); CBuffers = new int[cbufferCount]; for (var c = 0; c < cbufferCount; c++) { CBuffers[c] = reader.ReadByte(); } #if DIRECTX var d3dDevice = device._d3dDevice; if (isVertexShader) { _vertexShader = new VertexShader(d3dDevice, shaderBytecode, null); // We need the bytecode later for allocating the // input layout from the vertex declaration. Bytecode = shaderBytecode; HashKey = MonoGame.Utilities.Hash.ComputeHash(Bytecode); } else { _pixelShader = new PixelShader(d3dDevice, shaderBytecode); } #endif // DIRECTX #if OPENGL _glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode); HashKey = MonoGame.Utilities.Hash.ComputeHash(shaderBytecode); var attributeCount = (int)reader.ReadByte(); _attributes = new Attribute[attributeCount]; for (var a = 0; a < attributeCount; a++) { _attributes[a].name = reader.ReadString(); _attributes[a].usage = (VertexElementUsage)reader.ReadByte(); _attributes[a].index = reader.ReadByte(); _attributes[a].format = reader.ReadInt16(); } #endif // OPENGL }