Zeleniy: Gebe kalmadan önceki yumurta. Bunu neden ortaya koyduğumuzu hala anlamış değilim, faydalı ve kesinleşmemiş bir şey yapmak daha iyi olurdu.
Svetosha: Ve eğer yararlı değillerse)))))) bu fırsatların kullanımı
Yenilikler, evrensel sorunlar hakkında hiçbir şeyin kokmadığı burunlarının bakış açısıyla karar veren bu tür "sermyazhnye uygulayıcıları" tarafından sıklıkla süngüyle karşılanır.
Ve sonra, fayda herkes tarafından görüldüğünde, saldırılarını güvenle unuturlar.
Yenilikler, evrensel sorunları hiçbir şeyin kokmadığı burunlarının bakış açısıyla değerlendiren bu tür "gri uygulayıcılar" tarafından sıklıkla ters karşılanmaktadır.
Ve sonra, herkes faydasını gördüğünde, saldırılarını güvenle unuturlar.
Evet, OpenCL gerçekten harika. Dürüst olmak gerekirse, 5 ile ilgili durumu uzun süredir takip etmedim. Emirlerin birbirini emmesi hala aynı mı?
Bir sonraki derlemeden itibaren, ResourceCreate() işlevlerini kullanarak anında grafik kaynakları oluşturmak için yeni özellikler mevcut olacak.
İşte görüntüleri diske dökmeden, daha hızlı ve diskte kaynak erişim çakışmaları olmadan çalışan yeniden yazılmış ve basitleştirilmiş bir komut dosyası:
//+------------------------------------------------------------------+//|OpenCLTest.mq5 |//| Telif Hakkı 2011, MetaQuotes Software Corp. | |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2011, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"//---#define SIZE_X 512#define SIZE_Y 512//+------------------------------------------------------------------+//| OpenCL fonksiyon kodu|//+------------------------------------------------------------------+conststring cl_src=
"__kernel void MFractal( \r\n"" float x0, \r\n"" float y0, \r\n"" float x1, \r\n"" float y1, \r\n"" uint max, \r\n"" __global uint *out) \r\n"" { \r\n"" size_t w = get_global_size(0); \r\n"" size_t h = get_global_size(1); \r\n"" size_t gx = get_global_id(0); \r\n"" size_t gy = get_global_id(1); \r\n"" float dx = x0 + gx * (x1-x0) / (float) w; \r\n"" float dy = y0 + gy * (y1-y0) / (float)h; \r\n"" float x = 0; \r\n"" float y = 0; \r\n"" float xx = 0; \r\n"" float yy = 0; \r\n"" float xy = 0; \r\n"" uint i = 0; \r\n"" while ((xx+yy)<4 && i<max) \r\n"" { \r\n"" xx = x*x; \r\n"" yy = y*y; \r\n"" xy = x*y; \r\n"" y = xy+xy+dy; \r\n"" x = xx-yy+dx; \r\n"" i++; \r\n"" } \r\n"" if(i==max) \r\n"" out[w*gy+gx] = 0; \r\n"" else \r\n"" out[w*gy+gx] = (uint)((float)0xFFFFFF/(float)max)*i; \r\n"" } \r\n";
//+------------------------------------------------------------------+//| Betik program başlatma işlevi|//+------------------------------------------------------------------+voidOnStart()
{
int cl_ctx;
int cl_prg;
int cl_krn;
int cl_mem;
//--- OpenCL nesnelerini başlatmaif((cl_ctx=CLContextCreate())==INVALID_HANDLE)
{
Print("OpenCL not found");
return;
}
if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE)
{
CLContextFree(cl_ctx);
Print("OpenCL program create failed");
return;
}
if((cl_krn=CLKernelCreate(cl_prg,"MFractal"))==INVALID_HANDLE)
{
CLProgramFree(cl_prg);
CLContextFree(cl_ctx);
Print("OpenCL kernel create failed");
return;
}
if((cl_mem=CLBufferCreate(cl_ctx,SIZE_X*SIZE_Y*sizeof(uint),CL_MEM_READ_WRITE))==INVALID_HANDLE)
{
CLKernelFree(cl_krn);
CLProgramFree(cl_prg);
CLContextFree(cl_ctx);
Print("OpenCL buffer create failed");
return;
}
//--- yürütme için hazırlanıyorfloat x0 =-2;
float y0 =-0.5;
float x1 =-1;
float y1 = 0.5;
uint max = 20000;
uint offset[2]={0,0};
uint work [2]={SIZE_X,SIZE_Y};
string objname ="OpenCL_"+IntegerToString(ChartID());
string resname ="Mandelbrot_"+IntegerToString(ChartID());
//--- değiştirilemez OpenCL fonksiyon parametrelerinin ayarlanması
CLSetKernelArg(cl_krn,4,max);
CLSetKernelArgMem(cl_krn,5,cl_mem);
//--- grafik görüntüleme için nesne oluşturmaObjectCreate(0,objname,OBJ_BITMAP_LABEL,0,0,0);
ObjectSetInteger(0,objname,OBJPROP_XDISTANCE,4);
ObjectSetInteger(0,objname,OBJPROP_YDISTANCE,26);
//--- ilk boş resmi oluşturunuint buf[];
ArrayResize(buf,SIZE_X*SIZE_Y);
ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA);
ObjectSetString(0,objname,OBJPROP_BMPFILE,"::"+resname);
//--- render, dışarıdan durdurulmayana kadarwhile(!IsStopped())
{
uint x=GetTickCount();
//--- kayan parametrelerin ayarlanması
CLSetKernelArg(cl_krn,0,x0);
CLSetKernelArg(cl_krn,1,y0);
CLSetKernelArg(cl_krn,2,x1);
CLSetKernelArg(cl_krn,3,y1);
//--- çerçeveyi oluşturma
CLExecute(cl_krn,2,offset,work);
//--- çerçeve verilerini almak
CLBufferRead(cl_mem,buf);
//--- işleme süresinin çıktısını almaComment(IntegerToString(GetTickCount()-x)+" msec per frame");
//--- çerçeveyi belleğe kaydetme ve çizme
ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA);
ChartRedraw();
//--- küçük bir duraklama ve bir sonraki kare için parametrelerin güncellenmesiSleep(10);
x0+=0.001 f;
x1-=0.001 f;
y0+=0.001 f;
y1-=0.001 f;
}
//--- OpenCL nesnelerini kaldırma
CLBufferFree(cl_mem);
CLKernelFree(cl_krn);
CLProgramFree(cl_prg);
CLContextFree(cl_ctx);
//--- nesneyi kaldırObjectDelete(0,objname);
}
//+------------------------------------------------------------------+
Böylece ayrıntılı işleme için alfa kanallarına sahip herhangi bir dinamik 32 bit görüntü oluşturabilirsiniz.
Dinamik olarak oluşturulan kaynaklar kaynak yöneticisine girer ve terminaldeki tüm MQL5 programları tarafından kullanılabilir.
Onun yardımıyla kendi tamponunuzda çizim yapmak için kendi kütüphanelerinizi oluşturabilir ve daha sonra bunları nesnelere bağlayabilirsiniz. Böylece harici BMP dosyalarındaki harici çizim kütüphanelerinden tamamen kurtulabilirsiniz.
İşte küçük bir örnek - doğrudan buf tamponuna çizim yapabilir ve ardından buna dayalı bir kaynak oluşturabilir ve bunu bir nesneye atayabilirsiniz.
Bir süre sonra, yerel 2D hızlandırma işlevlerini kullanarak aynı tamponlarda çizim yapmak için bir ilkel kütüphane oluşturacağız. Bu çok daha hızlı çizim yapılmasını sağlayacaktır.
Yardımı ile kendi tamponunuzda çizim yapmak için kendi kitaplıklarınızı oluşturabilir ve ardından bunları nesnelere bağlayabilirsiniz. Böylece harici BMP dosyalarındaki harici çizim kütüphanelerinden tamamen kurtulabilirsiniz.
bu işlev sadece OpenCL ile çalışmak için değil, tüm MQL için mevcut olacak mı?
ve oluşturulan BMP kaynaklarındaki alfa kanalı ile ilgili durum nedir?
Bir süre sonra, yerel 2D hızlandırma fonksiyonlarını kullanarak aynı tamponlarda çizim yapmak için bir ilkel kütüphane oluşturacağız.
Anlıyorum, ama bence, geliştiricilerin grafiklerle çalışmak için hem yeni işlevi hem de temel sınıfı bir kerede duyurmaları daha iyidir, aksi takdirde yine mql5'te programlamanın zorlukları hakkında "salondan bağırmaya" başlayacaktır.
ZY: "yanıtla" bağlantısı çalışmayan sadece ben miyim? Bir gönderiyi alıntılamak yerine "Yeni yorum" penceresi beliriyor.
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Ve eğer yararlı değillerse)))))) bu fırsatların ne faydası var?
Yenilikler, evrensel sorunlar hakkında hiçbir şeyin kokmadığı burunlarının bakış açısıyla karar veren bu tür "sermyazhnye uygulayıcıları" tarafından sıklıkla süngüyle karşılanır.
Ve sonra, fayda herkes tarafından görüldüğünde, saldırılarını güvenle unuturlar.
Yenilikler, evrensel sorunları hiçbir şeyin kokmadığı burunlarının bakış açısıyla değerlendiren bu tür "gri uygulayıcılar" tarafından sıklıkla ters karşılanmaktadır.
Ve sonra, herkes faydasını gördüğünde, saldırılarını güvenle unuturlar.
Sipariş emilimi hala orada mı?
Hala orada olduğundan değil.
Başka türlü olamaz.
Bir sonraki derlemeden itibaren, ResourceCreate() işlevlerini kullanarak anında grafik kaynakları oluşturmak için yeni özellikler mevcut olacak.
İşte görüntüleri diske dökmeden, daha hızlı ve diskte kaynak erişim çakışmaları olmadan çalışan yeniden yazılmış ve basitleştirilmiş bir komut dosyası:
Böylece ayrıntılı işleme için alfa kanallarına sahip herhangi bir dinamik 32 bit görüntü oluşturabilirsiniz.
Dinamik olarak oluşturulan kaynaklar kaynak yöneticisine girer ve terminaldeki tüm MQL5 programları tarafından kullanılabilir.
Sadece ResourceCreate() fonksiyonu mu duyurulacak yoksa grafiksel nesneler/ilkeller ile çalışmak için bir sınıf mı hazırlanacak?
Bu fonksiyon zaten mevcut olacak.
Onun yardımıyla kendi tamponunuzda çizim yapmak için kendi kütüphanelerinizi oluşturabilir ve daha sonra bunları nesnelere bağlayabilirsiniz. Böylece harici BMP dosyalarındaki harici çizim kütüphanelerinden tamamen kurtulabilirsiniz.
İşte küçük bir örnek - doğrudan buf tamponuna çizim yapabilir ve ardından buna dayalı bir kaynak oluşturabilir ve bunu bir nesneye atayabilirsiniz.
Bir süre sonra, yerel 2D hızlandırma işlevlerini kullanarak aynı tamponlarda çizim yapmak için bir ilkel kütüphane oluşturacağız. Bu çok daha hızlı çizim yapılmasını sağlayacaktır.
Bu özellik zaten mevcut olacaktır.
Yardımı ile kendi tamponunuzda çizim yapmak için kendi kitaplıklarınızı oluşturabilir ve ardından bunları nesnelere bağlayabilirsiniz. Böylece harici BMP dosyalarındaki harici çizim kütüphanelerinden tamamen kurtulabilirsiniz.
bu işlev sadece OpenCL ile çalışmak için değil, tüm MQL için mevcut olacak mı?
ve oluşturulan BMP kaynaklarındaki alfa kanalı ile ilgili durum nedir?
Anlıyorum, ama bence, geliştiricilerin grafiklerle çalışmak için hem yeni işlevi hem de temel sınıfı bir kerede duyurmaları daha iyidir, aksi takdirde yine mql5'te programlamanın zorlukları hakkında "salondan bağırmaya" başlayacaktır.
ZY: "yanıtla" bağlantısı çalışmayan sadece ben miyim? Bir gönderiyi alıntılamak yerine "Yeni yorum" penceresi beliriyor.
sergeev 2012.03.19 17:25 #
ve oluşturulan BMP kaynaklarında alfa kanalı ile ilgili durum nedir?