protected override void OnResultCompile() { if (Result == null) { GpuTexture result = null; PixelFormat createFormatV = CreateFormat; if (createFormatV != PixelFormat.Unknown) { //create Vector2I size = CreateSize; if (size.X > 0 && size.Y > 0) { //!!!!!что еще проверить? //!!!!3d support TypeEnum type = CreateType; bool mipmaps = CreateMipmaps; int arrayLayers = CreateArrayLayers; Usages usage = CreateUsage; int fsaa = CreateFSAA; int depth; if (type == TypeEnum._2D) { depth = 1; } else if (type == TypeEnum.Cube) { depth = 6; } else { depth = CreateDepth; } GpuTexture.Usages gpuUsage = 0; if ((usage & Usages.Dynamic) != 0) { gpuUsage |= GpuTexture.Usages.Dynamic; } else { gpuUsage |= GpuTexture.Usages.Static; } if ((usage & Usages.WriteOnly) != 0) { gpuUsage |= GpuTexture.Usages.WriteOnly; } if ((usage & Usages.AutoMipmaps) != 0) { gpuUsage |= GpuTexture.Usages.AutoMipmap; } if ((usage & Usages.RenderTarget) != 0) { gpuUsage |= GpuTexture.Usages.RenderTarget; } if ((usage & Usages.ReadBack) != 0) { gpuUsage |= GpuTexture.Usages.ReadBack; } if ((usage & Usages.BlitDestination) != 0) { gpuUsage |= GpuTexture.Usages.BlitDestination; } //!!!!!почему для других не Discardable? if ((gpuUsage & GpuTexture.Usages.Dynamic) != 0 && (gpuUsage & GpuTexture.Usages.WriteOnly) != 0) { gpuUsage |= GpuTexture.Usages.DynamicWriteOnlyDiscardable; } result = new GpuTexture(type, size, depth, mipmaps, arrayLayers, createFormatV, gpuUsage, fsaa, out var error2); if (!string.IsNullOrEmpty(error2)) { result.Dispose(); result = null; Log.Warning("Unable to create texture. " + error2); } } } else { //load //!!!!3d support //!!!!!проверять наличие файла. если нет, то он по дефолту создает 512 512 Unknown формат. это какая-то хрень. надо разрулить //!!!!threading //!!!!!каждый раз проверять будет если нет файла. где еще так? string[] loadCubeMap6Files = null; string loadFromOneFile = null; if (AnyCubemapSideIsSpecified()) { if (AllCubemapSidesAreaSpecified()) { loadCubeMap6Files = new string[6]; for (int n = 0; n < 6; n++) { var v = GetLoadCubeSide(n); if (v != null) { loadCubeMap6Files[n] = v.ResourceName; } if (string.IsNullOrEmpty(loadCubeMap6Files[n]) || !VirtualFile.Exists(loadCubeMap6Files[n])) { loadCubeMap6Files = null; break; } } } } else { var v = LoadFile.Value; loadFromOneFile = v != null ? v.ResourceName : ""; if (string.IsNullOrEmpty(loadFromOneFile) || !VirtualFile.Exists(loadFromOneFile)) { loadFromOneFile = null; } } //!!!! //bool RenderToTexture = false; //if( RenderToTexture ) // result = RenderToTextureTest(); //else if (loadFromOneFile != null) { result = LoadOneTexture(loadFromOneFile); } else if (loadCubeMap6Files != null) { result = LoadCubeTexture(loadCubeMap6Files); } } Result = result; } }