void IMeshRenderer.UpdateMesh(CombinedMeshBuffer buffer) { int bufferIndex = buffer.index; int vertexCount = m_vertices.Length; buffer.index += vertexCount / 4; for (int i = bufferIndex; i < buffer.index; ++i) { buffer.objects[i] = -1; int cIndex = i * 4; var bc = buffer.colors32[cIndex]; if (bc.r != m_color.r || bc.g != m_color.g || bc.b != m_color.b || bc.a != m_color.a) { for (int j = 0; j < 4; ++j) buffer.colors32[cIndex + j] = m_color; } } int index = bufferIndex * 4; for (int i = 0; i < vertexCount; ++i) { buffer.uv[index + i] = m_uv[i]; buffer.vertices[index + i] = m_matrixForRender.MultiplyPoint3x4(m_vertices[i]); } buffer.modified = true; buffer.initialized = false; }
public void Init(Factory factory) { renderers = new List <IMeshRenderer>(); mesh = new Mesh(); mesh.name = "LWF/" + factory.data.name; mesh.MarkDynamic(); meshFilter = gameObject.AddComponent <MeshFilter>(); meshFilter.sharedMesh = mesh; meshRenderer = gameObject.AddComponent <UnityEngine.MeshRenderer>(); #if UNITY_4_6 meshRenderer.castShadows = false; #else meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; #endif meshRenderer.receiveShadows = false; UpdateSortingLayerAndOrder(factory); UpdateLayer(factory); if (factory.useAdditionalColor) { additionalColor = UnityEngine.Color.clear; property = new MaterialPropertyBlock(); additionalColorId = Shader.PropertyToID("_AdditionalColor"); } buffer = new CombinedMeshBuffer(); }
public BitmapRenderer(LWF lwf, BitmapContext context) : base(lwf) { m_context = context; m_matrix = new Matrix(0, 0, 0, 0, 0, 0); m_matrixForRender = new Matrix4x4(); m_colorMult = new UnityEngine.Color(); m_colorAdd = new UnityEngine.Color(); m_blendMode = (int)Format.Constant.BLEND_MODE_NORMAL; m_z = -1; m_updated = false; m_buffer = null; m_bufferIndex = -1; }
public TextMeshRenderer(LWF lwf, UnityRenderer.TextContext context) : base(lwf, context) { m_matrix = new Matrix(0, 0, 0, 0, 0, 0); m_matrixForRender = new Matrix4x4(); m_colorMult = new UnityEngine.Color(); m_colorAdd = new UnityEngine.Color(); m_color = new Color32(); m_z = -1; m_updated = false; m_buffer = null; m_bufferIndex = -1; }
void IMeshRenderer.UpdateMesh(CombinedMeshBuffer buffer) { int bufferIndex = buffer.index++; Color32 color32 = m_colorMult; int index = bufferIndex * 4; Color32 bc = buffer.colors32[index]; if (buffer.initialized || bc.r != color32.r || bc.g != color32.g || bc.b != color32.b || bc.a != color32.a) { buffer.modified = true; for (int i = 0; i < 4; ++i) { buffer.colors32[index + i] = color32; } } bool needsUpdate = m_updated; int objId = m_context.objectId + 1; if (buffer.initialized || buffer.objects[bufferIndex] != objId) { buffer.modified = true; buffer.objects[bufferIndex] = objId; for (int i = 0; i < 4; ++i) { buffer.uv[index + i] = m_context.uv[i]; } needsUpdate = true; } if (needsUpdate) { buffer.modified = true; for (int i = 0; i < 4; ++i) { buffer.vertices[index + i] = m_matrixForRender.MultiplyPoint3x4(m_context.vertices[i]); } } buffer.initialized = false; }
public Factory(Data d, GameObject gObj, float zOff = 0, float zR = 1, int rQOff = 0, Camera cam = null, string texturePrfx = "", string fontPrfx = "", TextureLoader textureLdr = null, TextureUnloader textureUnldr = null) : base(gObj, zOff, zR, rQOff, cam, texturePrfx, fontPrfx, textureLdr, textureUnldr) { data = d; mesh = new Mesh(); mesh.name = "LWF/" + data.name; #if !UNITY_3_5 mesh.MarkDynamic(); #endif meshFilter = gameObject.AddComponent <MeshFilter>(); meshFilter.sharedMesh = mesh; meshRenderer = gameObject.AddComponent <UnityEngine.MeshRenderer>(); meshRenderer.castShadows = false; meshRenderer.receiveShadows = false; textureName = texturePrefix + data.textures[0].filename; meshRenderer.sharedMaterial = ResourceCache.SharedInstance().LoadTexture( data.name, textureName, data.textures[0].format, textureLoader, textureUnloader); if (renderQueueOffset != 0) { meshRenderer.sharedMaterial.renderQueue += renderQueueOffset; } premultipliedAlpha = (data.textures[0].format == (int)Format.Constant.TEXTUREFORMAT_PREMULTIPLIEDALPHA); buffer = new CombinedMeshBuffer(); CreateBitmapContexts(data); CreateTextContexts(data); }
void IMeshRenderer.UpdateMesh(CombinedMeshBuffer buffer) { int bufferIndex = buffer.index; int vertexCount = m_vertices.Length; buffer.index += vertexCount / 4; for (int i = bufferIndex; i < buffer.index; ++i) { int cIndex = i * 4; var bc = buffer.colors32[cIndex]; if (bc.r != m_color.r || bc.g != m_color.g || bc.b != m_color.b || bc.a != m_color.a) { buffer.modified = true; for (int j = 0; j < 4; ++j) { buffer.colors32[cIndex + j] = m_color; } } } if (m_updated || m_buffer != buffer || m_bufferIndex != bufferIndex || buffer.initialized) { m_buffer = buffer; m_bufferIndex = bufferIndex; buffer.modified = true; int index = bufferIndex * 4; for (int i = 0; i < vertexCount; ++i) { buffer.uv[index + i] = m_uv[i]; buffer.vertices[index + i] = m_matrixForRender.MultiplyPoint3x4(m_vertices[i]); } } }
void IMeshRenderer.UpdateMesh(CombinedMeshBuffer buffer) { int bufferIndex = buffer.index++; Color32 color32 = m_colorMult; int index = bufferIndex * 4; Color32 bc = buffer.colors32[index]; if (buffer.initialized || bc.r != color32.r || bc.g != color32.g || bc.b != color32.b || bc.a != color32.a) { buffer.modified = true; for (int i = 0; i < 4; ++i) { buffer.colors32[index + i] = color32; } } if (m_updated || m_buffer != buffer || m_bufferIndex != bufferIndex || buffer.initialized) { m_buffer = buffer; m_bufferIndex = bufferIndex; buffer.modified = true; for (int i = 0; i < 4; ++i) { buffer.uv[index + i] = m_context.uv[i]; buffer.vertices[index + i] = m_matrixForRender.MultiplyPoint3x4(m_context.vertices[i]); } } }
public Factory(Data d, GameObject gObj, float zOff = 0, float zR = 1, int rQOff = 0, bool uAC = false, Camera cam = null, string texturePrfx = "", string fontPrfx = "", TextureLoader textureLdr = null, TextureUnloader textureUnldr = null) : base(gObj, zOff, zR, rQOff, uAC, cam, texturePrfx, fontPrfx, textureLdr, textureUnldr) { data = d; mesh = new Mesh(); mesh.name = "LWF/" + data.name; #if !UNITY_3_5 mesh.MarkDynamic(); #endif if (Application.isEditor) { meshFilter = gameObject.GetComponent<MeshFilter>(); if (meshFilter == null) meshFilter = gameObject.AddComponent<MeshFilter>(); } else { meshFilter = gameObject.AddComponent<MeshFilter>(); } meshFilter.sharedMesh = mesh; if (Application.isEditor) { meshRenderer = gameObject.GetComponent<UnityEngine.MeshRenderer>(); if (meshRenderer == null) meshRenderer = gameObject.AddComponent<UnityEngine.MeshRenderer>(); } else { meshRenderer = gameObject.AddComponent<UnityEngine.MeshRenderer>(); } meshRenderer.castShadows = false; meshRenderer.receiveShadows = false; textureName = texturePrefix + data.textures[0].filename; meshRenderer.sharedMaterial = ResourceCache.SharedInstance().LoadTexture( data.name, textureName, data.textures[0].format, true, useAdditionalColor, textureLoader, textureUnloader); if (renderQueueOffset != 0) meshRenderer.sharedMaterial.renderQueue += renderQueueOffset; premultipliedAlpha = (data.textures[0].format == (int)Format.Constant.TEXTUREFORMAT_PREMULTIPLIEDALPHA); buffer = new CombinedMeshBuffer(); CreateBitmapContexts(data); }
public void Init(Factory factory) { renderers = new List<IMeshRenderer>(); mesh = new Mesh(); mesh.name = "LWF/" + factory.data.name; mesh.MarkDynamic(); meshFilter = gameObject.AddComponent<MeshFilter>(); meshFilter.sharedMesh = mesh; meshRenderer = gameObject.AddComponent<UnityEngine.MeshRenderer>(); if (!string.IsNullOrEmpty(factory.sortingLayerName)) meshRenderer.sortingLayerName = factory.sortingLayerName; meshRenderer.sortingOrder = factory.sortingOrder; meshRenderer.castShadows = false; meshRenderer.receiveShadows = false; buffer = new CombinedMeshBuffer(); }
public void Init(Factory factory) { renderers = new List<IMeshRenderer>(); mesh = new Mesh(); mesh.name = "LWF/" + factory.data.name; mesh.MarkDynamic(); meshFilter = gameObject.AddComponent<MeshFilter>(); meshFilter.sharedMesh = mesh; meshRenderer = gameObject.AddComponent<UnityEngine.MeshRenderer>(); #if UNITY_4_6 meshRenderer.castShadows = false; #else meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; #endif meshRenderer.receiveShadows = false; UpdateSortingLayerAndOrder(factory); UpdateLayer(factory); if (factory.useAdditionalColor) { additionalColor = UnityEngine.Color.clear; property = new MaterialPropertyBlock(); additionalColorId = Shader.PropertyToID("_AdditionalColor"); } buffer = new CombinedMeshBuffer(); }
void IMeshRenderer.UpdateMesh(CombinedMeshBuffer buffer) { int bufferIndex = buffer.index++; Factory factory = m_context.factory; Color32 color32 = m_colorMult; int index = bufferIndex * 4; Color32 bc = buffer.colors32[index]; if (buffer.initialized || bc.r != color32.r || bc.g != color32.g || bc.b != color32.b || bc.a != color32.a) { buffer.modified = true; for (int i = 0; i < 4; ++i) buffer.colors32[index + i] = color32; } if (factory.useAdditionalColor) { Vector3 bac = buffer.additionalColors[index]; if (buffer.initialized || bac.x != m_colorAdd.r || bac.y != m_colorAdd.g || bac.z != m_colorAdd.b) { buffer.modified = true; for (int i = 0; i < 4; ++i) buffer.additionalColors[index + i] = new Vector3(m_colorAdd.r, m_colorAdd.g, m_colorAdd.b); } } bool needsUpdate = m_updated; if (buffer.initialized || buffer.objects[bufferIndex] != m_context.objectId) { buffer.modified = true; buffer.objects[bufferIndex] = m_context.objectId; for (int i = 0; i < 4; ++i) buffer.uv[index + i] = m_context.uv[i]; needsUpdate = true; } if (needsUpdate) { buffer.modified = true; for (int i = 0; i < 4; ++i) { buffer.vertices[index + i] = m_matrixForRender.MultiplyPoint3x4(m_context.vertices[i]); } } buffer.initialized = false; }
public override void Render(Matrix matrix, ColorTransform colorTransform, int renderingIndex, int renderingCount, bool visible) { // Ignore null texture if (m_context == null) { return; } Factory factory = m_context.factory; CombinedMeshBuffer buffer = factory.buffer; int bufferIndex = buffer.index++; if (!factory.updated) { return; } if (!visible) { goto invisible; } #if LWF_USE_ADDITIONALCOLOR factory.ConvertColorTransform( ref m_colorMult, ref m_colorAdd, colorTransform); #else factory.ConvertColorTransform(ref m_colorMult, colorTransform); #endif if (m_colorMult.a <= 0) { goto invisible; } if (factory.premultipliedAlpha) { m_colorMult.r *= m_colorMult.a; m_colorMult.g *= m_colorMult.a; m_colorMult.b *= m_colorMult.a; } Color32 color32 = m_colorMult; factory.ConvertMatrix(ref m_matrix, matrix, 1, renderingCount - renderingIndex, m_context.height); int index = bufferIndex * 4; Color32 bc = buffer.colors32[index]; if (bc.r != color32.r || bc.g != color32.g || bc.b != color32.b || bc.a != color32.a) { for (int i = 0; i < 4; ++i) { buffer.colors32[index + i] = color32; } } if (!buffer.clean && m_available && buffer.objects[bufferIndex] == m_context.objectId) { index = bufferIndex * 4; for (int i = 0; i < 4; ++i) { buffer.vertices[index + i] = m_matrix.MultiplyPoint3x4(m_context.vertices[i]); } return; } buffer.objects[bufferIndex] = m_context.objectId; index = bufferIndex * 4; for (int i = 0; i < 4; ++i) { buffer.vertices[index + i] = m_matrix.MultiplyPoint3x4(m_context.vertices[i]); buffer.uv[index + i] = m_context.uv[i]; } int offset = bufferIndex * 4; index = bufferIndex * 6; for (int i = 0; i < 6; ++i) { buffer.triangles[index + i] = m_context.triangles[i] + offset; } buffer.changed = true; m_available = true; return; invisible: factory.ConvertMatrix(ref m_matrix, matrix, 1, renderingCount - renderingIndex, m_context.height); Vector3 v = m_matrix.MultiplyPoint3x4(m_context.vertices[0]); index = bufferIndex * 4; for (int i = 0; i < 4; ++i) { buffer.vertices[index + i] = v; buffer.colors32[index + i] = s_clearColor; } m_available = false; }
void IMeshRenderer.UpdateMesh(CombinedMeshBuffer buffer) { int bufferIndex = buffer.index++; Color32 color32 = m_colorMult; int index = bufferIndex * 4; Color32 bc = buffer.colors32[index]; if (buffer.initialized || bc.r != color32.r || bc.g != color32.g || bc.b != color32.b || bc.a != color32.a) { buffer.modified = true; for (int i = 0; i < 4; ++i) buffer.colors32[index + i] = color32; } if (m_updated || m_buffer != buffer || m_bufferIndex != bufferIndex || buffer.initialized) { m_buffer = buffer; m_bufferIndex = bufferIndex; buffer.modified = true; for (int i = 0; i < 4; ++i) { buffer.uv[index + i] = m_context.uv[i]; buffer.vertices[index + i] = m_matrixForRender.MultiplyPoint3x4(m_context.vertices[i]); } } }